diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2017-01-26 01:07:33 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2017-01-26 01:07:33 +0000 |
commit | c38a74d8867b4271904fd86ad52f95849b86b548 (patch) | |
tree | cea5f5970da15b85e43296ec3f485efe6f5bb01c /llvm/test/CodeGen/X86/implicit-null-checks.mir | |
parent | d0ecb4c69e7e74048b527daa72baac1318d5f306 (diff) | |
download | bcm5719-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.mir | 46 |
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 + +... |