From 304099a56d61c2132bd101ca669003e509ca1dcb Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Thu, 2 May 2013 02:44:23 +0000 Subject: Add a test for the foldSelectICmpAndOr fix committed in r180779. 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 | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'test') diff --git a/test/Transforms/InstCombine/select.ll b/test/Transforms/InstCombine/select.ll index 08487a3696..c72a6f7c49 100644 --- a/test/Transforms/InstCombine/select.ll +++ b/test/Transforms/InstCombine/select.ll @@ -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 -- cgit v1.2.3