@@ -138,27 +138,67 @@ define i32 @t7(i32 %x, i32 %y) {
138
138
139
139
declare i32 @gen32 ()
140
140
141
- define i32 @t8_commutative (i32 %x ) {
142
- ; CHECK-LABEL: @t8_commutative (
141
+ define i32 @t8_commutative0 (i32 %x ) {
142
+ ; CHECK-LABEL: @t8_commutative0 (
143
143
; CHECK-NEXT: [[Y:%.*]] = call i32 @gen32()
144
144
; CHECK-NEXT: [[T0:%.*]] = xor i32 [[X:%.*]], -1
145
+ ; CHECK-NEXT: call void @use32(i32 [[T0]])
145
146
; CHECK-NEXT: [[T1:%.*]] = add i32 [[Y]], [[T0]]
147
+ ; CHECK-NEXT: call void @use32(i32 [[T1]])
146
148
; CHECK-NEXT: [[T2:%.*]] = add i32 [[T1]], 1
147
149
; CHECK-NEXT: ret i32 [[T2]]
148
150
;
149
151
%y = call i32 @gen32 ()
150
152
%t0 = xor i32 %x , -1
153
+ call void @use32 (i32 %t0 )
151
154
%t1 = add i32 %y , %t0 ; swapped
155
+ call void @use32 (i32 %t1 )
152
156
%t2 = add i32 %t1 , 1
153
157
ret i32 %t2
154
158
}
155
159
160
+ define i32 @t9_commutative1 (i32 %x , i32 %y ) {
161
+ ; CHECK-LABEL: @t9_commutative1(
162
+ ; CHECK-NEXT: [[T0:%.*]] = xor i32 [[X:%.*]], -1
163
+ ; CHECK-NEXT: call void @use32(i32 [[T0]])
164
+ ; CHECK-NEXT: [[T1:%.*]] = sub i32 0, [[X]]
165
+ ; CHECK-NEXT: call void @use32(i32 [[T1]])
166
+ ; CHECK-NEXT: [[T2:%.*]] = sub i32 [[Y:%.*]], [[X]]
167
+ ; CHECK-NEXT: ret i32 [[T2]]
168
+ ;
169
+ %t0 = xor i32 %x , -1
170
+ call void @use32 (i32 %t0 )
171
+ %t1 = add i32 %t0 , 1 ; +1 is not last
172
+ call void @use32 (i32 %t1 )
173
+ %t2 = add i32 %t1 , %y ;
174
+ ret i32 %t2
175
+ }
176
+
177
+ define i32 @t10_commutative2 (i32 %x ) {
178
+ ; CHECK-LABEL: @t10_commutative2(
179
+ ; CHECK-NEXT: [[Y:%.*]] = call i32 @gen32()
180
+ ; CHECK-NEXT: [[T0:%.*]] = xor i32 [[X:%.*]], -1
181
+ ; CHECK-NEXT: call void @use32(i32 [[T0]])
182
+ ; CHECK-NEXT: [[T1:%.*]] = sub i32 0, [[X]]
183
+ ; CHECK-NEXT: call void @use32(i32 [[T1]])
184
+ ; CHECK-NEXT: [[T2:%.*]] = sub i32 [[Y]], [[X]]
185
+ ; CHECK-NEXT: ret i32 [[T2]]
186
+ ;
187
+ %y = call i32 @gen32 ()
188
+ %t0 = xor i32 %x , -1
189
+ call void @use32 (i32 %t0 )
190
+ %t1 = add i32 %t0 , 1 ; +1 is not last
191
+ call void @use32 (i32 %t1 )
192
+ %t2 = add i32 %y , %t1 ; swapped
193
+ ret i32 %t2
194
+ }
195
+
156
196
;------------------------------------------------------------------------------;
157
197
; Basic negative tests
158
198
;------------------------------------------------------------------------------;
159
199
160
- define i32 @n9 (i32 %x , i32 %y ) {
161
- ; CHECK-LABEL: @n9 (
200
+ define i32 @n11 (i32 %x , i32 %y ) {
201
+ ; CHECK-LABEL: @n11 (
162
202
; CHECK-NEXT: [[T0:%.*]] = xor i32 [[X:%.*]], 2147483647
163
203
; CHECK-NEXT: [[T1:%.*]] = add i32 [[T0]], [[Y:%.*]]
164
204
; CHECK-NEXT: [[T2:%.*]] = add i32 [[T1]], 1
@@ -170,8 +210,8 @@ define i32 @n9(i32 %x, i32 %y) {
170
210
ret i32 %t2
171
211
}
172
212
173
- define i32 @n10 (i32 %x , i32 %y ) {
174
- ; CHECK-LABEL: @n10 (
213
+ define i32 @n12 (i32 %x , i32 %y ) {
214
+ ; CHECK-LABEL: @n12 (
175
215
; CHECK-NEXT: [[T0:%.*]] = xor i32 [[X:%.*]], -1
176
216
; CHECK-NEXT: [[T1:%.*]] = add i32 [[T0]], [[Y:%.*]]
177
217
; CHECK-NEXT: [[T2:%.*]] = add i32 [[T1]], 2
0 commit comments