summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/PowerPC/rlwimi-and-or-bits.ll
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2015-09-05 00:02:59 +0000
committerHal Finkel <hfinkel@anl.gov>2015-09-05 00:02:59 +0000
commitb1518d6c2491494e659511074ee59aaf0a1e7903 (patch)
treede3355448fc18bd9fcf6d68ec15284a0cec1c8a9 /llvm/test/CodeGen/PowerPC/rlwimi-and-or-bits.ll
parenta212aba6804f80167a3665b252a558383cdf8262 (diff)
downloadbcm5719-llvm-b1518d6c2491494e659511074ee59aaf0a1e7903.tar.gz
bcm5719-llvm-b1518d6c2491494e659511074ee59aaf0a1e7903.zip
[PowerPC] Fix and(or(x, c1), c2) -> rlwimi generation
PPCISelDAGToDAG has a transformation that generates a rlwimi instruction from an input pattern that looks like this: and(or(x, c1), c2) but the associated logic does not work if there are bits that are 1 in c1 but 0 in c2 (these are normally canonicalized away, but that can't happen if the 'or' has other users. Make sure we abort the transformation if such bits are discovered. Fixes PR24704. llvm-svn: 246900
Diffstat (limited to 'llvm/test/CodeGen/PowerPC/rlwimi-and-or-bits.ll')
-rw-r--r--llvm/test/CodeGen/PowerPC/rlwimi-and-or-bits.ll27
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/rlwimi-and-or-bits.ll b/llvm/test/CodeGen/PowerPC/rlwimi-and-or-bits.ll
new file mode 100644
index 00000000000..a74bc727396
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/rlwimi-and-or-bits.ll
@@ -0,0 +1,27 @@
+; RUN: llc < %s | FileCheck %s
+target datalayout = "E-m:e-i64:64-n32:64"
+target triple = "powerpc64-unknown-linux-gnu"
+
+@m = external global i32, align 4
+
+; Function Attrs: nounwind
+define signext i32 @main() #0 {
+entry:
+
+; CHECK-LABEL: @main
+; CHECK-NOT: rlwimi
+; CHECK: andi
+
+ %0 = load i32, i32* @m, align 4
+ %or = or i32 %0, 250
+ store i32 %or, i32* @m, align 4
+ %and = and i32 %or, 249
+ %sub.i = sub i32 %and, 0
+ %sext = shl i32 %sub.i, 24
+ %conv = ashr exact i32 %sext, 24
+ ret i32 %conv
+}
+
+attributes #0 = { nounwind "target-cpu"="pwr7" }
+attributes #1 = { nounwind }
+
OpenPOWER on IntegriCloud