@@ -75,25 +75,29 @@ TEST_CONSTEXPR(match_m128(_mm_blendv_ps((__m128)(__v4sf){0.0f, 1.0f, 2.0f, 3.0f}
7575
7676__m128d test_mm_ceil_pd (__m128d x ) {
7777 // CHECK-LABEL: test_mm_ceil_pd
78- // CHECK: call {{.*}}<2 x double> @llvm.x86.sse41.round.pd (<2 x double> %{{.*}}, i32 2 )
78+ // CHECK % {{.*}} = call <2 x double> @llvm.ceil.v2f64 (<2 x double> %{{.*}})
7979 return _mm_ceil_pd (x );
8080}
8181
8282__m128 test_mm_ceil_ps (__m128 x ) {
8383 // CHECK-LABEL: test_mm_ceil_ps
84- // CHECK: call {{.*}}<4 x float> @llvm.x86.sse41.round.ps (<4 x float> %{{.*}}, i32 2 )
84+ // CHECK: % {{.*}} = call <4 x float> @llvm.ceil.v4f32 (<4 x float> %{{.*}})
8585 return _mm_ceil_ps (x );
8686}
8787
8888__m128d test_mm_ceil_sd (__m128d x , __m128d y ) {
8989 // CHECK-LABEL: test_mm_ceil_sd
90- // CHECK: call {{.*}}<2 x double> @llvm.x86.sse41.round.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i32 2)
90+ // CHECK: %[[A:.*]] = extractelement <2 x double> %{{.*}}, i32 0
91+ // CHECK: %[[B:.*]] = call double @llvm.ceil.f64(double %[[A:.*]])
92+ // CHECK: %{{.*}} = insertelement <2 x double> %0, double %[[B:.*]], i32 0
9193 return _mm_ceil_sd (x , y );
9294}
9395
9496__m128 test_mm_ceil_ss (__m128 x , __m128 y ) {
9597 // CHECK-LABEL: test_mm_ceil_ss
96- // CHECK: call {{.*}}<4 x float> @llvm.x86.sse41.round.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i32 2)
98+ // CHECK: %[[A:.*]] = extractelement <4 x float> %{{.*}}, i32 0
99+ // CHECK: %[[B:.*]] = call float @llvm.ceil.f32(float %[[A:.*]])
100+ // CHECK: %{{.*}} = insertelement <4 x float> %0, float %[[B:.*]], i32 0
97101 return _mm_ceil_ss (x , y );
98102}
99103
@@ -256,25 +260,29 @@ TEST_CONSTEXPR(_mm_extract_ps(((__m128){1.25f, 2.5f, 3.75f, 5.0f}), 6) == __buil
256260
257261__m128d test_mm_floor_pd (__m128d x ) {
258262 // CHECK-LABEL: test_mm_floor_pd
259- // CHECK: call {{.*}}<2 x double> @llvm.x86.sse41.round.pd (<2 x double> %{{.*}}, i32 1 )
263+ // CHECK: % {{.*}} = call <2 x double> @llvm.floor.v2f64 (<2 x double> %{{.*}})
260264 return _mm_floor_pd (x );
261265}
262266
263267__m128 test_mm_floor_ps (__m128 x ) {
264268 // CHECK-LABEL: test_mm_floor_ps
265- // CHECK: call {{.*}}<4 x float> @llvm.x86.sse41.round.ps (<4 x float> %{{.*}}, i32 1 )
269+ // CHECK: % {{.*}} = call <4 x float> @llvm.floor.v4f32 (<4 x float> %{{.*}})
266270 return _mm_floor_ps (x );
267271}
268272
269273__m128d test_mm_floor_sd (__m128d x , __m128d y ) {
270274 // CHECK-LABEL: test_mm_floor_sd
271- // CHECK: call {{.*}}<2 x double> @llvm.x86.sse41.round.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i32 1)
275+ // CHECK: %[[A:.*]] = extractelement <2 x double> %{{.*}}, i32 0
276+ // CHECK: %[[B:.*]] = call double @llvm.floor.f64(double %[[A:.*]])
277+ // CHECK: %{{.*}} = insertelement <2 x double> %0, double %[[B:.*]], i32 0
272278 return _mm_floor_sd (x , y );
273279}
274280
275281__m128 test_mm_floor_ss (__m128 x , __m128 y ) {
276282 // CHECK-LABEL: test_mm_floor_ss
277- // CHECK: call {{.*}}<4 x float> @llvm.x86.sse41.round.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i32 1)
283+ // CHECK: %[[A:.*]] = extractelement <4 x float> %{{.*}}, i32 0
284+ // CHECK: %[[B:.*]] = call float @llvm.floor.f32(float %[[A:.*]])
285+ // CHECK: %{{.*}} = insertelement <4 x float> %0, float %[[B:.*]], i32 0
278286 return _mm_floor_ss (x , y );
279287}
280288
@@ -430,25 +438,29 @@ TEST_CONSTEXPR(match_v8hi(_mm_packus_epi32((__m128i)(__v4si){40000, -50000, 3276
430438
431439__m128d test_mm_round_pd (__m128d x ) {
432440 // CHECK-LABEL: test_mm_round_pd
433- // CHECK: call {{.*}}<2 x double> @llvm.x86.sse41.round.pd (<2 x double> %{{.*}}, i32 4)
441+ // CHECK: % {{.*}} = call <2 x double> @llvm.experimental.constrained.floor.v2f64 (<2 x double> %{{.*}}, metadata !"fpexcept.strict")
434442 return _mm_round_pd (x , 4 );
435443}
436444
437445__m128 test_mm_round_ps (__m128 x ) {
438446 // CHECK-LABEL: test_mm_round_ps
439- // CHECK: call {{.*}}<4 x float> @llvm.x86.sse41.round.ps (<4 x float> %{{.*}}, i32 4 )
447+ // CHECK: % {{.*}} = call <4 x float> @llvm.experimental.constrained.floor.v4f32 (<4 x float> %{{.*}}, metadata !"fpexcept.strict" )
440448 return _mm_round_ps (x , 4 );
441449}
442450
443451__m128d test_mm_round_sd (__m128d x , __m128d y ) {
444452 // CHECK-LABEL: test_mm_round_sd
445- // CHECK: call {{.*}}<2 x double> @llvm.x86.sse41.round.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i32 4)
453+ // CHECK: %[[A:.*]] = extractelement <2 x double> %{{.*}}, i32 0
454+ // CHECK: %[[B:.*]] = call double @llvm.experimental.constrained.floor.f64(double %[[A:.*]], metadata !"fpexcept.strict")
455+ // CHECK: %{{.*}} = insertelement <2 x double> %0, double %[[B:.*]], i32 0
446456 return _mm_round_sd (x , y , 4 );
447457}
448458
449459__m128 test_mm_round_ss (__m128 x , __m128 y ) {
450460 // CHECK-LABEL: test_mm_round_ss
451- // CHECK: call {{.*}}<4 x float> @llvm.x86.sse41.round.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i32 4)
461+ // CHECK: %[[A:.*]] = extractelement <4 x float> %{{.*}}, i32 0
462+ // CHECK: %[[B:.*]] = call float @llvm.experimental.constrained.floor.f32(float %[[A:.*]], metadata !"fpexcept.strict")
463+ // CHECK: %{{.*}} = insertelement <4 x float> %0, float %[[B:.*]], i32 0
452464 return _mm_round_ss (x , y , 4 );
453465}
454466
0 commit comments