diff options
author | Jack Andersen <jackoalan@gmail.com> | 2021-12-05 14:55:20 -0500 |
---|---|---|
committer | Jack Andersen <jackoalan@gmail.com> | 2021-12-05 15:55:59 -0500 |
commit | f108c7f59dfae5fafbb00fbdef7a0cd31826dcfc (patch) | |
tree | aa88062fe53569e594ed7e536ccb3f80736c5f80 /llvm/test/MachineVerifier | |
parent | 1b44364714981017302f182583a43fda4d28e0eb (diff) | |
download | llvm-f108c7f59dfae5fafbb00fbdef7a0cd31826dcfc.zip llvm-f108c7f59dfae5fafbb00fbdef7a0cd31826dcfc.tar.gz llvm-f108c7f59dfae5fafbb00fbdef7a0cd31826dcfc.tar.bz2 |
[GlobalISel] Allow DBG_VALUE to use undefined vregs before LiveDebugValues.
Expanding on D109750.
Since `DBG_VALUE` instructions have final register validity determined in
`LDVImpl::handleDebugValue`, there is no apparent reason to immediately prune
unused register operands as their defs are erased. Consequently, this renders
`MachineInstr::eraseFromParentAndMarkDBGValuesForRemoval` moot; gaining a
substantial performance improvement.
The only necessary changes involve making relevant passes consider invalid
DBG_VALUE vregs uses as valid.
Reviewed By: MatzeB
Differential Revision: https://reviews.llvm.org/D112852
Diffstat (limited to 'llvm/test/MachineVerifier')
-rw-r--r-- | llvm/test/MachineVerifier/verify-regbankselected-dbg-undef-use.mir | 38 | ||||
-rw-r--r-- | llvm/test/MachineVerifier/verify-selected-dbg-undef-use.mir | 40 |
2 files changed, 78 insertions, 0 deletions
diff --git a/llvm/test/MachineVerifier/verify-regbankselected-dbg-undef-use.mir b/llvm/test/MachineVerifier/verify-regbankselected-dbg-undef-use.mir new file mode 100644 index 0000000..2745096 --- /dev/null +++ b/llvm/test/MachineVerifier/verify-regbankselected-dbg-undef-use.mir @@ -0,0 +1,38 @@ +# RUN: not --crash llc -verify-machineinstrs -run-pass none -o /dev/null %s 2>&1 | FileCheck %s +# REQUIRES: aarch64-registered-target + +--- | + + target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" + target triple = "aarch64--" + define void @regbankselected_notrack() { ret void } + define void @regbankselected_track() { ret void } + +... + +--- +name: regbankselected_notrack +regBankSelected: true +tracksDebugUserValues: false +registers: + - { id: 0, class: _ } +body: | + bb.0: + ; CHECK-NOT: function: regbankselected_notrack + DBG_VALUE %0(s64), $noreg, $noreg, $noreg, $noreg +... + +--- +name: regbankselected_track +regBankSelected: true +tracksDebugUserValues: true +registers: + - { id: 0, class: _ } +body: | + bb.0: + ; CHECK: *** Bad machine code: Generic virtual register must have a bank in a RegBankSelected function *** + ; CHECK: function: regbankselected_track + ; CHECK: instruction: DBG_VALUE %0:_ + ; CHECK: operand 0: %0 + DBG_VALUE %0(s64), $noreg, $noreg, $noreg, $noreg +... diff --git a/llvm/test/MachineVerifier/verify-selected-dbg-undef-use.mir b/llvm/test/MachineVerifier/verify-selected-dbg-undef-use.mir new file mode 100644 index 0000000..1c3e0f2 --- /dev/null +++ b/llvm/test/MachineVerifier/verify-selected-dbg-undef-use.mir @@ -0,0 +1,40 @@ +# RUN: not --crash llc -verify-machineinstrs -run-pass none -o /dev/null %s 2>&1 | FileCheck %s +# REQUIRES: aarch64-registered-target + +--- | + + target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" + target triple = "aarch64--" + define void @selected_notrack() { ret void } + define void @selected_track() { ret void } + +... + +--- +name: selected_notrack +regBankSelected: true +selected: true +tracksDebugUserValues: false +registers: + - { id: 0, class: _ } +body: | + bb.0: + ; CHECK-NOT: function: selected_notrack + DBG_VALUE %0, $noreg, $noreg, $noreg, $noreg +... + +--- +name: selected_track +regBankSelected: true +selected: true +tracksDebugUserValues: true +registers: + - { id: 0, class: _ } +body: | + bb.0: + ; CHECK: *** Bad machine code: Generic virtual register invalid in a Selected function *** + ; CHECK: function: selected_track + ; CHECK: instruction: DBG_VALUE %0:_ + ; CHECK: operand 0: %0 + DBG_VALUE %0, $noreg, $noreg, $noreg, $noreg +... |