forked from OSchip/llvm-project
[NVPTX] Mark special registers as reserved
A reserved register: - is not allocatable - is considered always live - is ignored by liveness tracking NVPTX special registers match the criteria, and marking them as reserved helps to avoid machine verifier error: *** Bad machine code: Using an undefined physical register *** - function: foo - basic block: %bb.0 (0x557bb178b708) - instruction: %0:int32regs = MOV_SPECIAL $envreg0 - operand 1: $envreg0 Differential Revision: https://reviews.llvm.org/D113008
This commit is contained in:
parent
1427742750
commit
123ad720f1
|
@ -107,6 +107,14 @@ NVPTXRegisterInfo::getCalleeSavedRegs(const MachineFunction *) const {
|
|||
|
||||
BitVector NVPTXRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
|
||||
BitVector Reserved(getNumRegs());
|
||||
for (unsigned Reg = NVPTX::ENVREG0; Reg <= NVPTX::ENVREG31; ++Reg) {
|
||||
markSuperRegs(Reserved, Reg);
|
||||
}
|
||||
markSuperRegs(Reserved, NVPTX::VRFrame32);
|
||||
markSuperRegs(Reserved, NVPTX::VRFrameLocal32);
|
||||
markSuperRegs(Reserved, NVPTX::VRFrame64);
|
||||
markSuperRegs(Reserved, NVPTX::VRFrameLocal64);
|
||||
markSuperRegs(Reserved, NVPTX::VRDepot);
|
||||
return Reserved;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
|
||||
; RUN: llc < %s -march=nvptx -mcpu=sm_20 -verify-machineinstrs | FileCheck %s
|
||||
|
||||
|
||||
declare i32 @llvm.nvvm.read.ptx.sreg.envreg0()
|
||||
|
|
Loading…
Reference in New Issue