11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2- ; RUN: opt < %s -passes='instcombine<max-iterations=5 >' -S | FileCheck %s
2+ ; RUN: opt < %s -passes='instcombine<no-verify-fixpoint >' -S | FileCheck %s
33
44; This is a fuzzer-generated test that would assert because
55; we'd get into foldAndOfICmps() without running InstSimplify
@@ -11,14 +11,30 @@ define void @simplify_before_foldAndOfICmps(ptr %p, ptr %A8) {
1111; CHECK-NEXT: [[L7:%.*]] = load i16, ptr [[A8:%.*]], align 2
1212; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i16 [[L7]], -1
1313; CHECK-NEXT: [[B11:%.*]] = zext i1 [[TMP1]] to i16
14- ; CHECK-NEXT: [[C10:%.*]] = icmp ugt i16 [[L7]], [[B11]]
15- ; CHECK-NEXT: [[C7:%.*]] = icmp slt i16 [[L7]], 0
16- ; CHECK-NEXT: [[C3:%.*]] = and i1 [[C7]], [[C10]]
17- ; CHECK-NEXT: [[TMP2:%.*]] = xor i1 [[C10]], true
18- ; CHECK-NEXT: [[C18:%.*]] = or i1 [[C7]], [[TMP2]]
19- ; CHECK-NEXT: [[TMP3:%.*]] = sext i1 [[C3]] to i64
14+ ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP1]] to i64
15+ ; CHECK-NEXT: [[G4:%.*]] = getelementptr i16, ptr [[A8]], i64 [[TMP2]]
16+ ; CHECK-NEXT: [[L2:%.*]] = load i16, ptr [[G4]], align 2
17+ ; CHECK-NEXT: [[L4:%.*]] = load i16, ptr [[A8]], align 2
18+ ; CHECK-NEXT: [[B21:%.*]] = sdiv i16 [[L7]], [[L4]]
19+ ; CHECK-NEXT: [[TMP5:%.*]] = select i1 [[TMP1]], i16 [[B21]], i16 0
20+ ; CHECK-NEXT: [[B18:%.*]] = sub i16 0, [[TMP5]]
21+ ; CHECK-NEXT: [[C11:%.*]] = icmp ugt i16 [[L2]], [[B11]]
22+ ; CHECK-NEXT: [[B20:%.*]] = and i16 [[L7]], [[L2]]
23+ ; CHECK-NEXT: [[C5:%.*]] = icmp sgt i16 [[B21]], [[L2]]
24+ ; CHECK-NEXT: [[C12:%.*]] = icmp ule i16 [[B21]], [[L2]]
25+ ; CHECK-NEXT: [[C10:%.*]] = icmp slt i16 [[B20]], 0
26+ ; CHECK-NEXT: [[B29:%.*]] = srem i16 [[L4]], [[B18]]
27+ ; CHECK-NEXT: [[B15:%.*]] = xor i1 [[C10]], [[C11]]
28+ ; CHECK-NEXT: [[TMP6:%.*]] = and i1 [[C12]], [[B15]]
29+ ; CHECK-NEXT: [[C6:%.*]] = xor i1 [[TMP6]], true
30+ ; CHECK-NEXT: [[B33:%.*]] = or i16 [[B29]], [[L4]]
31+ ; CHECK-NEXT: [[C3:%.*]] = and i1 [[C5]], [[C6]]
32+ ; CHECK-NEXT: [[C4:%.*]] = and i1 [[C3]], [[C11]]
33+ ; CHECK-NEXT: [[TMP4:%.*]] = xor i1 [[C11]], true
34+ ; CHECK-NEXT: [[C18:%.*]] = or i1 [[C10]], [[TMP4]]
35+ ; CHECK-NEXT: [[TMP3:%.*]] = sext i1 [[C4]] to i64
2036; CHECK-NEXT: [[G26:%.*]] = getelementptr i1, ptr null, i64 [[TMP3]]
21- ; CHECK-NEXT: store i16 [[L7 ]], ptr [[P:%.*]], align 2
37+ ; CHECK-NEXT: store i16 [[B33 ]], ptr [[P:%.*]], align 2
2238; CHECK-NEXT: store i1 [[C18]], ptr [[P]], align 1
2339; CHECK-NEXT: store ptr [[G26]], ptr [[P]], align 8
2440; CHECK-NEXT: ret void
0 commit comments