This is from code review comments for D106555
In D106555, after we added:
def : Pat<(v2i64 (PPCzextldsplat ForceXForm:$A)), (v2i64 (XXPERMDIs (LFIWZX ForceXForm:$A), 0))>; def : Pat<(v2i64 (PPCsextldsplat ForceXForm:$A)), (v2i64 (XXPERMDIs (LFIWAX ForceXForm:$A), 0))>;
some LIT cases change the input for vector splat instruction from vs0 to f0. But for vector splat instruction, like xxspltd, vs0 makes more sense than f0.
This patch changes register class for XXPERMDIs from vsfrc to vsrc. Now XXPERMDIs has same input type with XXPERMDI. So that it needs a vector register instead of a scalar float register.
Some other vector instructions have same issue, like XXSLDWI/XXSLDWIs, XXSPLTW/XXSPLTWs.
I believe the intention was to use XXPERMDIs for single precision , for vsfrc, while XXPERMDI for vsrc.
Are we sure we are using XXPERMDIs correctly in D106555?