Skip to content

Commit

Permalink
[SimplifyCFG] Add tests for simpilfycfg, switch to lookup table with …
Browse files Browse the repository at this point in the history
…i2 types; NFC
  • Loading branch information
bcl5980 committed Oct 14, 2022
1 parent 94ac8f3 commit a43c097
Showing 1 changed file with 116 additions and 0 deletions.
116 changes: 116 additions & 0 deletions llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll
Expand Up @@ -1691,3 +1691,119 @@ return:
%storemerge = phi i1 [ true, %sw.bb ], [ false, %sw.default ]
ret i1 %storemerge
}

define i32 @signed_overflow1(i8 %n) {
; CHECK-LABEL: @signed_overflow1(
; CHECK-NEXT: start:
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[N:%.*]] to i2
; CHECK-NEXT: [[SWITCH_TABLEIDX:%.*]] = sub i2 [[TRUNC]], -2
; CHECK-NEXT: [[SWITCH_TABLEIDX_ZEXT:%.*]] = zext i2 [[SWITCH_TABLEIDX]] to i3
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x i32], [4 x i32]* @switch.table.signed_overflow1, i32 0, i3 [[SWITCH_TABLEIDX_ZEXT]]
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, i32* [[SWITCH_GEP]], align 4
; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
;
start:
%trunc = trunc i8 %n to i2
switch i2 %trunc, label %bb1 [
i2 0, label %bb6
i2 1, label %bb3
i2 -2, label %bb4
i2 -1, label %bb5
]

bb1: ; preds = %start
unreachable

bb3: ; preds = %start
br label %bb6

bb4: ; preds = %start
br label %bb6

bb5: ; preds = %start
br label %bb6

bb6: ; preds = %start, %bb3, %bb4, %bb5
%.sroa.0.0 = phi i32 [ 4444, %bb5 ], [ 3333, %bb4 ], [ 2222, %bb3 ], [ 1111, %start ]
ret i32 %.sroa.0.0
}

define i32 @signed_overflow2(i8 %n) {
; CHECK-LABEL: @signed_overflow2(
; CHECK-NEXT: start:
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[N:%.*]] to i2
; CHECK-NEXT: switch i2 [[TRUNC]], label [[BB1:%.*]] [
; CHECK-NEXT: i2 1, label [[BB6:%.*]]
; CHECK-NEXT: i2 -2, label [[BB4:%.*]]
; CHECK-NEXT: i2 -1, label [[BB5:%.*]]
; CHECK-NEXT: ]
; CHECK: bb1:
; CHECK-NEXT: unreachable
; CHECK: bb4:
; CHECK-NEXT: br label [[BB6]]
; CHECK: bb5:
; CHECK-NEXT: br label [[BB6]]
; CHECK: bb6:
; CHECK-NEXT: [[DOTSROA_0_0:%.*]] = phi i32 [ 4444, [[BB5]] ], [ 3333, [[BB4]] ], [ 2222, [[START:%.*]] ]
; CHECK-NEXT: ret i32 [[DOTSROA_0_0]]
;
start:
%trunc = trunc i8 %n to i2
switch i2 %trunc, label %bb1 [
i2 1, label %bb3
i2 -2, label %bb4
i2 -1, label %bb5
]

bb1: ; preds = %start
unreachable

bb3: ; preds = %start
br label %bb6

bb4: ; preds = %start
br label %bb6

bb5: ; preds = %start
br label %bb6

bb6: ; preds = %start, %bb3, %bb4, %bb5
%.sroa.0.0 = phi i32 [ 4444, %bb5 ], [ 3333, %bb4 ], [ 2222, %bb3 ]
ret i32 %.sroa.0.0
}

define i32 @signed_overflow_negative(i8 %n) {
; CHECK-LABEL: @signed_overflow_negative(
; CHECK-NEXT: start:
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[N:%.*]] to i2
; CHECK-NEXT: [[SWITCH_TABLEIDX:%.*]] = sub i2 [[TRUNC]], -2
; CHECK-NEXT: [[SWITCH_IDX_CAST:%.*]] = zext i2 [[SWITCH_TABLEIDX]] to i32
; CHECK-NEXT: [[SWITCH_IDX_MULT:%.*]] = mul i32 [[SWITCH_IDX_CAST]], 1111
; CHECK-NEXT: [[SWITCH_OFFSET:%.*]] = add i32 [[SWITCH_IDX_MULT]], 1111
; CHECK-NEXT: ret i32 [[SWITCH_OFFSET]]
;
start:
%trunc = trunc i8 %n to i2
switch i2 %trunc, label %bb1 [
i2 0, label %bb6
i2 1, label %bb3
i2 -2, label %bb4
i2 -1, label %bb5
]

bb1: ; preds = %start
unreachable

bb3: ; preds = %start
br label %bb6

bb4: ; preds = %start
br label %bb6

bb5: ; preds = %start
br label %bb6

bb6: ; preds = %start, %bb3, %bb4, %bb5
%.sroa.0.0 = phi i32 [ 2222, %bb5 ], [ 1111, %bb4 ], [ 4444, %bb3 ], [ 3333, %start ]
ret i32 %.sroa.0.0
}

0 comments on commit a43c097

Please sign in to comment.