summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/machine-sink-and-implicit-null-checks.ll
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-01-20 00:06:14 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-01-20 00:06:14 +0000
commit16901a3e200af39e1ea8ef44db7359ef9417917e (patch)
tree1f42497f16dce29fbced7973ddb428f4acc3e0ce /llvm/test/CodeGen/X86/machine-sink-and-implicit-null-checks.ll
parent7d866cb145950f2a164e62b9cfb67b9ece2a1497 (diff)
downloadbcm5719-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/X86/machine-sink-and-implicit-null-checks.ll')
-rw-r--r--llvm/test/CodeGen/X86/machine-sink-and-implicit-null-checks.ll49
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 = !{}
OpenPOWER on IntegriCloud