summaryrefslogtreecommitdiff
path: root/test/CodeGen/Generic
diff options
context:
space:
mode:
authorNadav Rotem <nrotem@apple.com>2012-12-19 07:39:08 +0000
committerNadav Rotem <nrotem@apple.com>2012-12-19 07:39:08 +0000
commitbf5a2c6a39f2a98a83f5fb668b8b35156b693471 (patch)
treee14155a54238ff20ca4af3343ad073742a3256d1 /test/CodeGen/Generic
parentaf08627af5e72a3f7e75ffacab9fe7b62d196608 (diff)
downloadllvm-bf5a2c6a39f2a98a83f5fb668b8b35156b693471.tar.gz
llvm-bf5a2c6a39f2a98a83f5fb668b8b35156b693471.tar.bz2
llvm-bf5a2c6a39f2a98a83f5fb668b8b35156b693471.tar.xz
After reducing the size of an operation in the DAG we zero-extend the reduced
bitwidth op back to the original size. If we reduce ANDs then this can cause an endless loop. This patch changes the ZEXT to ANY_EXTEND if the demanded bits are equal or smaller than the size of the reduced operation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170505 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/Generic')
-rw-r--r--test/CodeGen/Generic/dag-combine-crash.ll21
1 files changed, 21 insertions, 0 deletions
diff --git a/test/CodeGen/Generic/dag-combine-crash.ll b/test/CodeGen/Generic/dag-combine-crash.ll
new file mode 100644
index 0000000000..a7810b5c05
--- /dev/null
+++ b/test/CodeGen/Generic/dag-combine-crash.ll
@@ -0,0 +1,21 @@
+; RUN: llc < %s
+
+define void @main() {
+if.end:
+ br label %block.i.i
+
+block.i.i:
+ %tmpbb = load i8* undef
+ %tmp54 = zext i8 %tmpbb to i64
+ %tmp59 = and i64 %tmp54, 8
+ %tmp60 = add i64 %tmp59, 3691045929300498764
+ %tmp62 = sub i64 %tmp60, 3456506383779105993
+ %tmp63 = xor i64 1050774804270620004, %tmp62
+ %tmp65 = xor i64 %tmp62, 234539545521392771
+ %tmp67 = or i64 %tmp65, %tmp63
+ %tmp71 = xor i64 %tmp67, 6781485823212740913
+ %tmp72 = trunc i64 %tmp71 to i32
+ %tmp74 = lshr i32 2, %tmp72
+ store i32 %tmp74, i32* undef
+ br label %block.i.i
+}