mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
21c5787ed7
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.
28 lines
765 B
LLVM
28 lines
765 B
LLVM
; 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
|
|
}
|