[LLVMdev] Register Coalescer does not preserve TargetFlag
Jakob Stoklund Olesen
stoklund at 2pi.dk
Mon Aug 6 11:06:43 PDT 2012
On Aug 6, 2012, at 11:00 AM, Vincent Lejeune <vljn at ovi.com> wrote:
> Ok.
>
> I tried to do it using a pass after register allocation, lowering NEG/ABS instructions.
> However I met a problem : apparently getNextOperandForReg() can returns a MachineOperand before the one I'm processing.
>
> The following code snippet :
>
>
> void R600ModifiersPropagation::substituteReg(MachineOperand &def_MO, unsigned new_reg, unsigned char flag) {
> MachineOperand * MO = def_MO.getNextOperandForReg();
> while (MO && MO->isUse()) {
> MachineOperand *next_MO = MO->getNextOperandForReg();
> MO->dump();
>
> MO = next_MO;
> }
> }
>
> displays instructions that are before the one I'm passing as def_MO. I'm not sure if I should call some Analysis pass to enforce MachineOperand order or not.
We make no guarantees about the order of operands in the use-def chains, and there are no analyses that can reorder them.
I would suggest that you read the code in other targets to see how things are usually done.
/jakob
More information about the llvm-dev
mailing list