summaryrefslogtreecommitdiff
path: root/test/Transforms
diff options
context:
space:
mode:
authorShuxin Yang <shuxin.llvm@gmail.com>2012-11-26 21:44:25 +0000
committerShuxin Yang <shuxin.llvm@gmail.com>2012-11-26 21:44:25 +0000
commitb30e256993e075c838ffa1b7af6b04dd28be2c34 (patch)
tree91872f135012786c20ce9ccc03aca3c38546b10d /test/Transforms
parentec66ac5318f8546fcb002e1f26063144e224f279 (diff)
downloadllvm-b30e256993e075c838ffa1b7af6b04dd28be2c34.tar.gz
llvm-b30e256993e075c838ffa1b7af6b04dd28be2c34.tar.bz2
llvm-b30e256993e075c838ffa1b7af6b04dd28be2c34.tar.xz
rdar://12329730 (defect 2)
Enhancement to InstCombine. Try to catch this opportunity: --------------------------------------------------------------- ((X^C1) >> C2) ^ C3 => (X>>C2) ^ ((C1>>C2)^C3) where the subexpression "X ^ C1" has more than one uses, and "(X^C1) >> C2" has single use. ---------------------------------------------------------------- Reviewed by Nadav (with minor change per his request). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168615 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms')
-rw-r--r--test/Transforms/InstCombine/xor2.ll15
1 files changed, 15 insertions, 0 deletions
diff --git a/test/Transforms/InstCombine/xor2.ll b/test/Transforms/InstCombine/xor2.ll
index 89f00bd684..3c99246796 100644
--- a/test/Transforms/InstCombine/xor2.ll
+++ b/test/Transforms/InstCombine/xor2.ll
@@ -51,3 +51,18 @@ define i32 @test4(i32 %A, i32 %B) {
; CHECK: %1 = ashr i32 %A, %B
; CHECK: ret i32 %1
}
+
+; defect-2 in rdar://12329730
+; (X^C1) >> C2) ^ C3 -> (X>>C2) ^ ((C1>>C2)^C3)
+; where the "X" has more than one use
+define i32 @test5(i32 %val1) {
+test5:
+ %xor = xor i32 %val1, 1234
+ %shr = lshr i32 %xor, 8
+ %xor1 = xor i32 %shr, 1
+ %add = add i32 %xor1, %xor
+ ret i32 %add
+; CHECK: @test5
+; CHECK: lshr i32 %val1, 8
+; CHECK: ret
+}