diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-01-20 00:06:14 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-01-20 00:06:14 +0000 |
commit | 16901a3e200af39e1ea8ef44db7359ef9417917e (patch) | |
tree | 1f42497f16dce29fbced7973ddb428f4acc3e0ce /llvm/test/CodeGen | |
parent | 7d866cb145950f2a164e62b9cfb67b9ece2a1497 (diff) | |
download | bcm5719-llvm-16901a3e200af39e1ea8ef44db7359ef9417917e.tar.gz bcm5719-llvm-16901a3e200af39e1ea8ef44db7359ef9417917e.zip |
[MachineSink] Don't break ImplicitNulls
Summary:
This teaches MachineSink to not sink instructions that might break the
implicit null check optimization that runs later. This should not
affect frontends that do not use implicit null checks.
Reviewers: aadg, reames, hfinkel, atrick
Subscribers: majnemer, llvm-commits
Differential Revision: http://reviews.llvm.org/D14632
llvm-svn: 258254
Diffstat (limited to 'llvm/test/CodeGen')
-rw-r--r-- | llvm/test/CodeGen/X86/machine-sink-and-implicit-null-checks.ll | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/machine-sink-and-implicit-null-checks.ll b/llvm/test/CodeGen/X86/machine-sink-and-implicit-null-checks.ll new file mode 100644 index 00000000000..0d3bd06d095 --- /dev/null +++ b/llvm/test/CodeGen/X86/machine-sink-and-implicit-null-checks.ll @@ -0,0 +1,49 @@ +; RUN: llc -mtriple=x86_64-apple-macosx -O3 -enable-implicit-null-checks -o - < %s 2>&1 | FileCheck %s + +declare void @throw0() +declare void @throw1() + +define i1 @f(i8* %p0, i8* %p1) { + entry: + %c0 = icmp eq i8* %p0, null + br i1 %c0, label %throw0, label %continue0, !make.implicit !0 + + continue0: + %v0 = load i8, i8* %p0 + %c1 = icmp eq i8* %p1, null + br i1 %c1, label %throw1, label %continue1, !make.implicit !0 + + continue1: + %v1 = load i8, i8* %p1 + %v = icmp eq i8 %v0, %v1 + ret i1 %v + + throw0: + call void @throw0() + unreachable + + throw1: + call void @throw1() + unreachable +} + +; Check that we have two implicit null checks in @f + +; CHECK: __LLVM_FaultMaps: +; CHECK-NEXT: .byte 1 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .short 0 +; CHECK-NEXT: .long 1 + +; FunctionInfo[0] = + +; FunctionAddress = +; CHECK-NEXT: .quad _f + +; NumFaultingPCs = +; CHECK-NEXT: .long 2 + +; Reserved = +; CHECK-NEXT: .long 0 + +!0 = !{} |