diff options
author | Dan Gohman <gohman@apple.com> | 2011-04-12 00:11:56 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2011-04-12 00:11:56 +0000 |
commit | 1c6c34834b92c6152f11a2d546535d78bfbb9a5a (patch) | |
tree | fa809213dbcb9f0a4d8f49887653cfc2f0aa25d1 /llvm/test | |
parent | 0a6895960471be0ab3afc2cc61c6219236ebda62 (diff) | |
download | bcm5719-llvm-1c6c34834b92c6152f11a2d546535d78bfbb9a5a.tar.gz bcm5719-llvm-1c6c34834b92c6152f11a2d546535d78bfbb9a5a.zip |
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
llvm-svn: 129324
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Transforms/Reassociate/secondary.ll | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/test/Transforms/Reassociate/secondary.ll b/llvm/test/Transforms/Reassociate/secondary.ll new file mode 100644 index 00000000000..a52000ada53 --- /dev/null +++ b/llvm/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 +} |