diff --git a/clang/test/CIR/CodeGen/X86/avx-builtins.c b/clang/test/CIR/CodeGen/X86/avx-builtins.c index 6c2617d9486a..ba615ec25807 100644 --- a/clang/test/CIR/CodeGen/X86/avx-builtins.c +++ b/clang/test/CIR/CodeGen/X86/avx-builtins.c @@ -18,6 +18,9 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +avx -fno-signed-char -fclangir -emit-llvm -o %t.ll -Wall -Werror // RUN: FileCheck --check-prefixes=LLVM-CHECK,LLVM-X64 --input-file=%t.ll %s +// This test mimics clang/test/CodeGen/X86/avx-builtins.c, which eventually +// CIR shall be able to support fully. + #include int test_mm256_extract_epi8(__m256i A) { diff --git a/clang/test/CIR/CodeGen/X86/bmi-builtins.c b/clang/test/CIR/CodeGen/X86/bmi-builtins.c index 52d555bcd59f..6e5873bfd339 100644 --- a/clang/test/CIR/CodeGen/X86/bmi-builtins.c +++ b/clang/test/CIR/CodeGen/X86/bmi-builtins.c @@ -3,6 +3,9 @@ // RUN: %clang_cc1 -ffreestanding -triple x86_64-unknown-linux -Wno-implicit-function-declaration -fclangir -emit-llvm -o %t.ll %s // RUN: FileCheck --check-prefix=LLVM --input-file=%t.ll %s +// This test mimics clang/test/CodeGen/X86/bmi-builtins.c, which eventually +// CIR shall be able to support fully. + #include unsigned short test__tzcnt_u16(unsigned short __X) { @@ -29,4 +32,4 @@ unsigned long long test__tzcnt_u64(unsigned long long __X) { // CIR: {{%.*}} = cir.llvm.intrinsic "cttz" {{%.*}} : (!u64i, !cir.bool) -> !u64i // LLVM: i64 @llvm.cttz.i64(i64 %{{.*}}, i1 false) } -#endif \ No newline at end of file +#endif diff --git a/clang/test/CIR/CodeGen/X86/builtins-x86.c b/clang/test/CIR/CodeGen/X86/builtins-x86.c deleted file mode 100644 index c8d00aaf3bf2..000000000000 --- a/clang/test/CIR/CodeGen/X86/builtins-x86.c +++ /dev/null @@ -1,47 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-linux -Wno-implicit-function-declaration -fclangir -emit-cir -o %t.cir %s -// RUN: FileCheck --check-prefix=CIR --input-file=%t.cir %s -// RUN: %clang_cc1 -triple x86_64-unknown-linux -Wno-implicit-function-declaration -fclangir -emit-llvm -o %t.ll %s -// RUN: FileCheck --check-prefix=LLVM --input-file=%t.ll %s - -// This test mimics clang/test/CodeGen/builtins-x86.c, which eventually -// CIR shall be able to support fully. - -void test_mm_clflush(const void* tmp_vCp) { - // CIR-LABEL: test_mm_clflush - // LLVM-LABEL: test_mm_clflush - _mm_clflush(tmp_vCp); - // CIR: {{%.*}} = cir.llvm.intrinsic "x86.sse2.clflush" {{%.*}} : (!cir.ptr) -> !void - // LLVM: call void @llvm.x86.sse2.clflush(ptr {{%.*}}) -} - -void test_mm_lfence() { - // CIR-LABEL: test_mm_lfence - // LLVM-LABEL: test_mm_lfence - _mm_lfence(); - // CIR: {{%.*}} = cir.llvm.intrinsic "x86.sse2.lfence" : () -> !void - // LLVM: call void @llvm.x86.sse2.lfence() -} - -void test_mm_pause() { - // CIR-LABEL: test_mm_pause - // LLVM-LABEL: test_mm_pause - _mm_pause(); - // CIR: {{%.*}} = cir.llvm.intrinsic "x86.sse2.pause" : () -> !void - // LLVM: call void @llvm.x86.sse2.pause() -} - -void test_mm_mfence() { - // CIR-LABEL: test_mm_mfence - // LLVM-LABEL: test_mm_mfence - _mm_mfence(); - // CIR: {{%.*}} = cir.llvm.intrinsic "x86.sse2.mfence" : () -> !void - // LLVM: call void @llvm.x86.sse2.mfence() -} - -void test_mm_sfence() { - // CIR-LABEL: test_mm_sfence - // LLVM-LABEL: test_mm_sfence - _mm_sfence(); - // CIR: {{%.*}} = cir.llvm.intrinsic "x86.sse.sfence" : () -> !void - // LLVM: call void @llvm.x86.sse.sfence() -} diff --git a/clang/test/CIR/CodeGen/X86/lzcnt-builtins.c b/clang/test/CIR/CodeGen/X86/lzcnt-builtins.c index 6055afbf9ba8..384be85f9916 100644 --- a/clang/test/CIR/CodeGen/X86/lzcnt-builtins.c +++ b/clang/test/CIR/CodeGen/X86/lzcnt-builtins.c @@ -3,6 +3,9 @@ // RUN: %clang_cc1 -ffreestanding -triple x86_64-unknown-linux -Wno-implicit-function-declaration -fclangir -emit-llvm -o %t.ll %s // RUN: FileCheck --check-prefix=LLVM --input-file=%t.ll %s +// This test mimics clang/test/CodeGen/X86/lzcnt-builtins.c, which eventually +// CIR shall be able to support fully. + #include unsigned int test_lzcnt_u32(unsigned int __X) diff --git a/clang/test/CIR/CodeGen/X86/mmx-builtins.c b/clang/test/CIR/CodeGen/X86/mmx-builtins.c index 6643ec20201c..3b75c00995b7 100644 --- a/clang/test/CIR/CodeGen/X86/mmx-builtins.c +++ b/clang/test/CIR/CodeGen/X86/mmx-builtins.c @@ -8,6 +8,9 @@ // RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +ssse3 -fno-signed-char -fclangir -emit-llvm -o %t.ll -Wall -Werror // RUN: FileCheck --check-prefix=LLVM-CHECK --implicit-check-not=x86mmx --input-file=%t.ll %s +// This test mimics clang/test/CodeGen/X86/mmx-builtins.c, which eventually +// CIR shall be able to support fully. + #include int test_mm_extract_pi16(__m64 a) { diff --git a/clang/test/CIR/CodeGen/X86/pause.c b/clang/test/CIR/CodeGen/X86/pause.c new file mode 100644 index 000000000000..67a0d6770c51 --- /dev/null +++ b/clang/test/CIR/CodeGen/X86/pause.c @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -ffreestanding -triple x86_64-unknown-linux -Wno-implicit-function-declaration -target-feature +sse2 -fclangir -emit-cir -o %t.cir %s +// RUN: FileCheck --check-prefix=CIR --input-file=%t.cir %s +// RUN: %clang_cc1 -ffreestanding -triple x86_64-unknown-linux -Wno-implicit-function-declaration -target-feature +sse2 -fclangir -emit-llvm -o %t.ll %s +// RUN: FileCheck --check-prefix=LLVM --input-file=%t.ll %s + +// RUN: %clang_cc1 -ffreestanding -triple x86_64-unknown-linux -Wno-implicit-function-declaration -target-feature -sse2 -fclangir -emit-cir -o %t.cir %s +// RUN: FileCheck --check-prefix=CIR --input-file=%t.cir %s +// RUN: %clang_cc1 -ffreestanding -triple x86_64-unknown-linux -Wno-implicit-function-declaration -target-feature -sse2 -fclangir -emit-llvm -o %t.ll %s +// RUN: FileCheck --check-prefix=LLVM --input-file=%t.ll %s + +// This test mimics clang/test/CodeGen/X86/pause.c, which eventually +// CIR shall be able to support fully. + +#include + +void test_mm_pause(void) { + // CIR-LABEL: test_mm_pause + // LLVM-LABEL: test_mm_pause + _mm_pause(); + // CIR: {{%.*}} = cir.llvm.intrinsic "x86.sse2.pause" : () -> !void + // LLVM: call void @llvm.x86.sse2.pause() +} diff --git a/clang/test/CIR/CodeGen/X86/rd-builtins.c b/clang/test/CIR/CodeGen/X86/rd-builtins.c index 8f8902199b10..2c279ceba24c 100644 --- a/clang/test/CIR/CodeGen/X86/rd-builtins.c +++ b/clang/test/CIR/CodeGen/X86/rd-builtins.c @@ -8,7 +8,7 @@ #include -unsigned long long test_rdtsc() { +int test_rdtsc(void) { // CIR-LABEL: @test_rdtsc // LLVM-LABEL: @test_rdtsc return __rdtsc(); @@ -32,4 +32,3 @@ unsigned long long test_rdtscp(unsigned int *a) { // LLVM: store i32 [[TSC_AUX]], ptr %{{.*}} // LLVM: [[TSC:%.*]] = extractvalue { i64, i32 } [[RDTSCP]], 0 } - diff --git a/clang/test/CIR/CodeGen/X86/sse-builtins.c b/clang/test/CIR/CodeGen/X86/sse-builtins.c index 08e805bce334..8b2c8fd1eb38 100644 --- a/clang/test/CIR/CodeGen/X86/sse-builtins.c +++ b/clang/test/CIR/CodeGen/X86/sse-builtins.c @@ -8,6 +8,9 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +sse -fclangir -emit-llvm -o %t.ll -Wall -Werror // RUN: FileCheck --check-prefixes=LLVM --input-file=%t.ll %s +// This test mimics clang/test/CodeGen/X86/sse-builtins.c, which eventually +// CIR shall be able to support fully. + #include @@ -18,3 +21,11 @@ void test_mm_prefetch(char const* p) { // CIR: cir.prefetch(%{{.*}} : !cir.ptr) locality(0) read // LLVM: call void @llvm.prefetch.p0(ptr {{.*}}, i32 0, i32 0, i32 1) } + +void test_mm_sfence(void) { + // CIR-LABEL: test_mm_sfence + // LLVM-LABEL: test_mm_sfence + _mm_sfence(); + // CIR: {{%.*}} = cir.llvm.intrinsic "x86.sse.sfence" : () -> !void + // LLVM: call void @llvm.x86.sse.sfence() +} diff --git a/clang/test/CIR/CodeGen/X86/sse2-builtins.c b/clang/test/CIR/CodeGen/X86/sse2-builtins.c index 873d72a021f4..2524357da6a9 100644 --- a/clang/test/CIR/CodeGen/X86/sse2-builtins.c +++ b/clang/test/CIR/CodeGen/X86/sse2-builtins.c @@ -8,8 +8,19 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +sse2 -fno-signed-char -fclangir -emit-llvm -o %t.ll -Wall -Werror // RUN: FileCheck --check-prefixes=LLVM-CHECK --input-file=%t.ll %s +// This test mimics clang/test/CodeGen/X86/sse2-builtins.c, which eventually +// CIR shall be able to support fully. + #include +void test_mm_clflush(void* A) { + // CIR-LABEL: test_mm_clflush + // LLVM-LABEL: test_mm_clflush + _mm_clflush(A); + // CIR-CHECK: {{%.*}} = cir.llvm.intrinsic "x86.sse2.clflush" {{%.*}} : (!cir.ptr) -> !void + // LLVM-CHECK: call void @llvm.x86.sse2.clflush(ptr {{%.*}}) +} + // Lowering to pextrw requires optimization. int test_mm_extract_epi16(__m128i A) { @@ -22,3 +33,19 @@ int test_mm_extract_epi16(__m128i A) { // LLVM-CHECK: zext i16 %{{.*}} to i32 return _mm_extract_epi16(A, 1); } + +void test_mm_lfence(void) { + // CIR-CHECK-LABEL: test_mm_lfence + // LLVM-CHECK-LABEL: test_mm_lfence + _mm_lfence(); + // CIR-CHECK: {{%.*}} = cir.llvm.intrinsic "x86.sse2.lfence" : () -> !void + // LLVM-CHECK: call void @llvm.x86.sse2.lfence() +} + +void test_mm_mfence(void) { + // CIR-CHECK-LABEL: test_mm_mfence + // LLVM-CHECK-LABEL: test_mm_mfence + _mm_mfence(); + // CIR-CHECK: {{%.*}} = cir.llvm.intrinsic "x86.sse2.mfence" : () -> !void + // LLVM-CHECK: call void @llvm.x86.sse2.mfence() +} diff --git a/clang/test/CIR/CodeGen/X86/sse41-builtins.c b/clang/test/CIR/CodeGen/X86/sse41-builtins.c index 59ab4b4d2bd9..814ff7bbe7eb 100644 --- a/clang/test/CIR/CodeGen/X86/sse41-builtins.c +++ b/clang/test/CIR/CodeGen/X86/sse41-builtins.c @@ -8,6 +8,8 @@ // RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +sse4.1 -fno-signed-char -fclangir -emit-llvm -o %t.ll -Wall -Werror // RUN: FileCheck --check-prefix=LLVM-CHECK --input-file=%t.ll %s +// This test mimics clang/test/CodeGen/X86/sse41-builtins.c, which eventually +// CIR shall be able to support fully. #include diff --git a/clang/test/CIR/CodeGen/X86/x86_64-xsave.c b/clang/test/CIR/CodeGen/X86/x86_64-xsave.c index bfa8377df521..afcd324144ee 100644 --- a/clang/test/CIR/CodeGen/X86/x86_64-xsave.c +++ b/clang/test/CIR/CodeGen/X86/x86_64-xsave.c @@ -43,6 +43,9 @@ // RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=x86_64-unknown-linux -target-feature +xsave -target-feature +xsaves -fno-signed-char -fclangir -emit-llvm -o %t.ll -Wall -Wno-unused-but-set-variable -Werror // RUN: FileCheck --check-prefix=LLVM-XSAVES --input-file=%t.ll %s +// This test mimics clang/test/CodeGen/X86/x86_64-xsave.c, which eventually +// CIR shall be able to support fully. + // Don't include mm_malloc.h, it's system specific. #define __MM_MALLOC_H #include @@ -333,4 +336,4 @@ void test(void) { // LLVM-XSETBV: call void @llvm.x86.xsetbv (void)_xsetbv(tmp_Ui, tmp_ULLi); #endif -} \ No newline at end of file +}