Skip to content

Commit 5b219dd

Browse files
committed
[InstCombine] Add tests for extractvalue of phi (NFC)
1 parent 7e19d53 commit 5b219dd

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed

llvm/test/Transforms/InstCombine/phi-of-extractvalues.ll renamed to llvm/test/Transforms/InstCombine/phi-extractvalue.ll

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,3 +384,137 @@ end:
384384
%r = phi i32 [ %i0, %entry ], [ %i0, %left ], [ %i1, %right ]
385385
ret i32 %r
386386
}
387+
388+
define i32 @extractvalue_of_constant_phi(i1 %c) {
389+
; CHECK-LABEL: @extractvalue_of_constant_phi(
390+
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
391+
; CHECK: if:
392+
; CHECK-NEXT: br label [[JOIN:%.*]]
393+
; CHECK: else:
394+
; CHECK-NEXT: br label [[JOIN]]
395+
; CHECK: join:
396+
; CHECK-NEXT: [[PHI:%.*]] = phi { i32, i32 } [ { i32 1, i32 2 }, [[IF]] ], [ { i32 3, i32 4 }, [[ELSE]] ]
397+
; CHECK-NEXT: [[EV:%.*]] = extractvalue { i32, i32 } [[PHI]], 0
398+
; CHECK-NEXT: ret i32 [[EV]]
399+
;
400+
br i1 %c, label %if, label %else
401+
402+
if:
403+
br label %join
404+
405+
else:
406+
br label %join
407+
408+
join:
409+
%phi = phi { i32, i32 } [ { i32 1, i32 2 }, %if ], [ { i32 3, i32 4 }, %else ]
410+
%ev = extractvalue { i32, i32 } %phi, 0
411+
ret i32 %ev
412+
}
413+
414+
define i32 @extractvalue_of_one_constant_phi(i1 %c, { i32, i32 } %arg) {
415+
; CHECK-LABEL: @extractvalue_of_one_constant_phi(
416+
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
417+
; CHECK: if:
418+
; CHECK-NEXT: br label [[JOIN:%.*]]
419+
; CHECK: else:
420+
; CHECK-NEXT: br label [[JOIN]]
421+
; CHECK: join:
422+
; CHECK-NEXT: [[PHI:%.*]] = phi { i32, i32 } [ [[ARG:%.*]], [[IF]] ], [ { i32 3, i32 4 }, [[ELSE]] ]
423+
; CHECK-NEXT: [[EV:%.*]] = extractvalue { i32, i32 } [[PHI]], 0
424+
; CHECK-NEXT: ret i32 [[EV]]
425+
;
426+
br i1 %c, label %if, label %else
427+
428+
if:
429+
br label %join
430+
431+
else:
432+
br label %join
433+
434+
join:
435+
%phi = phi { i32, i32 } [ %arg, %if ], [ { i32 3, i32 4 }, %else ]
436+
%ev = extractvalue { i32, i32 } %phi, 0
437+
ret i32 %ev
438+
}
439+
440+
define i32 @extractvalue_of_constant_phi_multi_index(i1 %c) {
441+
; CHECK-LABEL: @extractvalue_of_constant_phi_multi_index(
442+
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
443+
; CHECK: if:
444+
; CHECK-NEXT: br label [[JOIN:%.*]]
445+
; CHECK: else:
446+
; CHECK-NEXT: br label [[JOIN]]
447+
; CHECK: join:
448+
; CHECK-NEXT: [[PHI:%.*]] = phi { i32, { i32, i32 } } [ { i32 1, { i32, i32 } { i32 2, i32 3 } }, [[IF]] ], [ { i32 4, { i32, i32 } { i32 5, i32 6 } }, [[ELSE]] ]
449+
; CHECK-NEXT: [[EV:%.*]] = extractvalue { i32, { i32, i32 } } [[PHI]], 1, 1
450+
; CHECK-NEXT: ret i32 [[EV]]
451+
;
452+
br i1 %c, label %if, label %else
453+
454+
if:
455+
br label %join
456+
457+
else:
458+
br label %join
459+
460+
join:
461+
%phi = phi { i32, { i32, i32 } } [ { i32 1, { i32, i32 } { i32 2, i32 3 } }, %if ], [ { i32 4, { i32, i32 } { i32 5, i32 6 } }, %else ]
462+
%ev = extractvalue { i32, { i32, i32 } } %phi, 1, 1
463+
ret i32 %ev
464+
}
465+
466+
define i32 @extractvalue_of_one_constant_phi_multi_index(i1 %c, { i32, { i32, i32 } } %arg) {
467+
; CHECK-LABEL: @extractvalue_of_one_constant_phi_multi_index(
468+
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
469+
; CHECK: if:
470+
; CHECK-NEXT: br label [[JOIN:%.*]]
471+
; CHECK: else:
472+
; CHECK-NEXT: br label [[JOIN]]
473+
; CHECK: join:
474+
; CHECK-NEXT: [[PHI:%.*]] = phi { i32, { i32, i32 } } [ [[ARG:%.*]], [[IF]] ], [ { i32 4, { i32, i32 } { i32 5, i32 6 } }, [[ELSE]] ]
475+
; CHECK-NEXT: [[EV:%.*]] = extractvalue { i32, { i32, i32 } } [[PHI]], 1, 1
476+
; CHECK-NEXT: ret i32 [[EV]]
477+
;
478+
br i1 %c, label %if, label %else
479+
480+
if:
481+
br label %join
482+
483+
else:
484+
br label %join
485+
486+
join:
487+
%phi = phi { i32, { i32, i32 } } [ %arg, %if ], [ { i32 4, { i32, i32 } { i32 5, i32 6 } }, %else ]
488+
%ev = extractvalue { i32, { i32, i32 } } %phi, 1, 1
489+
ret i32 %ev
490+
}
491+
492+
define i32 @extractvalue_of_constant_phi_multiuse(i1 %c) {
493+
; CHECK-LABEL: @extractvalue_of_constant_phi_multiuse(
494+
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
495+
; CHECK: if:
496+
; CHECK-NEXT: br label [[JOIN:%.*]]
497+
; CHECK: else:
498+
; CHECK-NEXT: br label [[JOIN]]
499+
; CHECK: join:
500+
; CHECK-NEXT: [[PHI:%.*]] = phi { i32, i32 } [ { i32 1, i32 2 }, [[IF]] ], [ { i32 3, i32 4 }, [[ELSE]] ]
501+
; CHECK-NEXT: [[EV0:%.*]] = extractvalue { i32, i32 } [[PHI]], 0
502+
; CHECK-NEXT: [[EV1:%.*]] = extractvalue { i32, i32 } [[PHI]], 1
503+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[EV0]], [[EV1]]
504+
; CHECK-NEXT: ret i32 [[ADD]]
505+
;
506+
br i1 %c, label %if, label %else
507+
508+
if:
509+
br label %join
510+
511+
else:
512+
br label %join
513+
514+
join:
515+
%phi = phi { i32, i32 } [ { i32 1, i32 2 }, %if ], [ { i32 3, i32 4 }, %else ]
516+
%ev0 = extractvalue { i32, i32 } %phi, 0
517+
%ev1 = extractvalue { i32, i32 } %phi, 1
518+
%add = add i32 %ev0, %ev1
519+
ret i32 %add
520+
}

0 commit comments

Comments
 (0)