FreddyYe updated this revision to Diff 535213.
FreddyYe marked an inline comment as done.
FreddyYe added a comment.

address comments.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D152989/new/

https://reviews.llvm.org/D152989

Files:
  clang/test/CodeGen/attr-cpuspecific-cpus.c
  clang/test/CodeGen/attr-cpuspecific-small.c
  clang/test/CodeGen/attr-cpuspecific.c
  clang/test/Sema/attr-cpuspecific-small.c

Index: clang/test/Sema/attr-cpuspecific-small.c
===================================================================
--- /dev/null
+++ clang/test/Sema/attr-cpuspecific-small.c
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -o - %s
+// RUN: %clang_cc1 -triple x86_64-windows-pc -fms-compatibility -emit-llvm -o - %s
+
+#ifdef _WIN64
+#define ATTR(X) __declspec(X)
+#else
+#define ATTR(X) __attribute__((X))
+#endif // _MSC_VER
+
+ATTR(cpu_specific(ivybridge))
+void SingleVersion(void){}
+ATTR(cpu_dispatch(ivybridge))
+void SingleVersion(void);
+
+
Index: clang/test/CodeGen/attr-cpuspecific.c
===================================================================
--- clang/test/CodeGen/attr-cpuspecific.c
+++ clang/test/CodeGen/attr-cpuspecific.c
@@ -5,7 +5,7 @@
 #define ATTR(X) __declspec(X)
 #else
 #define ATTR(X) __attribute__((X))
-#endif // _MSC_VER
+#endif // _WIN64
 
 // Each version should have an IFunc and an alias.
 // LINUX: @SingleVersion = weak_odr alias void (), ptr @SingleVersion.ifunc
@@ -43,12 +43,18 @@
 void SingleVersion(void);
 // LINUX: define weak_odr ptr @SingleVersion.resolver()
 // LINUX: call void @__cpu_indicator_init
+// LINUX: %[[FEAT_INIT:.+]] = load i32, ptr getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, ptr @__cpu_model, i32 0, i32 3, i32 0), align 4
+// LINUX: %[[FEAT_JOIN:.+]] = and i32 %[[FEAT_INIT]], 1023
+// LINUX: %[[FEAT_CHECK:.+]] = icmp eq i32 %[[FEAT_JOIN]], 1023
 // LINUX: ret ptr @SingleVersion.S
 // LINUX: call void @llvm.trap
 // LINUX: unreachable
 
 // WINDOWS: define weak_odr dso_local void @SingleVersion() comdat
 // WINDOWS: call void @__cpu_indicator_init()
+// WINDOWS: %[[FEAT_INIT:.+]] = load i32, ptr getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, ptr @__cpu_model, i32 0, i32 3, i32 0), align 4
+// WINDOWS: %[[FEAT_JOIN:.+]] = and i32 %[[FEAT_INIT]], 1023
+// WINDOWS: %[[FEAT_CHECK:.+]] = icmp eq i32 %[[FEAT_JOIN]], 1023
 // WINDOWS: call void @SingleVersion.S()
 // WINDOWS-NEXT: ret void
 // WINDOWS: call void @llvm.trap
@@ -67,6 +73,9 @@
 void TwoVersions(void);
 // LINUX: define weak_odr ptr @TwoVersions.resolver()
 // LINUX: call void @__cpu_indicator_init
+// LINUX: %[[FEAT_INIT:.+]] = load i32, ptr getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, ptr @__cpu_model, i32 0, i32 3, i32 0), align 4
+// LINUX: %[[FEAT_JOIN:.+]] = and i32 %[[FEAT_INIT]], 58836991
+// LINUX: %[[FEAT_CHECK:.+]] = icmp eq i32 %[[FEAT_JOIN]], 58836991
 // LINUX: ret ptr @TwoVersions.Z
 // LINUX: ret ptr @TwoVersions.S
 // LINUX: call void @llvm.trap
@@ -74,6 +83,9 @@
 
 // WINDOWS: define weak_odr dso_local void @TwoVersions() comdat
 // WINDOWS: call void @__cpu_indicator_init()
+// WINDOWS: %[[FEAT_INIT:.+]] = load i32, ptr getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, ptr @__cpu_model, i32 0, i32 3, i32 0), align 4
+// WINDOWS: %[[FEAT_JOIN:.+]] = and i32 %[[FEAT_INIT]], 58836991
+// WINDOWS: %[[FEAT_CHECK:.+]] = icmp eq i32 %[[FEAT_JOIN]], 58836991
 // WINDOWS: call void @TwoVersions.Z()
 // WINDOWS-NEXT: ret void
 // WINDOWS: call void @TwoVersions.S()
