================
@@ -180,3 +265,201 @@ float16_t test_vfmah_laneq_f16(float16_t a, float16_t b, 
float16x8_t c) {
 // LLVM:      ret half [[FMA]]
   return vfmah_laneq_f16(a, b, c, 7);
 }
+
+// ALL-LABEL: @test_vfms_lane_f16(
+float16x4_t test_vfms_lane_f16(float16x4_t a, float16x4_t b,
+                                float16x4_t c) {
+// CIR: [[FNEG:%.*]] = cir.fneg %{{.*}} : !cir.vector<4 x !cir.f16>
+// CIR: cir.store align(8) [[FNEG]], [[NEG_SLOT:%.*]] : !cir.vector<4 x 
!cir.f16>, !cir.ptr<!cir.vector<4 x !cir.f16>>
+// CIR: [[NEG_PTR:%.*]] = cir.cast bitcast [[NEG_SLOT]] : 
!cir.ptr<!cir.vector<4 x !cir.f16>> -> !cir.ptr<!cir.vector<8 x !s8i>>
+// CIR: [[NEG_BYTES:%.*]] = cir.load align(8) [[NEG_PTR]] : 
!cir.ptr<!cir.vector<8 x !s8i>>, !cir.vector<8 x !s8i>
+// CIR: [[NEG_CAST:%.*]] = cir.cast bitcast [[NEG_BYTES]] : !cir.vector<8 x 
!s8i> -> !cir.vector<4 x !cir.f16>
+// CIR: [[LANE:%.*]] = cir.vec.shuffle(%{{.*}}, %{{.*}} : !cir.vector<4 x 
!cir.f16>) [#cir.int<3> : !s32i, #cir.int<3> : !s32i, #cir.int<3> : !s32i, 
#cir.int<3> : !s32i] : !cir.vector<4 x !cir.f16>
+// CIR: cir.call_llvm_intrinsic "fma" [[NEG_CAST]], [[LANE]], %{{.*}} : 
(!cir.vector<4 x !cir.f16>, !cir.vector<4 x !cir.f16>, !cir.vector<4 x 
!cir.f16>) -> !cir.vector<4 x !cir.f16>
+
+// LLVM-SAME: <4 x half> {{.*}} [[A:%.*]], <4 x half> {{.*}} [[B:%.*]], <4 x 
half> {{.*}} [[C:%.*]]) {{.*}} {
----------------
E00N777 wrote:

IMO,there is no need for LLVM-DAG here, LLVM-NEXT should be enough.

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

Reply via email to