aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/MachineVerifier
diff options
context:
space:
mode:
authorJack Andersen <jackoalan@gmail.com>2021-12-05 14:55:20 -0500
committerJack Andersen <jackoalan@gmail.com>2021-12-05 15:55:59 -0500
commitf108c7f59dfae5fafbb00fbdef7a0cd31826dcfc (patch)
treeaa88062fe53569e594ed7e536ccb3f80736c5f80 /llvm/test/MachineVerifier
parent1b44364714981017302f182583a43fda4d28e0eb (diff)
downloadllvm-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.mir38
-rw-r--r--llvm/test/MachineVerifier/verify-selected-dbg-undef-use.mir40
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
+...