@@ -28,23 +28,25 @@ TEST_CONSTEXPR(match_m128d(_mm_fmadd_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0,
2828
2929__m128 test_mm_fmadd_ss (__m128 a , __m128 b , __m128 c ) {
3030 // CHECK-LABEL: test_mm_fmadd_ss
31- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
32- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
33- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
31+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
32+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
33+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3434 // CHECK: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})
35- // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
35+ // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
3636 return _mm_fmadd_ss (a , b , c );
3737}
38+ TEST_CONSTEXPR (match_m128 (_mm_fmadd_ss ((__m128 ){ -4.0f , 1.0f , -2.0f , -0.0f }, (__m128 ){ 2.0f , 4.0f , 2.0f , -0.0f }, (__m128 ){ 1.0f , -4.0f , 2.0f , 1.0f }), -7.0f , 1.0f , -2.0f , -0.0f ));
3839
3940__m128d test_mm_fmadd_sd (__m128d a , __m128d b , __m128d c ) {
4041 // CHECK-LABEL: test_mm_fmadd_sd
41- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
42- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
43- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
42+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
43+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
44+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
4445 // CHECK: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}})
45- // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
46+ // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
4647 return _mm_fmadd_sd (a , b , c );
4748}
49+ TEST_CONSTEXPR (match_m128d (_mm_fmadd_sd ((__m128d ){ -4.0 , 1.0 }, (__m128d ){ 1.0 , 2.0 }, (__m128d ){ -8.0 , 3.0 }), -12.0 , 1.0 ));
4850
4951__m128 test_mm_fmsub_ps (__m128 a , __m128 b , __m128 c ) {
5052 // CHECK-LABEL: test_mm_fmsub_ps
@@ -64,25 +66,27 @@ TEST_CONSTEXPR(match_m128d(_mm_fmsub_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0,
6466
6567__m128 test_mm_fmsub_ss (__m128 a , __m128 b , __m128 c ) {
6668 // CHECK-LABEL: test_mm_fmsub_ss
67- // CHECK: [[NEG:%.+]] = fneg <4 x float> %{{.+}}
68- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
69- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
70- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
71- // CHECK: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}} )
72- // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
69+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
70+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
71+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
72+ // CHECK: [[NEG:%.+]] = fneg float %{{.+}}
73+ // CHECK: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float [[NEG]] )
74+ // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
7375 return _mm_fmsub_ss (a , b , c );
7476}
77+ TEST_CONSTEXPR (match_m128 (_mm_fmsub_ss ((__m128 ){ -4.0f , 1.0f , -2.0f , -0.0f }, (__m128 ){ 2.0f , 4.0f , 2.0f , -0.0f }, (__m128 ){ 1.0f , -4.0f , 2.0f , 1.0f }), -9.0f , 1.0f , -2.0f , -0.0f ));
7578
7679__m128d test_mm_fmsub_sd (__m128d a , __m128d b , __m128d c ) {
7780 // CHECK-LABEL: test_mm_fmsub_sd
78- // CHECK: [[NEG:%.+]] = fneg <2 x double> %{{.+}}
79- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
80- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
81- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
82- // CHECK: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}} )
83- // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
81+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
82+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
83+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
84+ // CHECK: [[NEG:%.+]] = fneg double %{{.+}}
85+ // CHECK: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double [[NEG]] )
86+ // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
8487 return _mm_fmsub_sd (a , b , c );
8588}
89+ TEST_CONSTEXPR (match_m128d (_mm_fmsub_sd ((__m128d ){ -4.0 , 1.0 }, (__m128d ){ 1.0 , 2.0 }, (__m128d ){ -8.0 , 3.0 }), 4.0 , 1.0 ));
8690
8791__m128 test_mm_fnmadd_ps (__m128 a , __m128 b , __m128 c ) {
8892 // CHECK-LABEL: test_mm_fnmadd_ps
@@ -102,25 +106,27 @@ TEST_CONSTEXPR(match_m128d(_mm_fnmadd_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0
102106
103107__m128 test_mm_fnmadd_ss (__m128 a , __m128 b , __m128 c ) {
104108 // CHECK-LABEL: test_mm_fnmadd_ss
105- // CHECK: [[NEG:%.+]] = fneg <4 x float> %{{.+}}
106- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
107- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
108- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
109- // CHECK: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}} , float %{{.*}})
110- // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
109+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
110+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
111+ // CHECK: [[NEG:%.+]] = fneg float %{{.+}}
112+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
113+ // CHECK: call float @llvm.fma.f32(float %{{.*}}, float [[NEG]] , float %{{.*}})
114+ // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
111115 return _mm_fnmadd_ss (a , b , c );
112116}
117+ TEST_CONSTEXPR (match_m128 (_mm_fnmadd_ss ((__m128 ){ -4.0f , 1.0f , -2.0f , -0.0f }, (__m128 ){ 2.0f , 4.0f , 2.0f , -0.0f }, (__m128 ){ 1.0f , -4.0f , 2.0f , 1.0f }), 9.0f , 1.0f , -2.0f , -0.0f ));
113118
114119__m128d test_mm_fnmadd_sd (__m128d a , __m128d b , __m128d c ) {
115120 // CHECK-LABEL: test_mm_fnmadd_sd
116- // CHECK: [[NEG:%.+]] = fneg <2 x double> %{{.+}}
117- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
118- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
119- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
120- // CHECK: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}} , double %{{.*}})
121- // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
121+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
122+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
123+ // CHECK: [[NEG:%.+]] = fneg double %{{.+}}
124+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
125+ // CHECK: call double @llvm.fma.f64(double %{{.*}}, double [[NEG]] , double %{{.*}})
126+ // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
122127 return _mm_fnmadd_sd (a , b , c );
123128}
129+ TEST_CONSTEXPR (match_m128d (_mm_fnmadd_sd ((__m128d ){ -4.0 , 1.0 }, (__m128d ){ 1.0 , 2.0 }, (__m128d ){ -8.0 , 3.0 }), -4.0 , 1.0 ));
124130
125131__m128 test_mm_fnmsub_ps (__m128 a , __m128 b , __m128 c ) {
126132 // CHECK-LABEL: test_mm_fnmsub_ps
@@ -142,27 +148,29 @@ TEST_CONSTEXPR(match_m128d(_mm_fnmsub_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0
142148
143149__m128 test_mm_fnmsub_ss (__m128 a , __m128 b , __m128 c ) {
144150 // CHECK-LABEL: test_mm_fnmsub_ss
145- // CHECK: [[NEG:%.+]] = fneg <4 x float> %{{.+}}
146- // CHECK: [[NEG2:%.+]] = fneg <4 x float> %{{.+}}
147- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
148- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
149- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
150- // CHECK: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}} , float %{{.*}} )
151- // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
151+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
152+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
153+ // CHECK: [[NEG:%.+]] = fneg float %{{.+}}
154+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
155+ // CHECK: [[NEG2:%.+]] = fneg float %{{.+}}
156+ // CHECK: call float @llvm.fma.f32(float %{{.*}}, float [[NEG]] , float [[NEG2]] )
157+ // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
152158 return _mm_fnmsub_ss (a , b , c );
153159}
160+ TEST_CONSTEXPR (match_m128 (_mm_fnmsub_ss ((__m128 ){ -4.0f , 1.0f , -2.0f , -0.0f }, (__m128 ){ 2.0f , 4.0f , 2.0f , -0.0f }, (__m128 ){ 1.0f , -4.0f , 2.0f , 1.0f }), 7.0f , 1.0f , -2.0f , -0.0f ));
154161
155162__m128d test_mm_fnmsub_sd (__m128d a , __m128d b , __m128d c ) {
156163 // CHECK-LABEL: test_mm_fnmsub_sd
157- // CHECK: [[NEG:%.+]] = fneg <2 x double> %{{.+}}
158- // CHECK: [[NEG2:%.+]] = fneg <2 x double> %{{.+}}
159- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
160- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
161- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
162- // CHECK: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}} , double %{{.*}} )
163- // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
164+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
165+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
166+ // CHECK: [[NEG:%.+]] = fneg double %{{.+}}
167+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
168+ // CHECK: [[NEG2:%.+]] = fneg double %{{.+}}
169+ // CHECK: call double @llvm.fma.f64(double %{{.*}}, double [[NEG]] , double [[NEG2]] )
170+ // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
164171 return _mm_fnmsub_sd (a , b , c );
165172}
173+ TEST_CONSTEXPR (match_m128d (_mm_fnmsub_sd ((__m128d ){ -4.0 , 1.0 }, (__m128d ){ 1.0 , 2.0 }, (__m128d ){ -8.0 , 3.0 }), 12.0 , 1.0 ));
166174
167175__m128 test_mm_fmaddsub_ps (__m128 a , __m128 b , __m128 c ) {
168176 // CHECK-LABEL: test_mm_fmaddsub_ps
0 commit comments