[llvm-commits] [llvm] r44960 - in /llvm/trunk: include/llvm/Target/ lib/CodeGen/ lib/Target/ lib/Target/ARM/ lib/Target/Alpha/ lib/Target/IA64/ lib/Target/Mips/ lib/Target/PowerPC/ lib/Target/Sparc/ lib/Target/X86/ test/CodeGen/X86/

Evan Cheng evan.cheng at apple.com
Wed Dec 12 18:01:45 PST 2007


On Dec 12, 2007, at 5:51 PM, Chris Lattner wrote:

>>>> At one point were discussed eliminating
>>>> TII::isTriviallyReMaterializable.  The argument is that target
>>>> implementations shouldn't have to know about algorithms, they  
>>>> should
>>>> just describe properties of the target, and the algorithm should
>>>> figure out if it can make the xform from that info.
>>>
>>> What do you mean? The targets don't know about the remat algorithm.
>>> It's just the spiller making use of a some property of the
>>> instructions.
>>
>> Ok, you are talking about isTriviallyReMaterializable, not
>> M_IMPLICIT_DEF_FLAG. Right now it is defined as this:
>
> Right.
>
>>    bool isTriviallyReMaterializable(MachineInstr *MI) const {
>>      return (MI->getInstrDescriptor()->Flags & M_REMATERIALIZIBLE) &&
>>             isReallyTriviallyReMaterializable(MI);
>>    }
>>
>> X86::isReallyTriviallyReMaterializable() is:
>> ...
>>    case X86::MMX_MOVD64rm:
>>    case X86::MMX_MOVQ64rm:
>>      // Loads from constant pools are trivially rematerializable.
>>      return MI->getOperand(1).isRegister() && MI->getOperand
>> (2).isImmediate() &&
>>             MI->getOperand(3).isRegister() && MI->getOperand
>> (4).isConstantPoolIndex() &&
>>             MI->getOperand(1).getReg() == 0 &&
>>             MI->getOperand(2).getImmedValue() == 1 &&
>>             MI->getOperand(3).getReg() == 0;
>>    }
>>
>> The targets is only describing properties of the instruction because
>> we are not able to describe addressing mode in a generic way. Seems
>> like we are not too far off from your "pipe dream". :-)
>
> aha!  How about we have some new property "can be moved with
> impunity" which laods from the constant pool would return true for?
> This property could then be used by licm and is better than calling
> it "rematerializable", which depends on the implementation of remat.

The problem is the property requires understanding of the MI  
addressing mode. There is no way to specify a static property to  
describe that. Unless we want to use different opcodes for  
constantpool load, for example.

>
> I'd like to nuke M_REMATERIALIZIBLE and
> isReallyTriviallyReMaterializable, replacing them with the properties
> that are actually needed.

I have no problem with nuking M_REMATERIALIZIBLE. We just have to  
replace it with something like M_HAS_SIDE_EFFECT. However, I am not  
sure how to eliminate isReallyTriviallyReMaterializable for reason  
described above.

Evan

>
> -Chris
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list