mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-11 13:37:07 +00:00
[codeview] Bail on a DBG_VALUE register operand with no register
This apparently comes up when the register allocator decides that a variable will become undef along a certain path. Also improve the error message we emit when we can't map from LLVM register number to CV register number. llvm-svn: 261016
This commit is contained in:
parent
b9542a8754
commit
4b86dc7a52
@ -594,11 +594,13 @@ void CodeViewDebug::collectVariableInfo(const DISubprogram *SP) {
|
||||
if (DIExpr && DIExpr->getNumElements() > 0)
|
||||
continue;
|
||||
|
||||
// Bail if the value is not indirect in memory or in a register. In these
|
||||
// cases, operand 0 will not be a register.
|
||||
// FIXME: CodeView does not have an obvious representation for a variable
|
||||
// that has been optimized to be a constant.
|
||||
if (!DVInst->getOperand(0).isReg())
|
||||
// Bail if operand 0 is not a valid register. This means the variable is a
|
||||
// simple constant, or is described by a complex expression.
|
||||
// FIXME: Find a way to represent constant variables, since they are
|
||||
// relatively common.
|
||||
unsigned Reg =
|
||||
DVInst->getOperand(0).isReg() ? DVInst->getOperand(0).getReg() : 0;
|
||||
if (Reg == 0)
|
||||
continue;
|
||||
|
||||
// Handle the two cases we can handle: indirect in memory and in register.
|
||||
|
@ -86,8 +86,10 @@ int MCRegisterInfo::getSEHRegNum(unsigned RegNum) const {
|
||||
}
|
||||
|
||||
int MCRegisterInfo::getCodeViewRegNum(unsigned RegNum) const {
|
||||
if (L2CVRegs.empty())
|
||||
report_fatal_error("target does not implement codeview register mapping");
|
||||
const DenseMap<unsigned, int>::const_iterator I = L2CVRegs.find(RegNum);
|
||||
if (I == L2CVRegs.end())
|
||||
report_fatal_error("target does not implement codeview register mapping");
|
||||
report_fatal_error("unknown codeview register");
|
||||
return I->second;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user