Skip to content

Commit 200dd6f

Browse files
committed
[clang][x86] Update SSE1/2/3 intrinsic tests for both C/C++
Requires some better checking of labels and some call instructions to handle additional markers
1 parent a017ed0 commit 200dd6f

File tree

8 files changed

+123
-104
lines changed

8 files changed

+123
-104
lines changed

clang/test/CodeGen/X86/sse-builtins-constrained-cmp.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse -emit-llvm -ffp-exception-behavior=strict -o - -Wall -Werror | FileCheck %s
1+
// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse -emit-llvm -ffp-exception-behavior=strict -o - -Wall -Werror | FileCheck %s
2+
// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse -emit-llvm -ffp-exception-behavior=strict -o - -Wall -Werror | FileCheck %s
23

34

45
#include <immintrin.h>

clang/test/CodeGen/X86/sse-builtins-constrained.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
// REQUIRES: x86-registered-target
2-
// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=UNCONSTRAINED --check-prefix=COMMON --check-prefix=COMMONIR
3-
// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -ffp-exception-behavior=maytrap -DSTRICT=1 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=CONSTRAINED --check-prefix=COMMON --check-prefix=COMMONIR
4-
// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -S -o - -Wall -Werror | FileCheck %s --check-prefix=CHECK-ASM --check-prefix=COMMON
5-
// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -ffp-exception-behavior=maytrap -DSTRICT=1 -S -o - -Wall -Werror | FileCheck %s --check-prefix=CHECK-ASM --check-prefix=COMMON
2+
// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=UNCONSTRAINED --check-prefix=COMMON --check-prefix=COMMONIR
3+
// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -ffp-exception-behavior=maytrap -DSTRICT=1 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=CONSTRAINED --check-prefix=COMMON --check-prefix=COMMONIR
4+
// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -S -o - -Wall -Werror | FileCheck %s --check-prefix=CHECK-ASM --check-prefix=COMMON
5+
// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -ffp-exception-behavior=maytrap -DSTRICT=1 -S -o - -Wall -Werror | FileCheck %s --check-prefix=CHECK-ASM --check-prefix=COMMON
6+
// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=UNCONSTRAINED --check-prefix=COMMON --check-prefix=COMMONIR
7+
// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -ffp-exception-behavior=maytrap -DSTRICT=1 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=CONSTRAINED --check-prefix=COMMON --check-prefix=COMMONIR
8+
// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -S -o - -Wall -Werror | FileCheck %s --check-prefix=CHECK-ASM --check-prefix=COMMON
9+
// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -ffp-exception-behavior=maytrap -DSTRICT=1 -S -o - -Wall -Werror | FileCheck %s --check-prefix=CHECK-ASM --check-prefix=COMMON
610

711
#ifdef STRICT
812
// Test that the constrained intrinsics are picking up the exception
@@ -16,8 +20,8 @@
1620

