[LLVMdev] RFC: X86InstrFormats.td Refactoring

David Greene dag at cray.com
Mon Mar 30 14:53:28 PDT 2009


On Monday 30 March 2009 16:12, David Greene wrote:
> There is some redundancy at the instruction format level in the x86 .td
> files. For example, in X86InstrFormats.td:
>
> // SSE1 Instruction Templates:
> //
> //   SSI   - SSE1 instructions with XS prefix.
>
> class SSI<bits<8> o, Format F, dag outs, dag ins, string asm, list<dag>
> pattern>
>
>       : I<o, F, outs, ins, asm, pattern>, XS, Requires<[HasSSE1]>;
>
> // SSE3 Instruction Templates:
> //   S3SI   - SSE3 instructions with XSrefix.
>
> class S3SI<bits<8> o, Format F, dag outs, dag ins, string asm, list<dag>
> pattern>
>
>       : I<o, F, outs, ins, asm, pattern>, XS, Requires<[HasSSE3]>;
>
> The only difference here is the parameter to Requires.  There are many more
> examples and this gets worse with AVX.
>
> I'd like to propose a refactoring that looks something like this:
>
> // SSE Instruction Templates:
> //
> //  SSI - SSE Instructions with XS prefix
>
> class SSI<bits<8> o, Format F, dag outs, dag ins, string asm, list<dag>
> pattern>
>
>       : I<o, F, outs, ins, asm, pattern>, XS;
>
> /./ SSE1 Instruction Templates
> //
> //  S1SI - SSE1 instructions with Xs prefix
>
> class S1SI<bits<8> o, Format F, dag outs, dag ins, string asm, list<dag>
> pattern>
>
>       : SSI<o, F, outs, ins, asm, pattern>, Requires<HasSSE1>;

Actually, I meant to keep the existing class names intact to avoid global 
changes.  So what I'm proposing is actually:

 class SSIb<bits<8> o, Format F, dag outs, dag ins, string asm,
   list<dag>  pattern>  : I<o, F, outs, ins, asm, pattern>, XS;

class SSI<bits<8> o, Format F, dag outs, dag ins, string asm, 
  list<dag> pattern>
       : SSIb<o, F, outs, ins, asm, pattern>, Requires<HasSSE1>;

                                           -Dave



More information about the llvm-dev mailing list