summaryrefslogtreecommitdiffstats
path: root/llvm/test/Analysis
diff options
context:
space:
mode:
authorAlina Sbirlea <asbirlea@google.com>2019-11-20 16:09:37 -0800
committerAlina Sbirlea <asbirlea@google.com>2019-11-20 17:11:00 -0800
commit5c5cf899ef2fda1d3306b1e5c384ae062b80b672 (patch)
treeae648e474f1a0b2b50c22f3c94f8f37d11323db5 /llvm/test/Analysis
parent27da569a7a54e9dcb3b2c09fbdfd6b70bd6fd912 (diff)
downloadbcm5719-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.ll27
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
+}
OpenPOWER on IntegriCloud