summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/implicit-null-checks.mir
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2017-01-26 01:07:33 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2017-01-26 01:07:33 +0000
commitc38a74d8867b4271904fd86ad52f95849b86b548 (patch)
treecea5f5970da15b85e43296ec3f485efe6f5bb01c /llvm/test/CodeGen/X86/implicit-null-checks.mir
parentd0ecb4c69e7e74048b527daa72baac1318d5f306 (diff)
downloadbcm5719-llvm-c38a74d8867b4271904fd86ad52f95849b86b548.tar.gz
bcm5719-llvm-c38a74d8867b4271904fd86ad52f95849b86b548.zip
[ImplicitNullChecks] Add a test demonstrating a case we don't get today
llvm-svn: 293126
Diffstat (limited to 'llvm/test/CodeGen/X86/implicit-null-checks.mir')
-rw-r--r--llvm/test/CodeGen/X86/implicit-null-checks.mir46
1 files changed, 46 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/implicit-null-checks.mir b/llvm/test/CodeGen/X86/implicit-null-checks.mir
index 81351511374..d2a9e5e50a2 100644
--- a/llvm/test/CodeGen/X86/implicit-null-checks.mir
+++ b/llvm/test/CodeGen/X86/implicit-null-checks.mir
@@ -131,6 +131,18 @@
ret i32 0
}
+ define i32 @use_alternate_load_op(i32* %ptr, i32* %ptr2) {
+ entry:
+ %ptr_is_null = icmp eq i32* %ptr, null
+ br i1 %ptr_is_null, label %is_null, label %not_null, !make.implicit !0
+
+ not_null:
+ ret i32 undef
+
+ is_null:
+ ret i32 0
+ }
+
attributes #0 = { "target-features"="+bmi,+bmi2" }
!0 = !{}
@@ -431,3 +443,37 @@ body: |
RETQ %eax
...
+---
+name: use_alternate_load_op
+# CHECK-LABEL: use_alternate_load_op
+# CHECK: bb.0.entry:
+# CHECK: TEST64rr %rdi, %rdi, implicit-def %eflags
+# CHECK-NEXT: JE_1 %bb.2.is_null, implicit killed %eflags
+# CHECK: bb.1.not_null
+
+alignment: 4
+tracksRegLiveness: true
+liveins:
+ - { reg: '%rdi' }
+ - { reg: '%rsi' }
+body: |
+ bb.0.entry:
+ successors: %bb.2.is_null, %bb.1.not_null
+ liveins: %rdi, %rsi
+
+ TEST64rr %rdi, %rdi, implicit-def %eflags
+ JE_1 %bb.2.is_null, implicit killed %eflags
+
+ bb.1.not_null:
+ liveins: %rdi, %rsi
+
+ %rcx = MOV64rm killed %rsi, 1, _, 0, _
+ %rdx = AND64rm killed %rcx, %rdi, 1, _, 0, _, implicit-def dead %eflags
+ %r10 = MOV64rm killed %rdi, 1, _, 0, _
+ RETQ %r10d
+
+ bb.2.is_null:
+ %eax = XOR32rr undef %eax, undef %eax, implicit-def dead %eflags
+ RETQ %eax
+
+...
OpenPOWER on IntegriCloud