Index: clang/test/CodeGen/attr-cpuspecific-small.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/attr-cpuspecific-small.c
@@ -0,0 +1,16 @@
+#ifdef _WIN64
+#define ATTR(X) __declspec(X)
+#else
+#define ATTR(X) __attribute__((X))
+#endif // _MSC_VER
+
+void TwoVersions(void);
+
+ATTR(cpu_dispatch(ivybridge, knl))
+void TwoVersions(void);
+
+ATTR(cpu_specific(ivybridge))
+void TwoVersions(void){}
+
+ATTR(cpu_specific(knl))
+void TwoVersions(void){}
Index: clang/test/CodeGen/attr-cpuspecific-cpus.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/attr-cpuspecific-cpus.c
@@ -0,0 +1,242 @@
+// RUN: %clang_cc1 -verify -triple x86_64-linux-gnu -emit-llvm -o - %s
+// RUN: %clang_cc1 -verify -triple x86_64-windows-pc -fms-compatibility -emit-llvm -o - %s
+
+// expected-no-diagnostics
+
+#ifdef _WIN64
+#define ATTR(X) __declspec(X)
+#else
+#define ATTR(X) __attribute__((X))
+#endif // _WIN64
+
+ATTR(cpu_dispatch(generic, pentium))
+void Version1(void);
+ATTR(cpu_specific(generic))
+void Version1(void){}
+ATTR(cpu_specific(pentium))
+void Version1(void){}
+
+ATTR(cpu_dispatch(generic, pentium_pro))
+void Version2(void);
+ATTR(cpu_specific(generic))
+void Version2(void){}
+ATTR(cpu_specific(pentium_pro))
+void Version2(void){}
+
+ATTR(cpu_dispatch(generic, pentium_mmx))
+void Version3(void);
+ATTR(cpu_specific(generic))
+void Version3(void){}
+ATTR(cpu_specific(pentium_mmx))
+void Version3(void){}
+
+ATTR(cpu_dispatch(generic, pentium_ii))
+void Version4(void);
+ATTR(cpu_specific(generic))
+void Version4(void){}
+ATTR(cpu_specific(pentium_ii))
+void Version4(void){}
+
+ATTR(cpu_dispatch(generic, pentium_iii))
+void Version5(void);
+ATTR(cpu_specific(generic))
+void Version5(void){}
+ATTR(cpu_specific(pentium_iii))
+void Version5(void){}
+
+ATTR(cpu_dispatch(generic, pentium_iii_no_xmm_regs))
+void Version6(void);
+ATTR(cpu_specific(generic))
+void Version6(void){}
+ATTR(cpu_specific(pentium_iii_no_xmm_regs))
+void Version6(void){}
+
+ATTR(cpu_dispatch(generic, pentium_4))
+void Version7(void);
+ATTR(cpu_specific(generic))
+void Version7(void){}
+ATTR(cpu_specific(pentium_4))
+void Version7(void){}
+
+ATTR(cpu_dispatch(generic, pentium_m))
+void Version8(void);
+ATTR(cpu_specific(generic))
+void Version8(void){}
+ATTR(cpu_specific(pentium_m))
+void Version8(void){}
+
+ATTR(cpu_dispatch(generic, pentium_4_sse3))
+void Version9(void);
+ATTR(cpu_specific(generic))
+void Version9(void){}
+ATTR(cpu_specific(pentium_4_sse3))
+void Version9(void){}
+
+ATTR(cpu_dispatch(generic, core_2_duo_ssse3))
+void Version10(void);
+ATTR(cpu_specific(generic))
+void Version10(void){}
+ATTR(cpu_specific(core_2_duo_ssse3))
+void Version10(void){}
+
+ATTR(cpu_dispatch(generic, core_2_duo_sse4_1))
+void Version11(void);
+ATTR(cpu_specific(generic))
+void Version11(void){}
+ATTR(cpu_specific(core_2_duo_sse4_1))
+void Version11(void){}
+
+ATTR(cpu_dispatch(generic, atom))
+void Version12(void);
+ATTR(cpu_specific(generic))
+void Version12(void){}
+ATTR(cpu_specific(atom))
+void Version12(void){}
+
+ATTR(cpu_dispatch(generic, atom_sse4_2))
+void Version13(void);
+ATTR(cpu_specific(generic))
+void Version13(void){}
+ATTR(cpu_specific(atom_sse4_2))
+void Version13(void){}
+
+ATTR(cpu_dispatch(generic, core_i7_sse4_2))
+void Version14(void);
+ATTR(cpu_specific(generic))
+void Version14(void){}
+ATTR(cpu_specific(core_i7_sse4_2))
+void Version14(void){}
+
+ATTR(cpu_dispatch(generic, core_aes_pclmulqdq))
+void Version15(void);
+ATTR(cpu_specific(generic))
+void Version15(void){}
+ATTR(cpu_specific(core_aes_pclmulqdq))
+void Version15(void){}
+
+ATTR(cpu_dispatch(generic, atom_sse4_2_movbe))
+void Version16(void);
+ATTR(cpu_specific(generic))
+void Version16(void){}
+ATTR(cpu_specific(atom_sse4_2_movbe))
+void Version16(void){}
+
+ATTR(cpu_dispatch(generic, goldmont))
+void Version17(void);
+ATTR(cpu_specific(generic))
+void Version17(void){}
+ATTR(cpu_specific(goldmont))
+void Version17(void){}
+
+ATTR(cpu_dispatch(generic, sandybridge))
+void Version18(void);
+ATTR(cpu_specific(generic))
+void Version18(void){}
+ATTR(cpu_specific(sandybridge))
+void Version18(void){}
+
+ATTR(cpu_dispatch(generic, core_2nd_gen_avx))
+void Version19(void);
+ATTR(cpu_specific(generic))
+void Version19(void){}
+ATTR(cpu_specific(core_2nd_gen_avx))
+void Version19(void){}
+
+ATTR(cpu_dispatch(generic, ivybridge))
+void Version20(void);
+ATTR(cpu_specific(generic))
+void Version20(void){}
+ATTR(cpu_specific(ivybridge))
+void Version20(void){}
+
+ATTR(cpu_dispatch(generic, core_3rd_gen_avx))
+void Version21(void);
+ATTR(cpu_specific(generic))
+void Version21(void){}
+ATTR(cpu_specific(core_3rd_gen_avx))
+void Version21(void){}
+
+ATTR(cpu_dispatch(generic, haswell))
+void Version22(void);
+ATTR(cpu_specific(generic))
+void Version22(void){}
+ATTR(cpu_specific(haswell))
+void Version22(void){}
+
+ATTR(cpu_dispatch(generic, core_4th_gen_avx))
+void Version23(void);
+ATTR(cpu_specific(generic))
+void Version23(void){}
+ATTR(cpu_specific(core_4th_gen_avx))
+void Version23(void){}
+
+ATTR(cpu_dispatch(generic, core_4th_gen_avx_tsx))
+void Version24(void);
+ATTR(cpu_specific(generic))
+void Version24(void){}
+ATTR(cpu_specific(core_4th_gen_avx_tsx))
+void Version24(void){}
+
+ATTR(cpu_dispatch(generic, broadwell))
+void Version25(void);
+ATTR(cpu_specific(generic))
+void Version25(void){}
+ATTR(cpu_specific(broadwell))
+void Version25(void){}
+
+ATTR(cpu_dispatch(generic, core_5th_gen_avx))
+void Version26(void);
+ATTR(cpu_specific(generic))
+void Version26(void){}
+ATTR(cpu_specific(core_5th_gen_avx))
+void Version26(void){}
+
+ATTR(cpu_dispatch(generic, core_5th_gen_avx_tsx))
+void Version27(void);
+ATTR(cpu_specific(generic))
+void Version27(void){}
+ATTR(cpu_specific(core_5th_gen_avx_tsx))
+void Version27(void){}
+
+ATTR(cpu_dispatch(generic, knl))
+void Version28(void);
+ATTR(cpu_specific(generic))
+void Version28(void){}
+ATTR(cpu_specific(knl))
+void Version28(void){}
+
+ATTR(cpu_dispatch(generic, mic_avx512))
+void Version29(void);
+ATTR(cpu_specific(generic))
+void Version29(void){}
+ATTR(cpu_specific(mic_avx512))
+void Version29(void){}
+
+ATTR(cpu_dispatch(generic, skylake))
+void Version30(void);
+ATTR(cpu_specific(generic))
+void Version30(void){}
+ATTR(cpu_specific(skylake))
+void Version30(void){}
+
+ATTR(cpu_dispatch(generic, skylake_avx512))
+void Version31(void);
+ATTR(cpu_specific(generic))
+void Version31(void){}
+ATTR(cpu_specific(skylake_avx512))
+void Version31(void){}
+
+ATTR(cpu_dispatch(generic, cannonlake))
+void Version32(void);
+ATTR(cpu_specific(generic))
+void Version32(void){}
+ATTR(cpu_specific(cannonlake))
+void Version32(void){}
+
+ATTR(cpu_dispatch(generic, knm))
+void Version33(void);
+ATTR(cpu_specific(generic))
+void Version33(void){}
+ATTR(cpu_specific(knm))
+void Version33(void){}
+
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to