================
@@ -20409,6 +20409,9 @@ tryToReplaceScalarFPConversionWithSVE(SDNode *N, 
SelectionDAG &DAG,
       N->getOpcode() == ISD::FP_TO_UINT_SAT)
     return SDValue();
 
+  if (Subtarget->isStreaming() && Subtarget->hasFPRCVT())
----------------
Lukacma wrote:

As mentioned in previous patch I don't think this is correct guard. Correct me 
if I am wrong but here is my reasoning in detail. 

Let's take this IR as an example:

```
define i32 @test_fptosi_f16_i32_simd(half %a)  {
  %r = fptosi half %a to i32
  ret i32 %r
}
```

When run with -attr=+sme,+neon,+fullfp16  --force-streaming it lowers to SVE 
assembly like this:

```
        ptrue   p0.s
                                        // kill: def $h0 killed $h0 def $z0
        fcvtzs  z0.s, p0/m, z0.h
        fmov    w0, s0
```

Even though it could have compiled to just:

```
        fcvtzs  w0, h0
```

As is the case in non-streaming mode. Looking at the patch which introduced it, 
it seems like it was added to deal with the fact that GPR converts were 
incorrectly disabled in streaming mode as I don't see a situation in which 
using SVE converts is better than just using the neon ones, when dealing with 
fixed length vectors or scalars.

https://github.com/llvm/llvm-project/pull/177334
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to