[LLVMdev] Let's get rid of neverHasSideEffects

reed kotler rkotler at mips.com
Tue Aug 21 15:29:36 PDT 2012


On 08/21/2012 03:02 PM, Chris Lattner wrote:
> On Aug 21, 2012, at 2:02 PM, Jakob Stoklund Olesen<stoklund at 2pi.dk>  wrote:
>
>> All,
>>
>> TableGen likes to infer the MCID::UnmodeledSideEffects flag from an instruction's pattern. When an instruction doesn't have a pattern, it is assumed to have side effects.
> Hi Jakob,
>
> I don't understand what you're saying.  Are you proposing that all properties (may load, store, side effects) be explicitly added to all instructions, and the pattern only be used to produce warnings?
>
> Won't this hugely bloat the .td files?
>
> -Chris
>
For mips16, I have NO patterns in instructions.

The instructions all stand by themselves independent of how they are 
used in code generation.

The patterns are all separated.

I think this is better from the point of view of data abstraction and 
information hiding.

I don't want to know about the details of instruction layout when I'm 
thinking about the higher level use of the instruction.

>> It's possible to override this behavior by setting neverHasSideEffects = 1.
>>
>> It was originally the intention that most instructions have patterns, but that's not the way it worked out. It is often more convenient to use def : Pat<>, and sometimes custom instruction selection is required.
>>
>> As a result, many instructions are defined without a pattern, and we often forget to set neverHasSideEffects = 1.
>>
>> $ grep -c UnmodeledSideEffects lib/Target/*/*GenInstrInfo.inc
>> lib/Target/ARM/ARMGenInstrInfo.inc:727
>> lib/Target/X86/X86GenInstrInfo.inc:920
>>
>> I don't think more than half of those UnmodeledSideEffects flags should be there.
>>
>>
>> I want to stop inferring instruction properties from patterns in TableGen. It has become very hard to read instruction definitions when some properties are inferred, but only half the time.
>>
>> We can still use any patterns to emit TableGen warnings. If an instruction has a sideeffecting pattern, but hasSideEffects isn't set, TableGen should complain.
>>
>> I can't just kill off the neverHasSideEffects flag, that could cause miscompilations by clearing the UnmodeledSideEffects bit on instructions that should have it.
>>
>> Any suggestions for a clean transition? I was thinking about first adding a -Winfer flag that warns whenever TableGen infers a property that wasn't already set in the .td file.
>>
>> /jakob
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list