Skip to content

Commit a392668

Browse files
!fixup update riscv test
1 parent c2cf2dd commit a392668

File tree

1 file changed

+42
-23
lines changed

1 file changed

+42
-23
lines changed

llvm/test/Transforms/SimplifyCFG/RISCV/switch-of-powers-of-two.ll

Lines changed: 42 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -61,30 +61,49 @@ return:
6161
ret i32 %p
6262
}
6363

64-
; Check that switch's of powers of two range is not reduced if default case is reachable
64+
; Check that switch's of powers of two range with the default case reachable is reduced
65+
; w/ Zbb enabled, by jumping non-power-of-two inputs to the default block.
6566
define i32 @switch_of_powers_reachable_default(i32 %x) {
66-
; CHECK-LABEL: @switch_of_powers_reachable_default(
67-
; CHECK-NEXT: entry:
68-
; CHECK-NEXT: switch i32 [[X:%.*]], label [[RETURN:%.*]] [
69-
; CHECK-NEXT: i32 1, label [[BB1:%.*]]
70-
; CHECK-NEXT: i32 8, label [[BB2:%.*]]
71-
; CHECK-NEXT: i32 16, label [[BB3:%.*]]
72-
; CHECK-NEXT: i32 32, label [[BB4:%.*]]
73-
; CHECK-NEXT: i32 64, label [[BB5:%.*]]
74-
; CHECK-NEXT: ]
75-
; CHECK: bb1:
76-
; CHECK-NEXT: br label [[RETURN]]
77-
; CHECK: bb2:
78-
; CHECK-NEXT: br label [[RETURN]]
79-
; CHECK: bb3:
80-
; CHECK-NEXT: br label [[RETURN]]
81-
; CHECK: bb4:
82-
; CHECK-NEXT: br label [[RETURN]]
83-
; CHECK: bb5:
84-
; CHECK-NEXT: br label [[RETURN]]
85-
; CHECK: return:
86-
; CHECK-NEXT: [[P:%.*]] = phi i32 [ 3, [[BB1]] ], [ 2, [[BB2]] ], [ 1, [[BB3]] ], [ 0, [[BB4]] ], [ 42, [[BB5]] ], [ -1, [[ENTRY:%.*]] ]
87-
; CHECK-NEXT: ret i32 [[P]]
67+
; RV64I-LABEL: @switch_of_powers_reachable_default(
68+
; RV64I-NEXT: entry:
69+
; RV64I-NEXT: switch i32 [[X:%.*]], label [[RETURN:%.*]] [
70+
; RV64I-NEXT: i32 1, label [[BB1:%.*]]
71+
; RV64I-NEXT: i32 8, label [[BB2:%.*]]
72+
; RV64I-NEXT: i32 16, label [[BB3:%.*]]
73+
; RV64I-NEXT: i32 32, label [[BB4:%.*]]
74+
; RV64I-NEXT: i32 64, label [[BB5:%.*]]
75+
; RV64I-NEXT: ]
76+
; RV64I: bb1:
77+
; RV64I-NEXT: br label [[RETURN]]
78+
; RV64I: bb2:
79+
; RV64I-NEXT: br label [[RETURN]]
80+
; RV64I: bb3:
81+
; RV64I-NEXT: br label [[RETURN]]
82+
; RV64I: bb4:
83+
; RV64I-NEXT: br label [[RETURN]]
84+
; RV64I: bb5:
85+
; RV64I-NEXT: br label [[RETURN]]
86+
; RV64I: return:
87+
; RV64I-NEXT: [[P:%.*]] = phi i32 [ 3, [[BB1]] ], [ 2, [[BB2]] ], [ 1, [[BB3]] ], [ 0, [[BB4]] ], [ 42, [[BB5]] ], [ -1, [[ENTRY:%.*]] ]
88+
; RV64I-NEXT: ret i32 [[P]]
89+
;
90+
; RV64ZBB-LABEL: @switch_of_powers_reachable_default(
91+
; RV64ZBB-NEXT: entry:
92+
; RV64ZBB-NEXT: [[TMP0:%.*]] = call i32 @llvm.ctpop.i32(i32 [[X:%.*]])
93+
; RV64ZBB-NEXT: [[TMP1:%.*]] = icmp eq i32 [[TMP0]], 1
94+
; RV64ZBB-NEXT: br i1 [[TMP1]], label [[ENTRY_SPLIT:%.*]], label [[RETURN:%.*]]
95+
; RV64ZBB: entry.split:
96+
; RV64ZBB-NEXT: [[TMP2:%.*]] = call i32 @llvm.cttz.i32(i32 [[X]], i1 true)
97+
; RV64ZBB-NEXT: [[TMP3:%.*]] = icmp ult i32 [[TMP2]], 7
98+
; RV64ZBB-NEXT: br i1 [[TMP3]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN]]
99+
; RV64ZBB: switch.lookup:
100+
; RV64ZBB-NEXT: [[TMP4:%.*]] = zext nneg i32 [[TMP2]] to i64
101+
; RV64ZBB-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [7 x i32], ptr @switch.table.switch_of_powers_reachable_default, i64 0, i64 [[TMP4]]
102+
; RV64ZBB-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
103+
; RV64ZBB-NEXT: br label [[RETURN]]
104+
; RV64ZBB: return:
105+
; RV64ZBB-NEXT: [[P:%.*]] = phi i32 [ -1, [[ENTRY:%.*]] ], [ -1, [[ENTRY_SPLIT]] ], [ [[SWITCH_LOAD]], [[SWITCH_LOOKUP]] ]
106+
; RV64ZBB-NEXT: ret i32 [[P]]
88107
;
89108
entry:
90109
switch i32 %x, label %default_case [

0 commit comments

Comments
 (0)