Cleanup for debugging IR under gdb
update block range on each IR instruction add CodeGenerator::print()
Esse commit está contido em:
@@ -5039,6 +5039,8 @@ void CodeGenerator::cgBlock(Block* block, vector<TransBCMapping>* bcMap) {
|
||||
auto* addr = cgInst(inst);
|
||||
if (m_state.asmInfo && addr) {
|
||||
m_state.asmInfo->instRanges[inst] = TcaRange(addr, m_as.code.frontier);
|
||||
m_state.asmInfo->asmRanges[block] =
|
||||
TcaRange(m_state.asmInfo->asmRanges[block].start(), m_as.code.frontier);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5077,6 +5079,9 @@ void cgTrace(Trace* trace, Asm& amain, Asm& astubs, Transl::TranslatorX64* tx64,
|
||||
last->getOpcode() == Jmp_ && last->getTaken() == nextThisAs;
|
||||
|
||||
CodeGenerator cg(trace, *as, astubs, tx64, state);
|
||||
if (state.asmInfo) {
|
||||
state.asmInfo->asmRanges[block] = TcaRange(asmStart, as->code.frontier);
|
||||
}
|
||||
cg.cgBlock(block, bcMap);
|
||||
Block* next = block->getNext();
|
||||
if (next && next != nextThisAs) {
|
||||
@@ -5094,6 +5099,10 @@ void cgTrace(Trace* trace, Asm& amain, Asm& astubs, Transl::TranslatorX64* tx64,
|
||||
}
|
||||
}
|
||||
|
||||
void CodeGenerator::print() const {
|
||||
m_curTrace->print(std::cout, m_state.asmInfo);
|
||||
}
|
||||
|
||||
// select instructions for the trace and its exits
|
||||
void genCodeForTrace(Trace* trace,
|
||||
CodeGenerator::Asm& as,
|
||||
|
||||
@@ -319,6 +319,9 @@ private:
|
||||
asm_label(m_as, done);
|
||||
}
|
||||
|
||||
// This is for printing partially-generated traces when debugging
|
||||
void print() const;
|
||||
|
||||
private:
|
||||
Asm& m_as; // current "main" assembler
|
||||
Asm& m_astubs; // assembler for stubs and other cold code.
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário