Skip to content

Commit 3a67ccf

Browse files
committed
[SimplifyCFG] Add test for trunc nuw in chain of comparisons. (NFC)
1 parent d39772c commit 3a67ccf

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

llvm/test/Transforms/SimplifyCFG/switch_create.ll

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,3 +1192,76 @@ if.end:
11921192
ret void
11931193

11941194
}
1195+
1196+
define void @and_chain_trunc_nuw_i1_condition(i8 %x) {
1197+
; CHECK-LABEL: @and_chain_trunc_nuw_i1_condition(
1198+
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[X:%.*]], -2
1199+
; CHECK-NEXT: [[ICMP:%.*]] = icmp ugt i8 [[ADD]], 2
1200+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i8 [[X]] to i1
1201+
; CHECK-NEXT: [[AND:%.*]] = select i1 [[ICMP]], i1 [[TRUNC]], i1 false
1202+
; CHECK-NEXT: br i1 [[AND]], label [[IF_THEN:%.*]], label [[COMMON_RET:%.*]]
1203+
; CHECK: common.ret:
1204+
; CHECK-NEXT: ret void
1205+
; CHECK: if.then:
1206+
; CHECK-NEXT: tail call void @foo1()
1207+
; CHECK-NEXT: br label [[COMMON_RET]]
1208+
;
1209+
%add = add nsw i8 %x, -2
1210+
%icmp = icmp ugt i8 %add, 2
1211+
%trunc = trunc nuw i8 %x to i1
1212+
%and = select i1 %icmp, i1 %trunc, i1 false
1213+
br i1 %and, label %if.then, label %if.end
1214+
if.then:
1215+
tail call void @foo1()
1216+
ret void
1217+
if.end:
1218+
ret void
1219+
}
1220+
1221+
define void @or_chain_trunc_nuw_i1_condition(i8 %x) {
1222+
; CHECK-LABEL: @or_chain_trunc_nuw_i1_condition(
1223+
; CHECK-NEXT: [[ICMP:%.*]] = icmp eq i8 [[X:%.*]], 2
1224+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i8 [[X]] to i1
1225+
; CHECK-NEXT: [[SWITCH:%.*]] = select i1 [[ICMP]], i1 true, i1 [[TRUNC]]
1226+
; CHECK-NEXT: br i1 [[SWITCH]], label [[IF_THEN:%.*]], label [[COMMON_RET:%.*]]
1227+
; CHECK: common.ret:
1228+
; CHECK-NEXT: ret void
1229+
; CHECK: if.then:
1230+
; CHECK-NEXT: tail call void @foo1()
1231+
; CHECK-NEXT: br label [[COMMON_RET]]
1232+
;
1233+
%icmp = icmp eq i8 %x, 2
1234+
%trunc = trunc nuw i8 %x to i1
1235+
%or = select i1 %icmp, i1 true, i1 %trunc
1236+
br i1 %or, label %if.then, label %if.end
1237+
if.then:
1238+
tail call void @foo1()
1239+
ret void
1240+
if.end:
1241+
ret void
1242+
}
1243+
1244+
define void @neg_and_chain_trunc_i1_condition(i8 %x) {
1245+
; CHECK-LABEL: @neg_and_chain_trunc_i1_condition(
1246+
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[X:%.*]], -2
1247+
; CHECK-NEXT: [[ICMP:%.*]] = icmp ugt i8 [[ADD]], 2
1248+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[X]] to i1
1249+
; CHECK-NEXT: [[AND:%.*]] = select i1 [[ICMP]], i1 [[TRUNC]], i1 false
1250+
; CHECK-NEXT: br i1 [[AND]], label [[IF_THEN:%.*]], label [[COMMON_RET:%.*]]
1251+
; CHECK: common.ret:
1252+
; CHECK-NEXT: ret void
1253+
; CHECK: if.then:
1254+
; CHECK-NEXT: tail call void @foo1()
1255+
; CHECK-NEXT: br label [[COMMON_RET]]
1256+
;
1257+
%add = add nsw i8 %x, -2
1258+
%icmp = icmp ugt i8 %add, 2
1259+
%trunc = trunc i8 %x to i1
1260+
%and = select i1 %icmp, i1 %trunc, i1 false
1261+
br i1 %and, label %if.then, label %if.end
1262+
if.then:
1263+
tail call void @foo1()
1264+
ret void
1265+
if.end:
1266+
ret void
1267+
}

0 commit comments

Comments
 (0)