diff options
author | James Molloy <james.molloy@arm.com> | 2016-08-19 10:10:27 +0000 |
---|---|---|
committer | James Molloy <james.molloy@arm.com> | 2016-08-19 10:10:27 +0000 |
commit | 11a1936b70be22a9b99fc661fd46a837507df65c (patch) | |
tree | 52afef2985da74169b00eb77ea30136fb551eb6e /llvm/test/DebugInfo | |
parent | 5dbc90a8f184ae4abd8a9ef55c5be7cf884bd837 (diff) | |
download | bcm5719-llvm-11a1936b70be22a9b99fc661fd46a837507df65c.tar.gz bcm5719-llvm-11a1936b70be22a9b99fc661fd46a837507df65c.zip |
[SimplifyCFG] Rewrite SinkThenElseCodeToEnd
The new version has several advantages:
1) IMSHO it's more readable and neater
2) It handles loads and stores properly
3) It can handle any number of incoming blocks rather than just two. I'll be taking advantage of this in a followup patch.
With this change we can now finally sink load-modify-store idioms such as:
if (a)
return *b += 3;
else
return *b += 4;
=>
%z = load i32, i32* %y
%.sink = select i1 %a, i32 5, i32 7
%b = add i32 %z, %.sink
store i32 %b, i32* %y
ret i32 %b
When this works for switches it'll be even more powerful.
llvm-svn: 279229
Diffstat (limited to 'llvm/test/DebugInfo')
-rw-r--r-- | llvm/test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll b/llvm/test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll index a992ce3bf85..e22614388b8 100644 --- a/llvm/test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll +++ b/llvm/test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll @@ -9,8 +9,9 @@ ; return -1; ; } +; CHECK: mvnlt ; CHECK: .loc 1 6 7 -; CHECK: mvn +; CHECK: strlt target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" target triple = "armv7--linux-gnueabihf" |