float32x4_t test_vfmsq_lane_f32(float32x4_t a1, float32x4_t a2, float32x2_t a3) { // CHECK: test_vfmsq_lane_f32 return vfmsq_lane_f32(a1, a2, a3, 1); // NB: the test below is deliberately lose, so that we don't depend too much // upon the exact IR used to select lane 1 (usually a shufflevector) // CHECK: [[NEG:%.*]] = fsub <2 x float> {{.*}}, %a3 // CHECK: [[LANE:%.*]] = shufflevector <2 x float> [[NEG]] // CHECK: llvm.fma.v4f32(<4 x float> {{.*}}, <4 x float> [[LANE]], <4 x float> %a1) // CHECK-NEXT: ret }
float32x4_t test_vfmsq_lane_f32(float32x4_t a, float32x4_t b, float32x2_t v) { // CHECK: test_vfmsq_lane_f32 return vfmsq_lane_f32(a, b, v, 1); // CHECK: fmls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] }