diff --git a/test/Transforms/InstCombine/logical-select.ll b/test/Transforms/InstCombine/logical-select.ll index f8c06768453..87453161d15 100644 --- a/test/Transforms/InstCombine/logical-select.ll +++ b/test/Transforms/InstCombine/logical-select.ll @@ -1,7 +1,13 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -instcombine -S | FileCheck %s -define i32 @foo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { +define i32 @foo(i32 %a, i32 %b, i32 %c, i32 %d) { +; CHECK-LABEL: @foo( +; CHECK-NEXT: [[E:%.*]] = icmp slt i32 %a, %b +; CHECK-NEXT: [[J:%.*]] = select i1 [[E]], i32 %c, i32 %d +; CHECK-NEXT: ret i32 [[J]] +; %e = icmp slt i32 %a, %b %f = sext i1 %e to i32 %g = and i32 %c, %f @@ -9,11 +15,14 @@ define i32 @foo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { %i = and i32 %d, %h %j = or i32 %g, %i ret i32 %j -; CHECK: %e = icmp slt i32 %a, %b -; CHECK-NEXT: [[result:%.*]] = select i1 %e, i32 %c, i32 %d -; CHECK-NEXT: ret i32 [[result]] } -define i32 @bar(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { + +define i32 @bar(i32 %a, i32 %b, i32 %c, i32 %d) { +; CHECK-LABEL: @bar( +; CHECK-NEXT: [[E:%.*]] = icmp slt i32 %a, %b +; CHECK-NEXT: [[J:%.*]] = select i1 [[E]], i32 %c, i32 %d +; CHECK-NEXT: ret i32 [[J]] +; %e = icmp slt i32 %a, %b %f = sext i1 %e to i32 %g = and i32 %c, %f @@ -21,48 +30,49 @@ define i32 @bar(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { %i = and i32 %d, %h %j = or i32 %i, %g ret i32 %j -; CHECK: %e = icmp slt i32 %a, %b -; CHECK-NEXT: [[result:%.*]] = select i1 %e, i32 %c, i32 %d -; CHECK-NEXT: ret i32 [[result]] } -define i32 @goo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { -entry: - %0 = icmp slt i32 %a, %b - %iftmp.0.0 = select i1 %0, i32 -1, i32 0 - %1 = and i32 %iftmp.0.0, %c +define i32 @goo(i32 %a, i32 %b, i32 %c, i32 %d) { +; CHECK-LABEL: @goo( +; CHECK-NEXT: [[T0:%.*]] = icmp slt i32 %a, %b +; CHECK-NEXT: [[T3:%.*]] = select i1 [[T0]], i32 %c, i32 %d +; CHECK-NEXT: ret i32 [[T3]] +; + %t0 = icmp slt i32 %a, %b + %iftmp.0.0 = select i1 %t0, i32 -1, i32 0 + %t1 = and i32 %iftmp.0.0, %c %not = xor i32 %iftmp.0.0, -1 - %2 = and i32 %not, %d - %3 = or i32 %1, %2 - ret i32 %3 -; CHECK: %0 = icmp slt i32 %a, %b -; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d -; CHECK-NEXT: ret i32 [[result]] -} -define i32 @poo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { -entry: - %0 = icmp slt i32 %a, %b - %iftmp.0.0 = select i1 %0, i32 -1, i32 0 - %1 = and i32 %iftmp.0.0, %c - %iftmp = select i1 %0, i32 0, i32 -1 - %2 = and i32 %iftmp, %d - %3 = or i32 %1, %2 - ret i32 %3 -; CHECK: %0 = icmp slt i32 %a, %b -; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d -; CHECK-NEXT: ret i32 [[result]] + %t2 = and i32 %not, %d + %t3 = or i32 %t1, %t2 + ret i32 %t3 } -define i32 @par(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { -entry: - %0 = icmp slt i32 %a, %b - %iftmp.1.0 = select i1 %0, i32 -1, i32 0 - %1 = and i32 %iftmp.1.0, %c - %not = xor i32 %iftmp.1.0, -1 - %2 = and i32 %not, %d - %3 = or i32 %1, %2 - ret i32 %3 -; CHECK: %0 = icmp slt i32 %a, %b -; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d -; CHECK-NEXT: ret i32 [[result]] +define i32 @poo(i32 %a, i32 %b, i32 %c, i32 %d) { +; CHECK-LABEL: @poo( +; CHECK-NEXT: [[T0:%.*]] = icmp slt i32 %a, %b +; CHECK-NEXT: [[T3:%.*]] = select i1 [[T0]], i32 %c, i32 %d +; CHECK-NEXT: ret i32 [[T3]] +; + %t0 = icmp slt i32 %a, %b + %iftmp.0.0 = select i1 %t0, i32 -1, i32 0 + %t1 = and i32 %iftmp.0.0, %c + %iftmp = select i1 %t0, i32 0, i32 -1 + %t2 = and i32 %iftmp, %d + %t3 = or i32 %t1, %t2 + ret i32 %t3 +} + +define i32 @par(i32 %a, i32 %b, i32 %c, i32 %d) { +; CHECK-LABEL: @par( +; CHECK-NEXT: [[T0:%.*]] = icmp slt i32 %a, %b +; CHECK-NEXT: [[T3:%.*]] = select i1 [[T0]], i32 %c, i32 %d +; CHECK-NEXT: ret i32 [[T3]] +; + %t0 = icmp slt i32 %a, %b + %iftmp.1.0 = select i1 %t0, i32 -1, i32 0 + %t1 = and i32 %iftmp.1.0, %c + %not = xor i32 %iftmp.1.0, -1 + %t2 = and i32 %not, %d + %t3 = or i32 %t1, %t2 + ret i32 %t3 }