1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00
llvm-mirror/test/Transforms/Sink/badloadsink.ll
Keno Fischer 9b28c7dfb8 [Sink] Fix predicate in legality check
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
2017-06-09 19:31:10 +00:00

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
}