diff options
author | Max Kazantsev <mkazantsev@azul.com> | 2020-07-07 13:03:30 +0700 |
---|---|---|
committer | Max Kazantsev <mkazantsev@azul.com> | 2020-07-07 13:04:15 +0700 |
commit | 094e99d264c937cad33796b8c92fe123cb544c9e (patch) | |
tree | 143f901a310176e4e27e8deeb30ff5189ed17a7f /llvm | |
parent | 7fb3a849c13f302fadc8d16b28d5676964d886cf (diff) | |
download | llvm-094e99d264c937cad33796b8c92fe123cb544c9e.zip llvm-094e99d264c937cad33796b8c92fe123cb544c9e.tar.gz llvm-094e99d264c937cad33796b8c92fe123cb544c9e.tar.bz2 |
[Test] Add one more missing optimization opportunity test
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/test/Transforms/InstCombine/select.ll | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/llvm/test/Transforms/InstCombine/select.ll b/llvm/test/Transforms/InstCombine/select.ll index c7e9697..381a77b 100644 --- a/llvm/test/Transforms/InstCombine/select.ll +++ b/llvm/test/Transforms/InstCombine/select.ll @@ -1255,8 +1255,8 @@ define i128 @test86(i1 %flag) { define i32 @test_select_select0(i32 %a, i32 %r0, i32 %r1, i32 %v1, i32 %v2) { ; CHECK-LABEL: @test_select_select0( -; CHECK-NEXT: [[C0:%.*]] = icmp slt i32 [[A:%.*]], [[V1:%.*]] -; CHECK-NEXT: [[S0:%.*]] = select i1 [[C0]], i32 [[R1:%.*]], i32 [[R0:%.*]] +; CHECK-NEXT: [[C0_NOT:%.*]] = icmp slt i32 [[A:%.*]], [[V1:%.*]] +; CHECK-NEXT: [[S0:%.*]] = select i1 [[C0_NOT]], i32 [[R1:%.*]], i32 [[R0:%.*]] ; CHECK-NEXT: [[C1:%.*]] = icmp slt i32 [[A]], [[V2:%.*]] ; CHECK-NEXT: [[S1:%.*]] = select i1 [[C1]], i32 [[S0]], i32 [[R1]] ; CHECK-NEXT: ret i32 [[S1]] @@ -1270,8 +1270,8 @@ define i32 @test_select_select0(i32 %a, i32 %r0, i32 %r1, i32 %v1, i32 %v2) { define i32 @test_select_select1(i32 %a, i32 %r0, i32 %r1, i32 %v1, i32 %v2) { ; CHECK-LABEL: @test_select_select1( -; CHECK-NEXT: [[C0:%.*]] = icmp slt i32 [[A:%.*]], [[V1:%.*]] -; CHECK-NEXT: [[S0:%.*]] = select i1 [[C0]], i32 [[R1:%.*]], i32 [[R0:%.*]] +; CHECK-NEXT: [[C0_NOT:%.*]] = icmp slt i32 [[A:%.*]], [[V1:%.*]] +; CHECK-NEXT: [[S0:%.*]] = select i1 [[C0_NOT]], i32 [[R1:%.*]], i32 [[R0:%.*]] ; CHECK-NEXT: [[C1:%.*]] = icmp slt i32 [[A]], [[V2:%.*]] ; CHECK-NEXT: [[S1:%.*]] = select i1 [[C1]], i32 [[R0]], i32 [[S0]] ; CHECK-NEXT: ret i32 [[S1]] @@ -2240,3 +2240,36 @@ exit: exit2: ret i32 %iv.inc } + +define i32 @test_select_into_phi_not_idom(i1 %cond, i32 %A, i32 %B) { +; CHECK-LABEL: @test_select_into_phi_not_idom( +; CHECK-NEXT: entry: +; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] +; CHECK: if.true: +; CHECK-NEXT: br label [[MERGE:%.*]] +; CHECK: if.false: +; CHECK-NEXT: br label [[MERGE]] +; CHECK: merge: +; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ [[A:%.*]], [[IF_TRUE]] ], [ [[B:%.*]], [[IF_FALSE]] ] +; CHECK-NEXT: br label [[EXIT:%.*]] +; CHECK: exit: +; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i32 [[PHI]], i32 [[A]] +; CHECK-NEXT: ret i32 [[SEL]] +; +entry: + br i1 %cond, label %if.true, label %if.false + +if.true: + br label %merge + +if.false: + br label %merge + +merge: + %phi = phi i32 [%A, %if.true], [%B, %if.false] + br label %exit + +exit: + %sel = select i1 %cond, i32 %phi, i32 %A + ret i32 %sel +} |