Skip to content

Commit 8836d04

Browse files
annkrsigcbot
authored andcommitted
Emit unwinding rules for CE register value. Try 2, v2
-use [[#]] when the offset by which we advance is meaningful (related to r1) -get rid of redundant rule for r1
1 parent f0080c8 commit 8836d04

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

IGC/DebugInfo/DwarfDebug.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3268,6 +3268,11 @@ void DwarfDebug::writeFDEStackCall(VISAModule *m) {
32683268
}
32693269
};
32703270

3271+
auto writeUndefined = [](std::vector<uint8_t> &data, uint32_t srcReg) {
3272+
write(data, (uint8_t)llvm::dwarf::DW_CFA_undefined);
3273+
writeULEB128(data, srcReg);
3274+
};
3275+
32713276
auto writeSameValue = [](std::vector<uint8_t> &data, uint32_t srcReg) {
32723277
write(data, (uint8_t)llvm::dwarf::DW_CFA_same_value);
32733278
writeULEB128(data, srcReg);
@@ -3398,11 +3403,22 @@ void DwarfDebug::writeFDEStackCall(VISAModule *m) {
33983403
} else {
33993404
if (m->GetType() == VISAModule::ObjectType::KERNEL) {
34003405
// set return location to be undefined in top frame
3401-
write(cfaOps[0], (uint8_t)llvm::dwarf::DW_CFA_undefined);
3402-
writeULEB128(cfaOps[0], RegisterNumbering::IP);
3406+
writeUndefined(cfaOps[0], RegisterNumbering::IP);
34033407
}
34043408
}
34053409

3410+
// write channel enable (currently only in -O0)
3411+
if (CFI.CEOffsetFromFPOff != 0xffff) {
3412+
write(cfaOps[CFI.CEStoreIP], (uint8_t)llvm::dwarf::DW_CFA_expression);
3413+
writeULEB128(cfaOps[CFI.CEStoreIP], RegisterNumbering::EMask);
3414+
writeCFAExpr(cfaOps[CFI.CEStoreIP], CFI.CEOffsetFromFPOff);
3415+
3416+
// set EMask to undefined when epilog starts to prevent
3417+
// dereferencing invalid CFA
3418+
writeUndefined(cfaOps[CFI.callerbefp.back().end + MovGenInstSizeInBytes],
3419+
RegisterNumbering::EMask);
3420+
}
3421+
34063422
// write callee save
34073423
if (CFI.calleeSaveEntry.size() > 0) {
34083424
// set holds any callee save GRF that has been saved already to stack.

0 commit comments

Comments
 (0)