@@ -23,23 +23,25 @@ TEST_CONSTEXPR(match_m128d(_mm_fmadd_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0,
2323
2424__m128 test_mm_fmadd_ss (__m128 a , __m128 b , __m128 c ) {
2525 // CHECK-LABEL: test_mm_fmadd_ss
26- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
27- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
28- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
26+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
27+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
28+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
2929 // CHECK: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})
30- // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
30+ // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
3131 return _mm_fmadd_ss (a , b , c );
3232}
33+ 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 ));
3334
3435__m128d test_mm_fmadd_sd (__m128d a , __m128d b , __m128d c ) {
3536 // CHECK-LABEL: test_mm_fmadd_sd
36- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
37- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
38- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
37+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
38+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
39+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3940 // CHECK: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}})
40- // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
41+ // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
4142 return _mm_fmadd_sd (a , b , c );
4243}
44+ 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 ));
4345
4446__m128 test_mm_fmsub_ps (__m128 a , __m128 b , __m128 c ) {
4547 // CHECK-LABEL: test_mm_fmsub_ps
@@ -59,25 +61,27 @@ TEST_CONSTEXPR(match_m128d(_mm_fmsub_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0,
5961
6062__m128 test_mm_fmsub_ss (__m128 a , __m128 b , __m128 c ) {
6163 // CHECK-LABEL: test_mm_fmsub_ss
62- // CHECK: [[NEG:%.+]] = fneg <4 x float> %{{.+}}
63- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
64- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
65- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
66- // CHECK: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}} )
67- // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
64+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
65+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
66+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
67+ // CHECK: [[NEG:%.+]] = fneg float %{{.+}}
68+ // CHECK: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float [[NEG]] )
69+ // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
6870 return _mm_fmsub_ss (a , b , c );
6971}
72+ 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 ));
7073
7174__m128d test_mm_fmsub_sd (__m128d a , __m128d b , __m128d c ) {
7275 // CHECK-LABEL: test_mm_fmsub_sd
73- // CHECK: [[NEG:%.+]] = fneg <2 x double> %{{.+}}
74- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
75- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
76- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
77- // CHECK: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}} )
78- // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
76+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
77+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
78+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
79+ // CHECK: [[NEG:%.+]] = fneg double %{{.+}}
80+ // CHECK: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double [[NEG]] )
81+ // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
7982 return _mm_fmsub_sd (a , b , c );
8083}
84+ 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 ));
8185
8286__m128 test_mm_fnmadd_ps (__m128 a , __m128 b , __m128 c ) {
8387 // CHECK-LABEL: test_mm_fnmadd_ps
@@ -97,25 +101,27 @@ TEST_CONSTEXPR(match_m128d(_mm_fnmadd_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0
97101
98102__m128 test_mm_fnmadd_ss (__m128 a , __m128 b , __m128 c ) {
99103 // CHECK-LABEL: test_mm_fnmadd_ss
100- // CHECK: [[NEG:%.+]] = fneg <4 x float> %{{.+}}
101- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
102- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
103- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
104- // CHECK: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}} , float %{{.*}})
105- // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
104+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
105+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
106+ // CHECK: [[NEG:%.+]] = fneg float %{{.+}}
107+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
108+ // CHECK: call float @llvm.fma.f32(float %{{.*}}, float [[NEG]] , float %{{.*}})
109+ // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
106110 return _mm_fnmadd_ss (a , b , c );
107111}
112+ 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 ));
108113
109114__m128d test_mm_fnmadd_sd (__m128d a , __m128d b , __m128d c ) {
110115 // CHECK-LABEL: test_mm_fnmadd_sd
111- // CHECK: [[NEG:%.+]] = fneg <2 x double> %{{.+}}
112- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
113- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
114- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
115- // CHECK: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}} , double %{{.*}})
116- // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
116+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
117+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
118+ // CHECK: [[NEG:%.+]] = fneg double %{{.+}}
119+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
120+ // CHECK: call double @llvm.fma.f64(double %{{.*}}, double [[NEG]] , double %{{.*}})
121+ // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
117122 return _mm_fnmadd_sd (a , b , c );
118123}
124+ 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 ));
119125
120126__m128 test_mm_fnmsub_ps (__m128 a , __m128 b , __m128 c ) {
121127 // CHECK-LABEL: test_mm_fnmsub_ps
@@ -137,27 +143,29 @@ TEST_CONSTEXPR(match_m128d(_mm_fnmsub_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0
137143
138144__m128 test_mm_fnmsub_ss (__m128 a , __m128 b , __m128 c ) {
139145 // CHECK-LABEL: test_mm_fnmsub_ss
140- // CHECK: [[NEG:%.+]] = fneg <4 x float> %{{.+}}
141- // CHECK: [[NEG2:%.+]] = fneg <4 x float> %{{.+}}
142- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
143- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
144- // CHECK: extractelement <4 x float> %{{.*}}, i64 0
145- // CHECK: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}} , float %{{.*}} )
146- // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
146+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
147+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
148+ // CHECK: [[NEG:%.+]] = fneg float %{{.+}}
149+ // CHECK: extractelement <4 x float> %{{.*}}, i32 0
150+ // CHECK: [[NEG2:%.+]] = fneg float %{{.+}}
151+ // CHECK: call float @llvm.fma.f32(float %{{.*}}, float [[NEG]] , float [[NEG2]] )
152+ // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
147153 return _mm_fnmsub_ss (a , b , c );
148154}
155+ 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 ));
149156
150157__m128d test_mm_fnmsub_sd (__m128d a , __m128d b , __m128d c ) {
151158 // CHECK-LABEL: test_mm_fnmsub_sd
152- // CHECK: [[NEG:%.+]] = fneg <2 x double> %{{.+}}
153- // CHECK: [[NEG2:%.+]] = fneg <2 x double> %{{.+}}
154- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
155- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
156- // CHECK: extractelement <2 x double> %{{.*}}, i64 0
157- // CHECK: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}} , double %{{.*}} )
158- // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
159+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
160+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
161+ // CHECK: [[NEG:%.+]] = fneg double %{{.+}}
162+ // CHECK: extractelement <2 x double> %{{.*}}, i32 0
163+ // CHECK: [[NEG2:%.+]] = fneg double %{{.+}}
164+ // CHECK: call double @llvm.fma.f64(double %{{.*}}, double [[NEG]] , double [[NEG2]] )
165+ // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
159166 return _mm_fnmsub_sd (a , b , c );
160167}
168+ 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 ));
161169
162170__m128 test_mm_fmaddsub_ps (__m128 a , __m128 b , __m128 c ) {
163171 // CHECK-LABEL: test_mm_fmaddsub_ps
0 commit comments