diff options
| author | Alina Sbirlea <asbirlea@google.com> | 2019-11-20 16:09:37 -0800 |
|---|---|---|
| committer | Alina Sbirlea <asbirlea@google.com> | 2019-11-20 17:11:00 -0800 |
| commit | 5c5cf899ef2fda1d3306b1e5c384ae062b80b672 (patch) | |
| tree | ae648e474f1a0b2b50c22f3c94f8f37d11323db5 /llvm/test/Analysis | |
| parent | 27da569a7a54e9dcb3b2c09fbdfd6b70bd6fd912 (diff) | |
| download | bcm5719-llvm-5c5cf899ef2fda1d3306b1e5c384ae062b80b672.tar.gz bcm5719-llvm-5c5cf899ef2fda1d3306b1e5c384ae062b80b672.zip | |
[MemorySSA] Moving at the end often means before terminator.
Moving accesses in MemorySSA at InsertionPlace::End, when an instruction is
moved into a block, almost always means insert at the end of the block, but
before the block terminator. This matters when the block terminator is a
MemoryAccess itself (an invoke), and the insertion must be done before
the terminator for the update to be correct.
Insert an additional position: InsertionPlace:BeforeTerminator and update
current usages where this applies.
Resolves PR44027.
Diffstat (limited to 'llvm/test/Analysis')
| -rw-r--r-- | llvm/test/Analysis/MemorySSA/pr44027.ll | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/test/Analysis/MemorySSA/pr44027.ll b/llvm/test/Analysis/MemorySSA/pr44027.ll new file mode 100644 index 00000000000..3c0f9266ca2 --- /dev/null +++ b/llvm/test/Analysis/MemorySSA/pr44027.ll @@ -0,0 +1,27 @@ +; RUN: opt -gvn-hoist -verify-memoryssa -S < %s | FileCheck %s +; REQUIRES: asserts + +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +declare i32 @wobble(...) + +declare void @spam() align 2 + +; CHECK-LABEL: @f() +define void @f() personality i8* bitcast (i32 (...)* @wobble to i8*) { +bb: + %tmp = alloca i32*, align 8 + invoke void @spam() + to label %bb16 unwind label %bb23 + +bb16: ; preds = %bb + %tmp17 = load i32*, i32** %tmp, align 8 + %tmp18 = load i32*, i32** %tmp, align 8 + unreachable + +bb23: ; preds = %bb + %tmp24 = landingpad { i8*, i32 } + cleanup + unreachable +} |

