================
@@ -83,7 +167,7 @@ float32x4_t test_vfmaq_lane_f32(float32x4_t a, float32x4_t 
b, float32x2_t v) {
 // LLVM-NEXT: [[V_BYTES:%.*]] = bitcast <2 x i32> [[V_I]] to <8 x i8>
 // LLVM:      [[V_CAST:%.*]] = bitcast <8 x i8> [[V_BYTES]] to <2 x float>
 // LLVM-NEXT: [[LANE:%.*]] = shufflevector <2 x float> [[V_CAST]], <2 x float> 
{{.*}}, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
-// LLVM:      [[FMA:%.*]] = call <4 x float> @llvm.fma.v4f32(<4 x float> 
[[B_CAST:%.*]], <4 x float> [[LANE]], <4 x float> [[A_CAST:%.*]])
+// LLVM:      [[FMA:%.*]] = call <4 x float> @llvm.fma.v4f32(<4 x float> 
{{.*}}, <4 x float> [[LANE]], <4 x float> {{.*}})
----------------
yairbenavraham wrote:

IIUC, the previous inline captures, e.g. `[[B_CAST:%.*]]` / `[[A_CAST:%.*]]` 
inside the `llvm.fma` call (where lane-source cast/shuffle is involved), made 
the check look stronger but did not actually prove that those operands came 
from `b` and `a`. Replacing them with `{{.*}}` is weaker, but avoids suggesting 
as if I am checking operand provenance when it is only naming the call operands.

A stronger form would be (again, to my current understanding) to define 
`[[B_CAST]]` and `[[A_CAST]]` on the actual bitcast lines from `[[B_BYTES]]` 
and `[[A_BYTES]]`, then use those names in the `llvm.fma` call. The 
complication is that direct LLVM IR and CIR-to-LLVM emit these casts in a 
different relative order for the lane forms, while this file currently uses a 
shared `LLVM` prefix for both RUN lines.

Would using `LLVM-DAG` for the order-insensitive bitcast setup be acceptable 
here? That would keep the current RUN lines unchanged while still allowing the 
`llvm.fma` call to check the exact `b, lane, a` operands.

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

Reply via email to