search for: spadj

Displaying 11 results from an estimated 11 matches for "spadj".

Did you mean: spad
2012 Nov 10
5
[LLVMdev] register scavenger
...sert(ScavengingFrameIndex >= 0 && "Cannot scavenge register without an emergency spill slot!"); TII->storeRegToStackSlot(*MBB, I, SReg, true, ScavengingFrameIndex, RC,TRI); MachineBasicBlock::iterator II = prior(I); TRI->eliminateFrameIndex(II, SPAdj, this); // Restore the scavenged register before its use (or first terminator). TII->loadRegFromStackSlot(*MBB, UseMI, SReg, ScavengingFrameIndex, RC, TRI); II = prior(UseMI); TRI->eliminateFrameIndex(II, SPAdj, this); }
2013 Sep 25
2
[LLVMdev] Register scavenger and SP/FP adjustments
...store and load use the same immediate offset. I see code in the PEI (replaceFrameIndices) that is supposed to track the SP/FP adjustment: ---------------------------------------- void PEI::replaceFrameIndices(MachineBasicBlock *BB, MachineFunction &Fn, int &SPAdj) { const TargetMachine &TM = Fn.getTarget(); assert(TM.getRegisterInfo() && "TM::getRegisterInfo() must be implemented!"); const TargetInstrInfo &TII = *Fn.getTarget().getInstrInfo(); const TargetRegisterInfo &TRI = *TM.getRegisterInfo(); const...
2012 Nov 10
0
[LLVMdev] register scavenger
...Index >= 0 && > "Cannot scavenge register without an emergency spill slot!"); > TII->storeRegToStackSlot(*MBB, I, SReg, true, ScavengingFrameIndex, > RC,TRI); > MachineBasicBlock::iterator II = prior(I); > TRI->eliminateFrameIndex(II, SPAdj, this); > > // Restore the scavenged register before its use (or first terminator). > TII->loadRegFromStackSlot(*MBB, UseMI, SReg, ScavengingFrameIndex, RC, > TRI); > II = prior(UseMI); > TRI->eliminateFrameIndex(II, SPAdj, this); > } > > _________...
2017 Aug 15
2
Problem of getting two unused registers in eliminateFrameIndex()
...custom processor backend I am trying add some instruction using BuildMI() inside eliminateFrameIndex(). I tried RegScavenger like this: unsigned RegUnused0 = RS->FindUnusedReg(&LASER::GNPRegsRegClass); if (!RegUnused0) RegUnused0 = RS->scavengeRegister(&LASER::GNPRegsRegClass, II, SPAdj); assert(RegUnused0 && "Register scavenger failed"); RS->setRegUsed(RegUnused0); It works but there are two issues: 1) I need to registers and RegScavenger only returns one. 2) I cannot unset the used register and I get spill slot error message when I ran out of the available...
2013 Sep 26
0
[LLVMdev] Register scavenger and SP/FP adjustments
...immediate offset. > > I see code in the PEI (replaceFrameIndices) that is supposed to track the SP/FP adjustment: > > ---------------------------------------- > void PEI::replaceFrameIndices(MachineBasicBlock *BB, > MachineFunction &Fn, int &SPAdj) { > const TargetMachine &TM = Fn.getTarget(); > assert(TM.getRegisterInfo() && > "TM::getRegisterInfo() must be implemented!"); > const TargetInstrInfo &TII = *Fn.getTarget().getInstrInfo(); > const TargetRegisterInfo &TRI = *TM.getRegisterI...
2007 Sep 06
1
[LLVMdev] Prolog/Epilog Insertion Question
...e = MI->getNumOperands(); i != e; ++i) if (MI->getOperand(i).isFrameIndex()) { // If this instruction has a FrameIndex operand, we need to use // that // target machine register info object to eliminate it. MRI.eliminateFrameIndex(MI, SPAdj, RS); // Revisit the instruction in full. Some instructions (e.g. // inline // asm instructions) can have multiple frame indices. --I; MI = 0; break; } } // Update register states. if (RS &&am...
2013 Sep 26
2
[LLVMdev] Register scavenger and SP/FP adjustments
...;> I see code in the PEI (replaceFrameIndices) that is supposed to track >> the SP/FP adjustment: >> >> ---------------------------------------- >> void PEI::replaceFrameIndices(MachineBasicBlock *BB, >> MachineFunction &Fn, int &SPAdj) { >> const TargetMachine &TM = Fn.getTarget(); >> assert(TM.getRegisterInfo() && >> "TM::getRegisterInfo() must be implemented!"); >> const TargetInstrInfo &TII = *Fn.getTarget().getInstrInfo(); >> const TargetRegisterInfo &TR...
2014 May 14
4
[LLVMdev] Question about calling convention implementation in LLVM target
Hi, We are currently developing an LLVM target for a micro-controller, and would like our TargetLowering::LowerCall method to emit PUSH instructions (instead of STORE) to pass arguments (which would improve code density for function calls). Is there a way of keeping track of the stack pointer changes implied by the PUSH instruction to calculate the correct offsets in
2013 Sep 26
0
[LLVMdev] Register scavenger and SP/FP adjustments
...the PEI (replaceFrameIndices) that is supposed to track >>> the SP/FP adjustment: >>> >>> ---------------------------------------- >>> void PEI::replaceFrameIndices(MachineBasicBlock *BB, >>> MachineFunction &Fn, int &SPAdj) { >>> const TargetMachine &TM = Fn.getTarget(); >>> assert(TM.getRegisterInfo() && >>> "TM::getRegisterInfo() must be implemented!"); >>> const TargetInstrInfo &TII = *Fn.getTarget().getInstrInfo(); >>> const TargetRegis...
2013 Sep 26
1
[LLVMdev] Register scavenger and SP/FP adjustments
...meIndices) that is supposed to track >>>> the SP/FP adjustment: >>>> >>>> ---------------------------------------- >>>> void PEI::replaceFrameIndices(MachineBasicBlock *BB, >>>> MachineFunction &Fn, int &SPAdj) { >>>> const TargetMachine &TM = Fn.getTarget(); >>>> assert(TM.getRegisterInfo() && >>>> "TM::getRegisterInfo() must be implemented!"); >>>> const TargetInstrInfo &TII = *Fn.getTarget().getInstrInfo(); >>>&g...
2017 Sep 27
0
PEI::replaceFrameIndices() endless loop
...hat we can // revisit them in full. bool AtBeginning = (I == BB->begin()); if (!AtBeginning) --I; // If this instruction has a FrameIndex operand, we need to // use that target machine register info object to eliminate // it. TRI.eliminateFrameIndex(MI, SPAdj, i, FrameIndexVirtualScavenging ? nullptr : RS); Regards, Dominique Torette. [http://www.spacebel.be/wp-content/uploads/2011/06/image-sign-sbp.jpg] Dominique Torette System Architect Rue des Chasseurs Ardennais - Liège Science Park - B-4031 Angleur T...