forked from OSchip/llvm-project
[GlobalISel][IRTranslator] Move line zero DebugLoc creation to constant translation. NFC.
This is a compile time optimization. DILocation:get() is expensive to call, and we were calling it to create a line zero debug loc for *every* instruction we translated. We only really need to do this just before we build constants in the entry block, so I moved this code there. This reduces the LLVM -O0 codegen time of sqlite3 IR by around 0.7% instructions executed and by about ~2% in CPU time. We can probably do better with a more involved change, since the reason we need to create one for each new constant is because we're using the debug scope and inlined-at loc. If we just use a single instruction's scope and drop the inlined-at, we can just cache these and have them be free.
This commit is contained in:
parent
465df35355
commit
aa0b9200e8
|
@ -2842,13 +2842,6 @@ bool IRTranslator::valueIsSplit(const Value &V,
|
|||
|
||||
bool IRTranslator::translate(const Instruction &Inst) {
|
||||
CurBuilder->setDebugLoc(Inst.getDebugLoc());
|
||||
// We only emit constants into the entry block from here. To prevent jumpy
|
||||
// debug behaviour set the line to 0.
|
||||
if (const DebugLoc &DL = Inst.getDebugLoc())
|
||||
EntryBuilder->setDebugLoc(DILocation::get(
|
||||
Inst.getContext(), 0, 0, DL.getScope(), DL.getInlinedAt()));
|
||||
else
|
||||
EntryBuilder->setDebugLoc(DebugLoc());
|
||||
|
||||
auto &TLI = *MF->getSubtarget().getTargetLowering();
|
||||
if (TLI.fallBackToDAGISel(Inst))
|
||||
|
@ -2865,6 +2858,15 @@ bool IRTranslator::translate(const Instruction &Inst) {
|
|||
}
|
||||
|
||||
bool IRTranslator::translate(const Constant &C, Register Reg) {
|
||||
// We only emit constants into the entry block from here. To prevent jumpy
|
||||
// debug behaviour set the line to 0.
|
||||
if (auto CurrInstDL = CurBuilder->getDL())
|
||||
EntryBuilder->setDebugLoc(DILocation::get(C.getContext(), 0, 0,
|
||||
CurrInstDL.getScope(),
|
||||
CurrInstDL.getInlinedAt()));
|
||||
else
|
||||
EntryBuilder->setDebugLoc(DebugLoc());
|
||||
|
||||
if (auto CI = dyn_cast<ConstantInt>(&C))
|
||||
EntryBuilder->buildConstant(Reg, *CI);
|
||||
else if (auto CF = dyn_cast<ConstantFP>(&C))
|
||||
|
|
Loading…
Reference in New Issue