@@ -56,3 +56,81 @@ loop.latch:
56
56
exit:
57
57
ret void
58
58
}
59
+
60
+
61
+ define void @chained_conditions (i64 noundef %a , i64 noundef %b , i64 noundef %c , i64 noundef %d ) #0 {
62
+ ; CHECK-LABEL: @chained_conditions(
63
+ ; CHECK-NEXT: entry:
64
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i64 [[A:%.*]], 2048
65
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i64 [[B:%.*]], 1024
66
+ ; CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP]], [[CMP1]]
67
+ ; CHECK-NEXT: [[CMP3:%.*]] = icmp ugt i64 [[C:%.*]], 1024
68
+ ; CHECK-NEXT: [[OR_COND1:%.*]] = or i1 [[OR_COND]], [[CMP3]]
69
+ ; CHECK-NEXT: br i1 [[OR_COND1]], label [[IF_END10:%.*]], label [[IF_END:%.*]]
70
+ ; CHECK: if.end:
71
+ ; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i64 [[B]], [[A]]
72
+ ; CHECK-NEXT: [[ADD4:%.*]] = add nuw nsw i64 [[ADD]], [[C]]
73
+ ; CHECK-NEXT: [[CMP5_NOT:%.*]] = icmp uge i64 [[ADD4]], [[D:%.*]]
74
+ ; CHECK-NEXT: [[CMP8_NOT:%.*]] = icmp ult i64 [[A]], [[D]]
75
+ ; CHECK-NEXT: [[OR_COND7:%.*]] = or i1 [[CMP5_NOT]], [[CMP8_NOT]]
76
+ ; CHECK-NEXT: br i1 [[OR_COND7]], label [[IF_END10]], label [[IF_THEN9:%.*]]
77
+ ; CHECK: if.then9:
78
+ ; CHECK-NEXT: tail call void @bar()
79
+ ; CHECK-NEXT: br label [[IF_END10]]
80
+ ; CHECK: if.end10:
81
+ ; CHECK-NEXT: ret void
82
+ ;
83
+ entry:
84
+ %a.addr = alloca i64 , align 8
85
+ %b.addr = alloca i64 , align 8
86
+ %c.addr = alloca i64 , align 8
87
+ %d.addr = alloca i64 , align 8
88
+ store i64 %a , ptr %a.addr , align 8
89
+ store i64 %b , ptr %b.addr , align 8
90
+ store i64 %c , ptr %c.addr , align 8
91
+ store i64 %d , ptr %d.addr , align 8
92
+ %0 = load i64 , ptr %a.addr , align 8
93
+ %cmp = icmp ugt i64 %0 , 2048
94
+ br i1 %cmp , label %if.then , label %lor.lhs.false
95
+
96
+ lor.lhs.false: ; preds = %entry
97
+ %1 = load i64 , ptr %b.addr , align 8
98
+ %cmp1 = icmp ugt i64 %1 , 1024
99
+ br i1 %cmp1 , label %if.then , label %lor.lhs.false2
100
+
101
+ lor.lhs.false2: ; preds = %lor.lhs.false
102
+ %2 = load i64 , ptr %c.addr , align 8
103
+ %cmp3 = icmp ugt i64 %2 , 1024
104
+ br i1 %cmp3 , label %if.then , label %if.end
105
+
106
+ if.then: ; preds = %lor.lhs.false2, %lor.lhs.false, %entry
107
+ br label %if.end10
108
+
109
+ if.end: ; preds = %lor.lhs.false2
110
+ %3 = load i64 , ptr %a.addr , align 8
111
+ %4 = load i64 , ptr %b.addr , align 8
112
+ %add = add i64 %3 , %4
113
+ %5 = load i64 , ptr %c.addr , align 8
114
+ %add4 = add i64 %add , %5
115
+ %6 = load i64 , ptr %d.addr , align 8
116
+ %cmp5 = icmp uge i64 %add4 , %6
117
+ br i1 %cmp5 , label %if.then6 , label %if.end7
118
+
119
+ if.then6: ; preds = %if.end
120
+ br label %if.end10
121
+
122
+ if.end7: ; preds = %if.end
123
+ %7 = load i64 , ptr %a.addr , align 8
124
+ %8 = load i64 , ptr %d.addr , align 8
125
+ %cmp8 = icmp uge i64 %7 , %8
126
+ br i1 %cmp8 , label %if.then9 , label %if.end10
127
+
128
+ if.then9: ; preds = %if.end7
129
+ call void @bar ()
130
+ br label %if.end10
131
+
132
+ if.end10: ; preds = %if.then, %if.then6, %if.then9, %if.end7
133
+ ret void
134
+ }
135
+
136
+ declare void @bar ()
0 commit comments