summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/Generic
diff options
context:
space:
mode:
authorJuergen Ributzka <juergen@apple.com>2014-02-06 04:09:06 +0000
committerJuergen Ributzka <juergen@apple.com>2014-02-06 04:09:06 +0000
commitfa0eba6c8b2b7abfd498476e65485e8c4f6a24af (patch)
tree001ace2bd436998bb16a8354d58d8cb5cbdc0050 /llvm/test/CodeGen/Generic
parent774c6d03b2b0a0bf20c017756c988e7ad5747953 (diff)
downloadbcm5719-llvm-fa0eba6c8b2b7abfd498476e65485e8c4f6a24af.tar.gz
bcm5719-llvm-fa0eba6c8b2b7abfd498476e65485e8c4f6a24af.zip
[DAG] Don't pull the binary operation though the shift if the operands have opaque constants.
During DAGCombine visitShiftByConstant assumes that certain binary operations with only constant operands can always be folded successfully. This is no longer true when the constant is opaque. This commit fixes visitShiftByConstant by not performing the optimization for opaque constants. Otherwise we would end up in an infinite DAGCombine loop. llvm-svn: 200900
Diffstat (limited to 'llvm/test/CodeGen/Generic')
-rw-r--r--llvm/test/CodeGen/Generic/2014-02-05-OpaqueConstants.ll19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Generic/2014-02-05-OpaqueConstants.ll b/llvm/test/CodeGen/Generic/2014-02-05-OpaqueConstants.ll
new file mode 100644
index 00000000000..5c1cd053251
--- /dev/null
+++ b/llvm/test/CodeGen/Generic/2014-02-05-OpaqueConstants.ll
@@ -0,0 +1,19 @@
+; Test that opaque constants are not creating an infinite DAGCombine loop
+; RUN: llc < %s
+; XFAIL: r600, xcore
+
+@a = common global i32* null, align 8
+@c = common global i32 0, align 4
+@b = common global i32* null, align 8
+
+; Function Attrs: nounwind ssp uwtable
+define void @fn() {
+ store i32* inttoptr (i64 68719476735 to i32*), i32** @a, align 8
+ %1 = load i32* @c, align 4
+ %2 = sext i32 %1 to i64
+ %3 = lshr i64 %2, 12
+ %4 = and i64 %3, 68719476735
+ %5 = getelementptr inbounds i32* null, i64 %4
+ store i32* %5, i32** @b, align 8
+ ret void
+}
OpenPOWER on IntegriCloud