Skip to content

Commit 863cd17

Browse files
committed
[SimplifyCFG] Make i1 legal to build lookup tables
1 parent cb6f3c1 commit 863cd17

File tree

2 files changed

+6
-32
lines changed

2 files changed

+6
-32
lines changed

llvm/lib/Transforms/Utils/SimplifyCFG.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6448,6 +6448,8 @@ static bool isTypeLegalForLookupTable(Type *Ty, const TargetTransformInfo &TTI,
64486448
// on ABI alignment and padding in the table to allow the load to be widened.
64496449
// Or we could widen the constants and truncate the load.
64506450
unsigned BitWidth = IT->getBitWidth();
6451+
if (BitWidth == 1)
6452+
return true;
64516453
return BitWidth >= 8 && isPowerOf2_32(BitWidth) &&
64526454
DL.fitsInLegalInteger(IT->getBitWidth());
64536455
}

llvm/test/Transforms/SimplifyCFG/fold-i1.ll

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,10 @@ define { i1, i8 } @f(i8 noundef %character) unnamed_addr {
77
; CHECK-LABEL: define { i1, i8 } @f(
88
; CHECK-SAME: i8 noundef [[CHARACTER:%.*]]) unnamed_addr {
99
; CHECK-NEXT: start:
10-
; CHECK-NEXT: switch i8 [[CHARACTER]], label [[BB11:%.*]] [
11-
; CHECK-NEXT: i8 48, label [[BB2:%.*]]
12-
; CHECK-NEXT: i8 49, label [[BB3:%.*]]
13-
; CHECK-NEXT: i8 50, label [[BB4:%.*]]
14-
; CHECK-NEXT: i8 51, label [[BB5:%.*]]
15-
; CHECK-NEXT: i8 52, label [[BB6:%.*]]
16-
; CHECK-NEXT: i8 53, label [[BB7:%.*]]
17-
; CHECK-NEXT: i8 54, label [[BB8:%.*]]
18-
; CHECK-NEXT: i8 55, label [[BB9:%.*]]
19-
; CHECK-NEXT: i8 56, label [[BB10:%.*]]
20-
; CHECK-NEXT: ]
21-
; CHECK: bb2:
22-
; CHECK-NEXT: br label [[BB11]]
23-
; CHECK: bb3:
24-
; CHECK-NEXT: br label [[BB11]]
25-
; CHECK: bb4:
26-
; CHECK-NEXT: br label [[BB11]]
27-
; CHECK: bb5:
28-
; CHECK-NEXT: br label [[BB11]]
29-
; CHECK: bb6:
30-
; CHECK-NEXT: br label [[BB11]]
31-
; CHECK: bb7:
32-
; CHECK-NEXT: br label [[BB11]]
33-
; CHECK: bb8:
34-
; CHECK-NEXT: br label [[BB11]]
35-
; CHECK: bb9:
36-
; CHECK-NEXT: br label [[BB11]]
37-
; CHECK: bb10:
38-
; CHECK-NEXT: br label [[BB11]]
39-
; CHECK: bb11:
40-
; CHECK-NEXT: [[_0_SROA_11_0:%.*]] = phi i8 [ 8, [[BB10]] ], [ 7, [[BB9]] ], [ 6, [[BB8]] ], [ 5, [[BB7]] ], [ 4, [[BB6]] ], [ 3, [[BB5]] ], [ 2, [[BB4]] ], [ 1, [[BB3]] ], [ 0, [[BB2]] ], [ undef, [[START:%.*]] ]
41-
; CHECK-NEXT: [[_0_SROA_0_0:%.*]] = phi i1 [ true, [[BB10]] ], [ true, [[BB9]] ], [ true, [[BB8]] ], [ true, [[BB7]] ], [ true, [[BB6]] ], [ true, [[BB5]] ], [ true, [[BB4]] ], [ true, [[BB3]] ], [ true, [[BB2]] ], [ false, [[START]] ]
10+
; CHECK-NEXT: [[SWITCH_TABLEIDX:%.*]] = sub i8 [[CHARACTER]], 48
11+
; CHECK-NEXT: [[TMP2:%.*]] = icmp ult i8 [[SWITCH_TABLEIDX]], 9
12+
; CHECK-NEXT: [[_0_SROA_11_0:%.*]] = select i1 [[TMP2]], i8 [[SWITCH_TABLEIDX]], i8 undef
13+
; CHECK-NEXT: [[_0_SROA_0_0:%.*]] = select i1 [[TMP2]], i1 true, i1 false
4214
; CHECK-NEXT: [[TMP0:%.*]] = insertvalue { i1, i8 } poison, i1 [[_0_SROA_0_0]], 0
4315
; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { i1, i8 } [[TMP0]], i8 [[_0_SROA_11_0]], 1
4416
; CHECK-NEXT: ret { i1, i8 } [[TMP1]]

0 commit comments

Comments
 (0)