mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
9b28c7dfb8
Summary: isSafeToSpeculativelyExecute is the wrong predicate to use here. All that checks for is whether it is safe to hoist a value due to unaligned/un-dereferencable accesses. However, not only are we doing sinking rather than hoisting, our concern is that the location we're loading from may have been modified. Instead forbid sinking any load across a critical edge. Reviewers: majnemer Subscribers: davide, llvm-commits Differential Revision: https://reviews.llvm.org/D33179 llvm-svn: 305102
19 lines
411 B
LLVM
19 lines
411 B
LLVM
; RUN: opt < %s -basicaa -sink -S | FileCheck %s
|
|
declare void @foo(i64 *)
|
|
define i64 @sinkload(i1 %cmp) {
|
|
; CHECK-LABEL: @sinkload
|
|
top:
|
|
%a = alloca i64
|
|
; CHECK: call void @foo(i64* %a)
|
|
; CHECK-NEXT: %x = load i64, i64* %a
|
|
call void @foo(i64* %a)
|
|
%x = load i64, i64* %a
|
|
br i1 %cmp, label %A, label %B
|
|
A:
|
|
store i64 0, i64 *%a
|
|
br label %B
|
|
B:
|
|
; CHECK-NOT: load i64, i64 *%a
|
|
ret i64 %x
|
|
}
|