Be more consistent in the naming convention for the various RET instructions to specify in terms of bitwidth. Helps prevent future scheduler model mismatches like those that were only addressed in D44687. Differential Revision: https://reviews.llvm.org/D113302
50 lines
975 B
YAML
50 lines
975 B
YAML
# RUN: llc -mtriple=x86_64 -run-pass=implicit-null-checks %s -o - | FileCheck %s
|
|
--- |
|
|
|
|
define i32 @reg-rewrite(i32* %x) {
|
|
entry:
|
|
br i1 undef, label %is_null, label %not_null, !make.implicit !0
|
|
|
|
is_null:
|
|
ret i32 42
|
|
|
|
not_null:
|
|
ret i32 100
|
|
}
|
|
|
|
!0 = !{}
|
|
|
|
...
|
|
---
|
|
# Check that the TEST instruction is replaced with
|
|
# FAULTING_OP only if there are no instructions
|
|
# between the TEST and conditional jump
|
|
# that clobber the register used in TEST.
|
|
name: reg-rewrite
|
|
|
|
alignment: 16
|
|
tracksRegLiveness: true
|
|
liveins:
|
|
- { reg: '$rdi' }
|
|
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: $rdi
|
|
|
|
TEST64rr $rdi, $rdi, implicit-def $eflags
|
|
; CHECK-LABEL: bb.0.entry
|
|
; CHECK-NOT: FAULTING_OP
|
|
renamable $rdi = MOV64ri 5000
|
|
JCC_1 %bb.2, 4, implicit $eflags
|
|
|
|
bb.1.not_null:
|
|
liveins: $rdi, $rsi
|
|
|
|
$rax = MOV64rm renamable $rdi, 1, $noreg, 4, $noreg
|
|
RET64 $eax
|
|
|
|
bb.2.is_null:
|
|
$eax = MOV32ri 200
|
|
RET64 $eax
|
|
...
|