llvm-project/llvm/test/MachineVerifier/verify-regbankselected-dbg-undef-use.mir
Jack Andersen f108c7f59d [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
2021-12-05 15:55:59 -05:00

39 lines
996 B
YAML

# 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
...