[llvm] [AArch64][SelectionDAG] Avoid cross-bank copy for NEON vcvtfp2fx result (PR #210275)

Kieran B via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 17 07:22:10 PDT 2026


================
@@ -9121,6 +9121,49 @@ defm FCVTZS : SIMDFPScalarRShift<0, 0b11111, "fcvtzs">;
 defm FCVTZU : SIMDFPScalarRShift<1, 0b11111, "fcvtzu">;
 defm SCVTF  : SIMDFPScalarRShift<0, 0b11100, "scvtf">;
 defm UCVTF  : SIMDFPScalarRShift<1, 0b11100, "ucvtf">;
+
+// Transformation for SIMD shift imm to fixed point imm for FPR-to-GPR result
+def fixedpoint_scalar_xform : SDNodeXForm<timm, [{
----------------
kieroxide wrote:

The transforms use different renders for GI so that is why I think they are separate.  

For example: 
def gi_fixedpoint_vec_xform : GICustomOperandRenderer<"renderFixedPointXForm">,
  GISDNodeXFormEquiv<fixedpoint_vec_xform>;

def gi_fixedpoint_recip_vec_xform
    : GICustomOperandRenderer<"renderFixedPointRecipXForm">,
      GISDNodeXFormEquiv<fixedpoint_recip_vec_xform>;

The vec transform calls renderFixedPointXform as the renderer and the recip transform calls renderFixedPointRecipXForm.

I decided to add fixedpoint_scalar_xform was when I patch the GIsel, a new renderer will most likely be needed. 
So unless we create a general renderer, I don't think we can merge them. 


https://github.com/llvm/llvm-project/pull/210275


More information about the llvm-commits mailing list