[llvm-commits] Initial patch for FMA4 support

Jan Sjodin jan_sjodin at yahoo.com
Wed Nov 23 13:59:06 PST 2011


>>> There's no specific reason in this case to have the "Int" 

> forms:
>> 
>>> 
>>> +multiclass fma4s_Int<bits<8> opc, string OpcodeStr, Intrinsic 
> Int,
>>> +        PatFrag ld_frag> {
>>> ...
>>> +defm Int_VFMADDSD4  : fma4s_Int<0x6B, "vfmaddsd",
>>> int_x86_fma4_vfmadd_sd, alignedloadv2f64>;
>>> 
>>> Instead, just write patterns to match the intrinsics with the
>>> previously defined FMA4 instructions.
>> 
>> 
>>  Okay, will do.
>> 

I forgot to mention, the original reason why I did this was because I did not want to
write 3 patterns for each intrinsic, but I couldn't find another way to do it. In any case,
I do the pattern version, since it is probably safer to keep the encoding in one place.

e.g:

def : Pat<(int_x86_fma4_vfmadd_sd VR128:$src1, VR128:$src2, VR128:$src3),
          (VFMADDSD4rr VR128:$src1, VR128:$src2, VR128:$src3)>;
def : Pat<(int_x86_fma4_vfmadd_sd VR128:$src1, VR128:$src2,
                                  (alignedloadv2f64 addr:$src3)),
          (VFMADDSD4rm VR128:$src1, VR128:$src2, addr:$src3)>;
def : Pat<(int_x86_fma4_vfmadd_sd VR128:$src1, (alignedloadv2f64 addr:$src2),
                                  VR128:$src3),
          (VFMADDSD4mr VR128:$src1, addr:$src2, VR128:$src3)>;

- Jan





More information about the llvm-commits mailing list