[LLVMdev] Register Coalescer does not preserve TargetFlag

Vincent Lejeune vljn at ovi.com
Mon Aug 6 11:12:32 PDT 2012


Do you know any backend that implement instructions as a flag modifier in instruction ?

Thank,
Vincent Lejeune



----- Mail original -----
> De : Jakob Stoklund Olesen <stoklund at 2pi.dk>
> À : Vincent Lejeune <vljn at ovi.com>
> Cc : "llvmdev at cs.uiuc.edu (LLVMdev at cs.uiuc.edu)" <llvmdev at cs.uiuc.edu>
> Envoyé le : Lundi 6 août 2012 20h06
> Objet : Re: [LLVMdev] Register Coalescer does not preserve TargetFlag
> 
> 
> 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