1- From 13a6dfb3c7f2badbb19cab2d9c4542cab59d9c7c Mon Sep 17 00:00:00 2001
1+ From c2f521834c02cd054ea20765ab3c50f8c1025439 Mon Sep 17 00:00:00 2001
22From: Anton Zabaznov <
[email protected] >
33Date: Tue, 22 Sep 2020 19:03:50 +0300
44Subject: [PATCH] OpenCL 3.0 support
@@ -20,8 +20,8 @@ Subject: [PATCH] OpenCL 3.0 support
2020 clang/lib/Basic/Targets.cpp | 1 -
2121 clang/lib/CodeGen/CodeGenFunction.cpp | 6 +-
2222 clang/lib/Frontend/CompilerInvocation.cpp | 22 +-
23- clang/lib/Frontend/InitPreprocessor.cpp | 7 +-
24- clang/lib/Headers/opencl-c-base.h | 76 +-
23+ clang/lib/Frontend/InitPreprocessor.cpp | 6 +-
24+ clang/lib/Headers/opencl-c-base.h | 75 +-
2525 clang/lib/Headers/opencl-c.h | 3215 ++++++++++++++---
2626 clang/lib/Parse/ParseDecl.cpp | 12 +-
2727 clang/lib/Parse/ParsePragma.cpp | 10 +-
@@ -57,8 +57,7 @@ Subject: [PATCH] OpenCL 3.0 support
5757 clang/test/Frontend/stdlang.c | 1 +
5858 clang/test/Headers/opencl-c-header.cl | 7 +-
5959 clang/test/Index/pipe-size.cl | 7 +
60- clang/test/Preprocessor/init-aarch64.c | 13 +-
61- clang/test/Preprocessor/init.c | 1 +
60+ clang/test/Preprocessor/init-aarch64.c | 12 +-
6261 clang/test/Preprocessor/predefined-macros.c | 13 +
6362 .../Sema/feature-extensions-simult-support.cl | 75 +
6463 clang/test/Sema/features-ignore-pragma.cl | 24 +
@@ -73,7 +72,7 @@ Subject: [PATCH] OpenCL 3.0 support
7372 .../SemaOpenCL/invalid-pipe-builtin-cl2.0.cl | 1 +
7473 clang/test/SemaOpenCL/storageclass-cl20.cl | 1 +
7574 .../TableGen/ClangOpenCLBuiltinEmitter.cpp | 35 +-
76- 69 files changed, 3756 insertions(+), 738 deletions(-)
75+ 68 files changed, 3752 insertions(+), 738 deletions(-)
7776 create mode 100644 clang/test/CodeGenOpenCL/generic-address-space-feature.cl
7877 create mode 100644 clang/test/Sema/feature-extensions-simult-support.cl
7978 create mode 100644 clang/test/Sema/features-ignore-pragma.cl
@@ -786,7 +785,7 @@ index 73114c6d76c..bc54d231b97 100644
786785 Opts.Coroutines = Opts.CPlusPlus20 || Args.hasArg(OPT_fcoroutines_ts);
787786
788787diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
789- index 6eef1e2376f..276c47f2410 100644
788+ index 6eef1e2376f..5bb489c1190 100644
790789--- a/clang/lib/Frontend/InitPreprocessor.cpp
791790+++ b/clang/lib/Frontend/InitPreprocessor.cpp
792791@@ -445,6 +445,9 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI,
@@ -807,15 +806,7 @@ index 6eef1e2376f..276c47f2410 100644
807806
808807 if (TI.isLittleEndian())
809808 Builder.defineMacro("__ENDIAN_LITTLE__");
810- @@ -642,6 +646,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
811- Builder.defineMacro("__OPENCL_MEMORY_SCOPE_DEVICE", "2");
812- Builder.defineMacro("__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES", "3");
813- Builder.defineMacro("__OPENCL_MEMORY_SCOPE_SUB_GROUP", "4");
814- + Builder.defineMacro("__OPENCL_MEMORY_SCOPE_ALL_DEVICES", "5");
815-
816- // Support for #pragma redefine_extname (Sun compatibility)
817- Builder.defineMacro("__PRAGMA_REDEFINE_EXTNAME", "1");
818- @@ -1108,7 +1113,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
809+ @@ -1108,7 +1112,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
819810 // OpenCL definitions.
820811 if (LangOpts.OpenCL) {
821812 #define OPENCLEXT(Ext) \
@@ -825,20 +816,17 @@ index 6eef1e2376f..276c47f2410 100644
825816 #include "clang/Basic/OpenCLExtensions.def"
826817
827818diff --git a/clang/lib/Headers/opencl-c-base.h b/clang/lib/Headers/opencl-c-base.h
828- index 430e07d36f6..b10c6ece744 100644
819+ index 430e07d36f6..afa900ab24d 100644
829820--- a/clang/lib/Headers/opencl-c-base.h
830821+++ b/clang/lib/Headers/opencl-c-base.h
831- @@ -9,6 +9,62 @@
822+ @@ -9,6 +9,59 @@
832823 #ifndef _OPENCL_BASE_H_
833824 #define _OPENCL_BASE_H_
834825
835826+ // Add predefined macros to build headers with standalone executable
836827+ #ifndef CL_VERSION_3_0
837828+ #define CL_VERSION_3_0 300
838829+ #endif
839- + #ifndef __OPENCL_MEMORY_SCOPE_ALL_DEVICES
840- + #define __OPENCL_MEMORY_SCOPE_ALL_DEVICES 5
841- + #endif
842830+
843831+ // Define features for 2.0 for header backward compatibility
844832+ #ifndef __opencl_c_int64
@@ -891,7 +879,7 @@ index 430e07d36f6..b10c6ece744 100644
891879 // built-in scalar data types:
892880
893881 /**
894- @@ -115,7 +171 ,12 @@ typedef half half4 __attribute__((ext_vector_type(4)));
882+ @@ -115,7 +168 ,12 @@ typedef half half4 __attribute__((ext_vector_type(4)));
895883 typedef half half8 __attribute__((ext_vector_type(8)));
896884 typedef half half16 __attribute__((ext_vector_type(16)));
897885 #endif
@@ -905,24 +893,26 @@ index 430e07d36f6..b10c6ece744 100644
905893 #if __OPENCL_C_VERSION__ < CL_VERSION_1_2
906894 #pragma OPENCL EXTENSION cl_khr_fp64 : enable
907895 #endif
908- @@ -281,9 +342,15 @@ typedef uint cl_mem_fence_flags;
896+ @@ -281,9 +339,17 @@ typedef uint cl_mem_fence_flags;
909897 typedef enum memory_scope {
910898 memory_scope_work_item = __OPENCL_MEMORY_SCOPE_WORK_ITEM,
911899 memory_scope_work_group = __OPENCL_MEMORY_SCOPE_WORK_GROUP,
912900+ #ifdef __opencl_c_atomic_scope_device
913901 memory_scope_device = __OPENCL_MEMORY_SCOPE_DEVICE,
914902+ #endif
915903+ #ifdef __opencl_c_atomic_scope_all_devices
916- + memory_scope_all_devices = __OPENCL_MEMORY_SCOPE_ALL_DEVICES,
904+ + #if (__OPENCL_C_VERSION__ >= CL_VERSION_3_0)
905+ + memory_scope_all_devices = __OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES,
906+ + #endif //(__OPENCL_C_VERSION__ >= CL_VERSION_2_0)
917907 memory_scope_all_svm_devices = __OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES,
918908- #if defined(cl_intel_subgroups) || defined(cl_khr_subgroups)
919- + #endif
909+ + #endif // __opencl_c_atomic_scope_all_devices
920910+ #if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || \
921911+ defined(__opencl_c_subgroups)
922912 memory_scope_sub_group = __OPENCL_MEMORY_SCOPE_SUB_GROUP
923913 #endif
924914 } memory_scope;
925- @@ -301,13 +368 ,14 @@ typedef enum memory_scope {
915+ @@ -301,13 +367 ,14 @@ typedef enum memory_scope {
926916 #define ATOMIC_FLAG_INIT 0
927917
928918 // enum values aligned with what clang uses in EmitAtomicExpr()
@@ -7817,7 +7807,7 @@ index 94a1255f0a4..59b76051eda 100644
78177807 {
78187808 int s = sizeof(test);
78197809diff --git a/clang/test/Preprocessor/init-aarch64.c b/clang/test/Preprocessor/init-aarch64.c
7820- index df2a6128989..c0b13297a06 100644
7810+ index df2a6128989..cbb0995b48b 100644
78217811--- a/clang/test/Preprocessor/init-aarch64.c
78227812+++ b/clang/test/Preprocessor/init-aarch64.c
78237813@@ -109,12 +109,12 @@
@@ -7844,15 +7834,7 @@ index df2a6128989..c0b13297a06 100644
78447834 // AARCH64-NEXT: #define __INT8_FMTd__ "hhd"
78457835 // AARCH64-NEXT: #define __INT8_FMTi__ "hhi"
78467836 // AARCH64-NEXT: #define __INT8_MAX__ 127
7847- @@ -193,6 +193,7 @@
7848- // AARCH64-NEXT: #define __LP64__ 1
7849- // AARCH64-NEXT: #define __NO_INLINE__ 1
7850- // AARCH64-NEXT: #define __OBJC_BOOL_IS_BOOL 0
7851- + // AARCH64-NEXT: #define __OPENCL_MEMORY_SCOPE_ALL_DEVICES 5
7852- // AARCH64-NEXT: #define __OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES 3
7853- // AARCH64-NEXT: #define __OPENCL_MEMORY_SCOPE_DEVICE 2
7854- // AARCH64-NEXT: #define __OPENCL_MEMORY_SCOPE_SUB_GROUP 4
7855- @@ -238,7 +239,7 @@
7837+ @@ -238,7 +238,7 @@
78567838 // AARCH64-NEXT: #define __STDC_UTF_32__ 1
78577839 // AARCH64_C: #define __STDC_VERSION__ 201710L
78587840 // AARCH64-NEXT: #define __STDC__ 1
@@ -7861,7 +7843,7 @@ index df2a6128989..c0b13297a06 100644
78617843 // AARCH64-NEXT: #define __UINT16_FMTX__ "hX"
78627844 // AARCH64-NEXT: #define __UINT16_FMTo__ "ho"
78637845 // AARCH64-NEXT: #define __UINT16_FMTu__ "hu"
7864- @@ -259,7 +260 ,7 @@
7846+ @@ -259,7 +259 ,7 @@
78657847 // AARCH64-NEXT: #define __UINT64_FMTx__ "lx"
78667848 // AARCH64-NEXT: #define __UINT64_MAX__ 18446744073709551615UL
78677849 // AARCH64-NEXT: #define __UINT64_TYPE__ long unsigned int
@@ -7870,7 +7852,7 @@ index df2a6128989..c0b13297a06 100644
78707852 // AARCH64-NEXT: #define __UINT8_FMTX__ "hhX"
78717853 // AARCH64-NEXT: #define __UINT8_FMTo__ "hho"
78727854 // AARCH64-NEXT: #define __UINT8_FMTu__ "hhu"
7873- @@ -329,7 +330 ,7 @@
7855+ @@ -329,7 +329 ,7 @@
78747856 // AARCH64-NEXT: #define __UINT_LEAST8_FMTx__ "hhx"
78757857 // AARCH64-NEXT: #define __UINT_LEAST8_MAX__ 255
78767858 // AARCH64-NEXT: #define __UINT_LEAST8_TYPE__ unsigned char
@@ -7879,18 +7861,6 @@ index df2a6128989..c0b13297a06 100644
78797861 // AARCH64-NEXT: #define __VERSION__ "{{.*}}"
78807862 // AARCH64-NEXT: #define __WCHAR_MAX__ 4294967295U
78817863 // AARCH64-NEXT: #define __WCHAR_TYPE__ unsigned int
7882- diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c
7883- index 3cc36302aa0..158fb348026 100644
7884- --- a/clang/test/Preprocessor/init.c
7885- +++ b/clang/test/Preprocessor/init.c
7886- @@ -7545,6 +7545,7 @@
7887- // WEBASSEMBLY64-NEXT:#define __LP64__ 1
7888- // WEBASSEMBLY-NEXT:#define __NO_INLINE__ 1
7889- // WEBASSEMBLY-NEXT:#define __OBJC_BOOL_IS_BOOL 0
7890- + // WEBASSEMBLY-NEXT:#define __OPENCL_MEMORY_SCOPE_ALL_DEVICES 5
7891- // WEBASSEMBLY-NEXT:#define __OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES 3
7892- // WEBASSEMBLY-NEXT:#define __OPENCL_MEMORY_SCOPE_DEVICE 2
7893- // WEBASSEMBLY-NEXT:#define __OPENCL_MEMORY_SCOPE_SUB_GROUP 4
78947864diff --git a/clang/test/Preprocessor/predefined-macros.c b/clang/test/Preprocessor/predefined-macros.c
78957865index 083f0e539d8..6c80517ec4d 100644
78967866--- a/clang/test/Preprocessor/predefined-macros.c
0 commit comments