1721
__m128 test_mm_sqrt_ps(__m128 x) {
1822
// COMMON-LABEL: test_mm_sqrt_ps
19-
// UNCONSTRAINED: call <4 x float> @llvm.sqrt.v4f32(<4 x float> {{.*}})
20-
// CONSTRAINED: call <4 x float> @llvm.experimental.constrained.sqrt.v4f32(<4 x float> {{.*}}, metadata !{{.*}})
23+
// UNCONSTRAINED: call {{.*}}<4 x float> @llvm.sqrt.v4f32(<4 x float> {{.*}})
24+
// CONSTRAINED: call {{.*}}<4 x float> @llvm.experimental.constrained.sqrt.v4f32(<4 x float> {{.*}}, metadata !{{.*}})
2125
// CHECK-ASM: sqrtps
2226
return _mm_sqrt_ps(x);
2327
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
// RUN: %clang_cc1 -ffreestanding -triple x86_64-apple-macosx10.8.0 -target-feature +sse4.1 -debug-info-kind=limited -emit-llvm %s -o - | FileCheck %s
1+
// RUN: %clang_cc1 -x c -ffreestanding -triple x86_64-apple-macosx10.8.0 -target-feature +sse4.1 -debug-info-kind=limited -emit-llvm %s -o - | FileCheck %s
2+
// RUN: %clang_cc1 -x c++ -ffreestanding -triple x86_64-apple-macosx10.8.0 -target-feature +sse4.1 -debug-info-kind=limited -emit-llvm %s -o - | FileCheck %s
23

34
// Test that intrinsic calls inlined from _mm_* wrappers have debug metadata.
45

56
#include <xmmintrin.h>
67

78
__m128 test_rsqrt_ss(__m128 x) {
8-
// CHECK: define {{.*}} @test_rsqrt_ss
9-
// CHECK: call <4 x float> @llvm.x86.sse.rsqrt.ss({{.*}}, !dbg !{{.*}}
9+
// CHECK-LABEL: test_rsqrt_ss
10+
// CHECK: call {{.*}}<4 x float> @llvm.x86.sse.rsqrt.ss({{.*}}, !dbg !{{.*}}
1011
// CHECK: ret <4 x float>
1112
return _mm_rsqrt_ss(x);
1213
}

clang/test/CodeGen/X86/sse-builtins.c

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s
2-
// RUN: %clang_cc1 -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s
1+
// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s
2+
// RUN: %clang_cc1 -x c -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s
3+
// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s
4+
// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s
35

46

57
#include <immintrin.h>
@@ -84,7 +86,7 @@ __m128 test_mm_cmp_ps_ord_q(__m128 a, __m128 b) {
8486

8587
__m128 test_mm_cmp_ss(__m128 A, __m128 B) {
8688
// CHECK-LABEL: test_mm_cmp_ss
87-
// CHECK: call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 7)
89+
// CHECK: call {{.*}}<4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 7)
8890
return _mm_cmp_ss(A, B, _CMP_ORD_Q);
8991
}
9092

@@ -274,43 +276,43 @@ __m128 test_mm_cmpunord_ss(__m128 __a, __m128 __b) {
274276

275277
int test_mm_comieq_ss(__m128 A, __m128 B) {
276278
// CHECK-LABEL: test_mm_comieq_ss
277-
// CHECK: call i32 @llvm.x86.sse.comieq.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
279+
// CHECK: call {{.*}}i32 @llvm.x86.sse.comieq.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
278280
return _mm_comieq_ss(A, B);
279281
}
280282

281283
int test_mm_comige_ss(__m128 A, __m128 B) {
282284
// CHECK-LABEL: test_mm_comige_ss
283-
// CHECK: call i32 @llvm.x86.sse.comige.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
285+
// CHECK: call {{.*}}i32 @llvm.x86.sse.comige.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
284286
return _mm_comige_ss(A, B);
285287
}
286288

287289
int test_mm_comigt_ss(__m128 A, __m128 B) {
288290
// CHECK-LABEL: test_mm_comigt_ss
289-
// CHECK: call i32 @llvm.x86.sse.comigt.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
291+
// CHECK: call {{.*}}i32 @llvm.x86.sse.comigt.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
290292
return _mm_comigt_ss(A, B);
291293
}
292294

293295
int test_mm_comile_ss(__m128 A, __m128 B) {
294296
// CHECK-LABEL: test_mm_comile_ss
295-
// CHECK: call i32 @llvm.x86.sse.comile.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
297+
// CHECK: call {{.*}}i32 @llvm.x86.sse.comile.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
296298
return _mm_comile_ss(A, B);
297299
}
298300

299301
int test_mm_comilt_ss(__m128 A, __m128 B) {
300302
// CHECK-LABEL: test_mm_comilt_ss
301-
// CHECK: call i32 @llvm.x86.sse.comilt.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
303+
// CHECK: call {{.*}}i32 @llvm.x86.sse.comilt.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
302304
return _mm_comilt_ss(A, B);
303305
}
304306

305307
int test_mm_comineq_ss(__m128 A, __m128 B) {
306308
// CHECK-LABEL: test_mm_comineq_ss
307-
// CHECK: call i32 @llvm.x86.sse.comineq.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
309+
// CHECK: call {{.*}}i32 @llvm.x86.sse.comineq.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
308310
return _mm_comineq_ss(A, B);
309311
}
310312

311313
int test_mm_cvt_ss2si(__m128 A) {
312314
// CHECK-LABEL: test_mm_cvt_ss2si
313-
// CHECK: call i32 @llvm.x86.sse.cvtss2si(<4 x float> %{{.*}})
315+
// CHECK: call {{.*}}i32 @llvm.x86.sse.cvtss2si(<4 x float> %{{.*}})
314316
return _mm_cvt_ss2si(A);
315317
}
316318

@@ -338,34 +340,34 @@ float test_mm_cvtss_f32(__m128 A) {
338340

339341
int test_mm_cvtss_si32(__m128 A) {
340342
// CHECK-LABEL: test_mm_cvtss_si32
341-
// CHECK: call i32 @llvm.x86.sse.cvtss2si(<4 x float> %{{.*}})
343+
// CHECK: call {{.*}}i32 @llvm.x86.sse.cvtss2si(<4 x float> %{{.*}})
342344
return _mm_cvtss_si32(A);
343345
}
344346

345347
#ifdef __x86_64__
346348
long long test_mm_cvtss_si64(__m128 A) {
347349
// CHECK-LABEL: test_mm_cvtss_si64
348-
// CHECK: call i64 @llvm.x86.sse.cvtss2si64(<4 x float> %{{.*}})
350+
// CHECK: call {{.*}}i64 @llvm.x86.sse.cvtss2si64(<4 x float> %{{.*}})
349351
return _mm_cvtss_si64(A);
350352
}
351353
#endif
352354

353355
int test_mm_cvtt_ss2si(__m128 A) {
354356
// CHECK-LABEL: test_mm_cvtt_ss2si
355-
// CHECK: call i32 @llvm.x86.sse.cvttss2si(<4 x float> %{{.*}})
357+
// CHECK: call {{.*}}i32 @llvm.x86.sse.cvttss2si(<4 x float> %{{.*}})
356358
return _mm_cvtt_ss2si(A);
357359
}
358360

359361
int test_mm_cvttss_si32(__m128 A) {
360362
// CHECK-LABEL: test_mm_cvttss_si32
361-
// CHECK: call i32 @llvm.x86.sse.cvttss2si(<4 x float> %{{.*}})
363+
// CHECK: call {{.*}}i32 @llvm.x86.sse.cvttss2si(<4 x float> %{{.*}})
362364
return _mm_cvttss_si32(A);
363365
}
364366

365367
#ifdef __x86_64__
366368
long long test_mm_cvttss_si64(__m128 A) {
367369
// CHECK-LABEL: test_mm_cvttss_si64
368-
// CHECK: call i64 @llvm.x86.sse.cvttss2si64(<4 x float> %{{.*}})
370+
// CHECK: call {{.*}}i64 @llvm.x86.sse.cvttss2si64(<4 x float> %{{.*}})
369371
return _mm_cvttss_si64(A);
370372
}
371373
#endif
@@ -530,7 +532,7 @@ __m128 test_mm_movelh_ps(__m128 A, __m128 B) {
530532

531533
int test_mm_movemask_ps(__m128 A) {
532534
// CHECK-LABEL: test_mm_movemask_ps
533-
// CHECK: call i32 @llvm.x86.sse.movmsk.ps(<4 x float> %{{.*}})
535+
// CHECK: call {{.*}}i32 @llvm.x86.sse.movmsk.ps(<4 x float> %{{.*}})
534536
return _mm_movemask_ps(A);
535537
}
536538

@@ -563,25 +565,25 @@ void test_mm_prefetch(char const* p) {
563565

564566
__m128 test_mm_rcp_ps(__m128 x) {
565567
// CHECK-LABEL: test_mm_rcp_ps
566-
// CHECK: call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> {{.*}})
568+
// CHECK: call {{.*}}<4 x float> @llvm.x86.sse.rcp.ps(<4 x float> {{.*}})
567569
return _mm_rcp_ps(x);
568570
}
569571

570572
__m128 test_mm_rcp_ss(__m128 x) {
571573
// CHECK-LABEL: test_mm_rcp_ss
572-
// CHECK: call <4 x float> @llvm.x86.sse.rcp.ss(<4 x float> {{.*}})
574+
// CHECK: call {{.*}}<4 x float> @llvm.x86.sse.rcp.ss(<4 x float> {{.*}})
573575
return _mm_rcp_ss(x);
574576
}
575577

576578
__m128 test_mm_rsqrt_ps(__m128 x) {
577579
// CHECK-LABEL: test_mm_rsqrt_ps
578-
// CHECK: call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> {{.*}})
580+
// CHECK: call {{.*}}<4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> {{.*}})
579581
return _mm_rsqrt_ps(x);
580582
}
581583

582584
__m128 test_mm_rsqrt_ss(__m128 x) {
583585
// CHECK-LABEL: test_mm_rsqrt_ss
584-
// CHECK: call <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> {{.*}})
586+
// CHECK: call {{.*}}<4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> {{.*}})
585587
return _mm_rsqrt_ss(x);
586588
}
587589

@@ -701,7 +703,7 @@ __m128 test_mm_shuffle_ps(__m128 A, __m128 B) {
701703

702704
__m128 test_mm_sqrt_ps(__m128 x) {
703705
// CHECK-LABEL: test_mm_sqrt_ps
704-
// CHECK: call <4 x float> @llvm.sqrt.v4f32(<4 x float> {{.*}})
706+
// CHECK: call {{.*}}<4 x float> @llvm.sqrt.v4f32(<4 x float> {{.*}})
705707
return _mm_sqrt_ps(x);
706708
}
707709

@@ -810,37 +812,37 @@ void test_MM_TRANSPOSE4_PS(__m128 *A, __m128 *B, __m128 *C, __m128 *D) {
810812

811813
int test_mm_ucomieq_ss(__m128 A, __m128 B) {
812814
// CHECK-LABEL: test_mm_ucomieq_ss
813-
// CHECK: call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
815+
// CHECK: call {{.*}}i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
814816
return _mm_ucomieq_ss(A, B);
815817
}
816818

817819
int test_mm_ucomige_ss(__m128 A, __m128 B) {
818820
// CHECK-LABEL: test_mm_ucomige_ss
819-
// CHECK: call i32 @llvm.x86.sse.ucomige.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
821+
// CHECK: call {{.*}}i32 @llvm.x86.sse.ucomige.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
820822
return _mm_ucomige_ss(A, B);
821823
}
822824

823825
int test_mm_ucomigt_ss(__m128 A, __m128 B) {
824826
// CHECK-LABEL: test_mm_ucomigt_ss
825-
// CHECK: call i32 @llvm.x86.sse.ucomigt.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
827+
// CHECK: call {{.*}}i32 @llvm.x86.sse.ucomigt.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
826828
return _mm_ucomigt_ss(A, B);
827829
}
828830

829831
int test_mm_ucomile_ss(__m128 A, __m128 B) {
830832
// CHECK-LABEL: test_mm_ucomile_ss
831-
// CHECK: call i32 @llvm.x86.sse.ucomile.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
833+
// CHECK: call {{.*}}i32 @llvm.x86.sse.ucomile.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
832834
return _mm_ucomile_ss(A, B);
833835
}
834836

835837
int test_mm_ucomilt_ss(__m128 A, __m128 B) {
836838
// CHECK-LABEL: test_mm_ucomilt_ss
837-
// CHECK: call i32 @llvm.x86.sse.ucomilt.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
839+
// CHECK: call {{.*}}i32 @llvm.x86.sse.ucomilt.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
838840
return _mm_ucomilt_ss(A, B);
839841
}
840842

841843
int test_mm_ucomineq_ss(__m128 A, __m128 B) {
842844
// CHECK-LABEL: test_mm_ucomineq_ss
843-
// CHECK: call i32 @llvm.x86.sse.ucomineq.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
845+
// CHECK: call {{.*}}i32 @llvm.x86.sse.ucomineq.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}})
844846
return _mm_ucomineq_ss(A, B);
845847
}
846848

clang/test/CodeGen/X86/sse2-builtins-constrained-cmp.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -emit-llvm -ffp-exception-behavior=strict -o - -Wall -Werror | FileCheck %s
2-
// RUN: %clang_cc1 -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse2 -emit-llvm -ffp-exception-behavior=strict -o - -Wall -Werror | FileCheck %s
1+
// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -emit-llvm -ffp-exception-behavior=strict -o - -Wall -Werror | FileCheck %s
2+
// RUN: %clang_cc1 -x c -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse2 -emit-llvm -ffp-exception-behavior=strict -o - -Wall -Werror | FileCheck %s
3+
// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -emit-llvm -ffp-exception-behavior=strict -o - -Wall -Werror | FileCheck %s
4+
// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse2 -emit-llvm -ffp-exception-behavior=strict -o - -Wall -Werror | FileCheck %s
35

46

57
#include <immintrin.h>

0 commit comments

Comments
 (0)