@@ -159,16 +159,14 @@ declare void @foo()
159
159
160
160
define i1 @test_icmp_simple (i1 %c , i32 %a , i32 %b ) {
161
161
; CHECK-LABEL: @test_icmp_simple(
162
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[A:%.*]], [[B:%.*]]
162
163
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
163
164
; CHECK: common.ret:
164
- ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi i1 [ [[CMP1:%.*]], [[IF]] ], [ [[CMP2:%.*]], [[ELSE]] ]
165
- ; CHECK-NEXT: ret i1 [[COMMON_RET_OP]]
165
+ ; CHECK-NEXT: ret i1 [[CMP1]]
166
166
; CHECK: if:
167
- ; CHECK-NEXT: [[CMP1]] = icmp ult i32 [[A:%.*]], [[B:%.*]]
168
167
; CHECK-NEXT: call void @foo()
169
168
; CHECK-NEXT: br label [[COMMON_RET:%.*]]
170
169
; CHECK: else:
171
- ; CHECK-NEXT: [[CMP2]] = icmp ugt i32 [[B]], [[A]]
172
170
; CHECK-NEXT: call void @bar()
173
171
; CHECK-NEXT: br label [[COMMON_RET]]
174
172
;
@@ -187,13 +185,8 @@ else:
187
185
188
186
define void @test_icmp_complex (i1 %c , i32 %a , i32 %b ) {
189
187
; CHECK-LABEL: @test_icmp_complex(
190
- ; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
191
- ; CHECK: if:
192
188
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[A:%.*]], [[B:%.*]]
193
189
; CHECK-NEXT: br i1 [[CMP1]], label [[IF2:%.*]], label [[ELSE2:%.*]]
194
- ; CHECK: else:
195
- ; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i32 [[B]], [[A]]
196
- ; CHECK-NEXT: br i1 [[CMP2]], label [[IF2]], label [[ELSE2]]
197
190
; CHECK: common.ret:
198
191
; CHECK-NEXT: ret void
199
192
; CHECK: if2:
@@ -280,16 +273,14 @@ else:
280
273
281
274
define i32 @test_binop (i1 %c , i32 %a , i32 %b ) {
282
275
; CHECK-LABEL: @test_binop(
276
+ ; CHECK-NEXT: [[OP1:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
283
277
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
284
278
; CHECK: common.ret:
285
- ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi i32 [ [[OP1:%.*]], [[IF]] ], [ [[OP2:%.*]], [[ELSE]] ]
286
- ; CHECK-NEXT: ret i32 [[COMMON_RET_OP]]
279
+ ; CHECK-NEXT: ret i32 [[OP1]]
287
280
; CHECK: if:
288
- ; CHECK-NEXT: [[OP1]] = add i32 [[A:%.*]], [[B:%.*]]
289
281
; CHECK-NEXT: call void @foo()
290
282
; CHECK-NEXT: br label [[COMMON_RET:%.*]]
291
283
; CHECK: else:
292
- ; CHECK-NEXT: [[OP2]] = add i32 [[B]], [[A]]
293
284
; CHECK-NEXT: call void @bar()
294
285
; CHECK-NEXT: br label [[COMMON_RET]]
295
286
;
@@ -308,16 +299,14 @@ else:
308
299
309
300
define i32 @test_binop_flags (i1 %c , i32 %a , i32 %b ) {
310
301
; CHECK-LABEL: @test_binop_flags(
302
+ ; CHECK-NEXT: [[OP1:%.*]] = add nsw i32 [[A:%.*]], [[B:%.*]]
311
303
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
312
304
; CHECK: common.ret:
313
- ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi i32 [ [[OP1:%.*]], [[IF]] ], [ [[OP2:%.*]], [[ELSE]] ]
314
- ; CHECK-NEXT: ret i32 [[COMMON_RET_OP]]
305
+ ; CHECK-NEXT: ret i32 [[OP1]]
315
306
; CHECK: if:
316
- ; CHECK-NEXT: [[OP1]] = add nuw nsw i32 [[A:%.*]], [[B:%.*]]
317
307
; CHECK-NEXT: call void @foo()
318
308
; CHECK-NEXT: br label [[COMMON_RET:%.*]]
319
309
; CHECK: else:
320
- ; CHECK-NEXT: [[OP2]] = add nsw i32 [[B]], [[A]]
321
310
; CHECK-NEXT: call void @bar()
322
311
; CHECK-NEXT: br label [[COMMON_RET]]
323
312
;
@@ -392,16 +381,14 @@ else:
392
381
393
382
define i32 @test_intrin (i1 %c , i32 %a , i32 %b ) {
394
383
; CHECK-LABEL: @test_intrin(
384
+ ; CHECK-NEXT: [[OP1:%.*]] = call i32 @llvm.umin.i32(i32 [[A:%.*]], i32 [[B:%.*]])
395
385
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
396
386
; CHECK: common.ret:
397
- ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi i32 [ [[OP1:%.*]], [[IF]] ], [ [[OP2:%.*]], [[ELSE]] ]
398
- ; CHECK-NEXT: ret i32 [[COMMON_RET_OP]]
387
+ ; CHECK-NEXT: ret i32 [[OP1]]
399
388
; CHECK: if:
400
- ; CHECK-NEXT: [[OP1]] = call i32 @llvm.umin.i32(i32 [[A:%.*]], i32 [[B:%.*]])
401
389
; CHECK-NEXT: call void @foo()
402
390
; CHECK-NEXT: br label [[COMMON_RET:%.*]]
403
391
; CHECK: else:
404
- ; CHECK-NEXT: [[OP2]] = call i32 @llvm.umin.i32(i32 [[B]], i32 [[A]])
405
392
; CHECK-NEXT: call void @bar()
406
393
; CHECK-NEXT: br label [[COMMON_RET]]
407
394
;
@@ -448,16 +435,14 @@ else:
448
435
449
436
define float @test_intrin_3arg (i1 %c , float %a , float %b , float %d ) {
450
437
; CHECK-LABEL: @test_intrin_3arg(
438
+ ; CHECK-NEXT: [[OP1:%.*]] = call float @llvm.fma.f32(float [[A:%.*]], float [[B:%.*]], float [[D:%.*]])
451
439
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
452
440
; CHECK: common.ret:
453
- ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi float [ [[OP1:%.*]], [[IF]] ], [ [[OP2:%.*]], [[ELSE]] ]
454
- ; CHECK-NEXT: ret float [[COMMON_RET_OP]]
441
+ ; CHECK-NEXT: ret float [[OP1]]
455
442
; CHECK: if:
456
- ; CHECK-NEXT: [[OP1]] = call float @llvm.fma.f32(float [[A:%.*]], float [[B:%.*]], float [[D:%.*]])
457
443
; CHECK-NEXT: call void @foo()
458
444
; CHECK-NEXT: br label [[COMMON_RET:%.*]]
459
445
; CHECK: else:
460
- ; CHECK-NEXT: [[OP2]] = call float @llvm.fma.f32(float [[B]], float [[A]], float [[D]])
461
446
; CHECK-NEXT: call void @bar()
462
447
; CHECK-NEXT: br label [[COMMON_RET]]
463
448
;
0 commit comments