summaryrefslogtreecommitdiff
path: root/test/Transforms/Reassociate
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2011-04-12 00:11:56 +0000
committerDan Gohman <gohman@apple.com>2011-04-12 00:11:56 +0000
commitdac5dbadeb840ddded4665d144f31c5f88494d6e (patch)
tree5d662010a253bd229207ba978b6a4684fd958d47 /test/Transforms/Reassociate
parent164254d77c36a2f224987406d66f3bacfdbb7652 (diff)
downloadllvm-dac5dbadeb840ddded4665d144f31c5f88494d6e.tar.gz
llvm-dac5dbadeb840ddded4665d144f31c5f88494d6e.tar.bz2
llvm-dac5dbadeb840ddded4665d144f31c5f88494d6e.tar.xz
Fix reassociate to use a worklist instead of recursing when new
reassociation opportunities are exposed. This fixes a bug where the nested reassociation expects to be the IR to be consistent, but it isn't, because the outer reassociation has disconnected some of the operands. rdar://9167457 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129324 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/Reassociate')
-rw-r--r--test/Transforms/Reassociate/secondary.ll24
1 files changed, 24 insertions, 0 deletions
diff --git a/test/Transforms/Reassociate/secondary.ll b/test/Transforms/Reassociate/secondary.ll
new file mode 100644
index 0000000000..a52000ada5
--- /dev/null
+++ b/test/Transforms/Reassociate/secondary.ll
@@ -0,0 +1,24 @@
+; RUN: opt -S -reassociate < %s | FileCheck %s
+; rdar://9167457
+
+; Reassociate shouldn't break this testcase involving a secondary
+; reassociation.
+
+; CHECK: define
+; CHECK-NOT: undef
+; CHECK: %factor = mul i32 %tmp3, -2
+; CHECK-NOT: undef
+; CHECK: }
+
+define void @x0f2f640ab6718391b59ce96d9fdeda54(i32 %arg, i32 %arg1, i32 %arg2, i32* %.out) nounwind {
+_:
+ %tmp = sub i32 %arg, %arg1
+ %tmp3 = mul i32 %tmp, -1268345047
+ %tmp4 = add i32 %tmp3, 2014710503
+ %tmp5 = add i32 %tmp3, -1048397418
+ %tmp6 = sub i32 %tmp4, %tmp5
+ %tmp7 = sub i32 -2014710503, %tmp3
+ %tmp8 = add i32 %tmp6, %tmp7
+ store i32 %tmp8, i32* %.out
+ ret void
+}