Add a test for the foldSelectICmpAndOr fix committed in r180779.
authorDavid Majnemer <david.majnemer@gmail.com>
Thu, 2 May 2013 02:44:23 +0000 (02:44 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Thu, 2 May 2013 02:44:23 +0000 (02:44 +0000)
This tests a case where C1 and C2 were the same but X and Y were different
widths.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180907 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/InstCombine/select.ll

index 08487a3696d0d3f65f353c92fee77d0d995525ae..c72a6f7c49c6c13ec07c9213806ff73d8e4b2a44 100644 (file)
@@ -915,6 +915,19 @@ define i32 @select_icmp_eq_and_4096_0_or_4096(i32 %x, i32 %y) {
   ret i32 %select
 }
 
+; CHECK: @select_icmp_eq_0_and_1_or_1
+; CHECK-NEXT: [[AND:%[a-z0-9]+]] = and i64 %x, 1
+; CHECK-NEXT: [[ZEXT:%[a-z0-9]+]] = trunc i64 [[AND]] to i32
+; CHECK-NEXT: [[OR:%[a-z0-9]+]] = or i32 [[XOR]], %y
+; CHECK-NEXT: ret i32 [[OR]]
+define i32 @select_icmp_eq_0_and_1_or_1(i64 %x, i32 %y) {
+  %and = and i64 %x, 1
+  %cmp = icmp eq i64 %and, 0
+  %or = or i32 %y, 1
+  %select = select i1 %cmp, i32 %y, i32 %or
+  ret i32 %select
+}
+
 ; CHECK: @select_icmp_ne_0_and_4096_or_32
 ; CHECK-NEXT: [[LSHR:%[a-z0-9]+]] = lshr i32 %x, 7
 ; CHECK-NEXT: [[AND:%[a-z0-9]+]] = and i32 [[LSHR]], 32