https://github.com/wenju-he updated 
https://github.com/llvm/llvm-project/pull/204043

>From 1bfc4012e7835fff65ae020eaa7074347ce45a83 Mon Sep 17 00:00:00 2001
From: Wenju He <[email protected]>
Date: Tue, 16 Jun 2026 03:20:40 +0200
Subject: [PATCH 1/2] [Clang][OpenCL] Add OpenCL 3.1 language version

OpenCL 3.1 was recently added to spec in
https://github.com/KhronosGroup/OpenCL-Docs/commit/9fff1a87a975

This PR adds version 3.1 to clang support, including frontend flag
`-std=cl3.1` (and its alias `-std=CL3.1`).

Add a new OpenCLVersions.def to share OpenCL versions between
OpenCLOptions.h and ClangOpenCLBuiltinEmitter.cpp. Updated release note.

A few extensions are promoted to 3.1 core. They'll be handled in
follow-up PRs.

Assisted-by: Claude Sonnet 4.6
---
 clang/docs/ReleaseNotes.rst                   |  4 +++
 clang/include/clang/Basic/LangStandards.def   |  4 +++
 clang/include/clang/Basic/OpenCLOptions.h     | 26 +++++++----------
 clang/include/clang/Basic/OpenCLVersions.def  | 29 +++++++++++++++++++
 clang/lib/Basic/LangOptions.cpp               |  2 ++
 clang/lib/Basic/TargetInfo.cpp                |  2 +-
 clang/lib/Frontend/CompilerInvocation.cpp     |  1 +
 clang/lib/Frontend/InitPreprocessor.cpp       |  4 +++
 clang/test/Driver/opencl.cl                   |  2 ++
 clang/test/Driver/unknown-std.cl              |  1 +
 clang/test/Preprocessor/predefined-macros.c   | 15 ++++++++++
 .../TableGen/ClangOpenCLBuiltinEmitter.cpp    |  7 +++--
 12 files changed, 77 insertions(+), 20 deletions(-)
 create mode 100644 clang/include/clang/Basic/OpenCLVersions.def

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 7828135a6edbc..eda1327fc0eea 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -822,6 +822,10 @@ Miscellaneous Clang Crashes Fixed
 OpenACC Specific Changes
 ------------------------
 
+OpenCL Specific Changes
+-----------------------
+- Added support for OpenCL C 3.1 language version (``-cl-std=CL3.1``).
+
 Target Specific Changes
 -----------------------
 
diff --git a/clang/include/clang/Basic/LangStandards.def 
b/clang/include/clang/Basic/LangStandards.def
index 4edc93503cdf5..809240978d013 100644
--- a/clang/include/clang/Basic/LangStandards.def
+++ b/clang/include/clang/Basic/LangStandards.def
@@ -209,6 +209,9 @@ LANGSTANDARD(opencl20, "cl2.0",
 LANGSTANDARD(opencl30, "cl3.0",
              OpenCL, "OpenCL 3.0",
              LineComment | C99 | Digraphs | HexFloat | OpenCL, std::nullopt)
+LANGSTANDARD(opencl31, "cl3.1",
+             OpenCL, "OpenCL 3.1",
+             LineComment | C99 | Digraphs | HexFloat | OpenCL, std::nullopt)
 
 LANGSTANDARD(openclcpp10, "clc++1.0",
              OpenCL, "C++ for OpenCL 1.0",
@@ -226,6 +229,7 @@ LANGSTANDARD_ALIAS_DEPR(opencl11, "CL1.1")
 LANGSTANDARD_ALIAS_DEPR(opencl12, "CL1.2")
 LANGSTANDARD_ALIAS_DEPR(opencl20, "CL2.0")
 LANGSTANDARD_ALIAS_DEPR(opencl30, "CL3.0")
+LANGSTANDARD_ALIAS_DEPR(opencl31, "CL3.1")
 LANGSTANDARD_ALIAS_DEPR(openclcpp10, "CLC++")
 LANGSTANDARD_ALIAS_DEPR(openclcpp10, "CLC++1.0")
 LANGSTANDARD_ALIAS_DEPR(openclcpp2021, "CLC++2021")
diff --git a/clang/include/clang/Basic/OpenCLOptions.h 
b/clang/include/clang/Basic/OpenCLOptions.h
index d6cb1a210519d..6eb08a183c244 100644
--- a/clang/include/clang/Basic/OpenCLOptions.h
+++ b/clang/include/clang/Basic/OpenCLOptions.h
@@ -27,12 +27,12 @@ namespace {
 // a mask to indicate in which OpenCL version(s) extension is a core or
 // optional core feature.
 enum OpenCLVersionID : unsigned int {
-  OCL_C_10 = 0x1,
-  OCL_C_11 = 0x2,
-  OCL_C_12 = 0x4,
-  OCL_C_20 = 0x8,
-  OCL_C_30 = 0x10,
-  OCL_C_ALL = 0x1f,
+#define OPENCL_VERSION(VersionCode, Enumerator, BitValue) Enumerator = 
BitValue,
+#include "clang/Basic/OpenCLVersions.def"
+  OCL_C_ALL = 0
+#define OPENCL_VERSION(VersionCode, Enumerator, BitValue) | (Enumerator)
+#include "clang/Basic/OpenCLVersions.def"
+  ,
   OCL_C_11P = OCL_C_ALL ^ OCL_C_10,              // OpenCL C 1.1+
   OCL_C_12P = OCL_C_ALL ^ (OCL_C_10 | OCL_C_11), // OpenCL C 1.2+
 };
@@ -41,16 +41,10 @@ static inline OpenCLVersionID encodeOpenCLVersion(unsigned 
OpenCLVersion) {
   switch (OpenCLVersion) {
   default:
     llvm_unreachable("Unknown OpenCL version code");
-  case 100:
-    return OCL_C_10;
-  case 110:
-    return OCL_C_11;
-  case 120:
-    return OCL_C_12;
-  case 200:
-    return OCL_C_20;
-  case 300:
-    return OCL_C_30;
+#define OPENCL_VERSION(VersionCode, Enumerator, BitValue)                      
\
+  case VersionCode:                                                            
\
+    return Enumerator;
+#include "clang/Basic/OpenCLVersions.def"
   }
 }
 
diff --git a/clang/include/clang/Basic/OpenCLVersions.def 
b/clang/include/clang/Basic/OpenCLVersions.def
new file mode 100644
index 0000000000000..9952ce8c92d33
--- /dev/null
+++ b/clang/include/clang/Basic/OpenCLVersions.def
@@ -0,0 +1,29 @@
+//===--- OpenCLVersions.def - OpenCL version list ---------------*- C++ 
-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the list of supported OpenCL C versions.
+//
+//   OPENCL_VERSION(VersionCode, Enumerator, BitValue)
+//
+//     VersionCode - integer representation (e.g., 100 for OpenCL C 1.0).
+//     Enumerator  - OpenCLVersionID enum name.
+//     BitValue    - bitmask value for OpenCLVersionID.
+//
+
+#ifndef OPENCL_VERSION
+#error "OPENCL_VERSION macro must be defined before including this file"
+#endif
+
+OPENCL_VERSION(100, OCL_C_10, 0x01)
+OPENCL_VERSION(110, OCL_C_11, 0x02)
+OPENCL_VERSION(120, OCL_C_12, 0x04)
+OPENCL_VERSION(200, OCL_C_20, 0x08)
+OPENCL_VERSION(300, OCL_C_30, 0x10)
+OPENCL_VERSION(310, OCL_C_31, 0x20)
+
+#undef OPENCL_VERSION
diff --git a/clang/lib/Basic/LangOptions.cpp b/clang/lib/Basic/LangOptions.cpp
index 7e75bf1221eb7..7e0ee665d4493 100644
--- a/clang/lib/Basic/LangOptions.cpp
+++ b/clang/lib/Basic/LangOptions.cpp
@@ -153,6 +153,8 @@ void LangOptions::setLangDefaults(LangOptions &Opts, 
Language Lang,
     Opts.OpenCLVersion = 200;
   else if (LangStd == LangStandard::lang_opencl30)
     Opts.OpenCLVersion = 300;
+  else if (LangStd == LangStandard::lang_opencl31)
+    Opts.OpenCLVersion = 310;
   else if (LangStd == LangStandard::lang_openclcpp10)
     Opts.OpenCLCPlusPlusVersion = 100;
   else if (LangStd == LangStandard::lang_openclcpp2021)
diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp
index 854d23cadaea2..9a25384347073 100644
--- a/clang/lib/Basic/TargetInfo.cpp
+++ b/clang/lib/Basic/TargetInfo.cpp
@@ -491,7 +491,7 @@ void TargetInfo::adjust(DiagnosticsEngine &Diags, 
LangOptions &Opts,
     // for OpenCL C 2.0 but with no access to target capabilities. Target
     // should be immutable once created and thus these language options need
     // to be defined only once.
-    if (Opts.getOpenCLCompatibleVersion() == 300) {
+    if (Opts.getOpenCLCompatibleVersion() >= 300) {
       const auto &OpenCLFeaturesMap = getSupportedOpenCLOpts();
       Opts.OpenCLGenericAddressSpace = hasFeatureEnabled(
           OpenCLFeaturesMap, "__opencl_c_generic_address_space");
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp 
b/clang/lib/Frontend/CompilerInvocation.cpp
index c564748ddabc1..d2847739e3143 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -4099,6 +4099,7 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, 
ArgList &Args,
             .Cases({"cl1.2", "CL1.2"}, LangStandard::lang_opencl12)
             .Cases({"cl2.0", "CL2.0"}, LangStandard::lang_opencl20)
             .Cases({"cl3.0", "CL3.0"}, LangStandard::lang_opencl30)
+            .Cases({"cl3.1", "CL3.1"}, LangStandard::lang_opencl31)
             .Cases({"clc++", "CLC++"}, LangStandard::lang_openclcpp10)
             .Cases({"clc++1.0", "CLC++1.0"}, LangStandard::lang_openclcpp10)
             .Cases({"clc++2021", "CLC++2021"}, 
LangStandard::lang_openclcpp2021)
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp 
b/clang/lib/Frontend/InitPreprocessor.cpp
index 3f0468a938149..ec009211ec6de 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -545,6 +545,9 @@ static void InitializeStandardPredefinedMacros(const 
TargetInfo &TI,
       case 300:
         Builder.defineMacro("__OPENCL_C_VERSION__", "300");
         break;
+      case 310:
+        Builder.defineMacro("__OPENCL_C_VERSION__", "310");
+        break;
       default:
         llvm_unreachable("Unsupported OpenCL version");
       }
@@ -554,6 +557,7 @@ static void InitializeStandardPredefinedMacros(const 
TargetInfo &TI,
     Builder.defineMacro("CL_VERSION_1_2", "120");
     Builder.defineMacro("CL_VERSION_2_0", "200");
     Builder.defineMacro("CL_VERSION_3_0", "300");
+    Builder.defineMacro("CL_VERSION_3_1", "310");
 
     if (TI.isLittleEndian())
       Builder.defineMacro("__ENDIAN_LITTLE__");
diff --git a/clang/test/Driver/opencl.cl b/clang/test/Driver/opencl.cl
index 5b2a1033de081..ba941d5f48feb 100644
--- a/clang/test/Driver/opencl.cl
+++ b/clang/test/Driver/opencl.cl
@@ -4,6 +4,7 @@
 // RUN: %clang -S -### -cl-std=CL1.2 %s 2>&1 | FileCheck 
--check-prefix=CHECK-CL12 %s
 // RUN: %clang -S -### -cl-std=CL2.0 %s 2>&1 | FileCheck 
--check-prefix=CHECK-CL20 %s
 // RUN: %clang -S -### -cl-std=CL3.0 %s 2>&1 | FileCheck 
--check-prefix=CHECK-CL30 %s
+// RUN: %clang -S -### -cl-std=CL3.1 %s 2>&1 | FileCheck 
--check-prefix=CHECK-CL31 %s
 // RUN: %clang -S -### -cl-std=clc++ %s 2>&1 | FileCheck 
--check-prefix=CHECK-CLCPP %s
 // RUN: %clang -S -### -cl-opt-disable %s 2>&1 | FileCheck 
--check-prefix=CHECK-OPT-DISABLE %s
 // RUN: %clang -S -### -cl-strict-aliasing %s 2>&1 | FileCheck 
--check-prefix=CHECK-STRICT-ALIASING %s
@@ -31,6 +32,7 @@
 // CHECK-CL12: "-cc1" {{.*}} "-cl-std=CL1.2"
 // CHECK-CL20: "-cc1" {{.*}} "-cl-std=CL2.0"
 // CHECK-CL30: "-cc1" {{.*}} "-cl-std=CL3.0"
+// CHECK-CL31: "-cc1" {{.*}} "-cl-std=CL3.1"
 // CHECK-CLCPP: "-cc1" {{.*}} "-cl-std=clc++"
 // CHECK-OPT-DISABLE: "-cc1" {{.*}} "-cl-opt-disable"
 // CHECK-STRICT-ALIASING: "-cc1" {{.*}} "-cl-strict-aliasing"
diff --git a/clang/test/Driver/unknown-std.cl b/clang/test/Driver/unknown-std.cl
index 3570515ad076d..a6d065d9a7d44 100644
--- a/clang/test/Driver/unknown-std.cl
+++ b/clang/test/Driver/unknown-std.cl
@@ -11,6 +11,7 @@
 // CHECK-NEXT: note: use 'cl1.2' for 'OpenCL 1.2' standard
 // CHECK-NEXT: note: use 'cl2.0' for 'OpenCL 2.0' standard
 // CHECK-NEXT: note: use 'cl3.0' for 'OpenCL 3.0' standard
+// CHECK-NEXT: note: use 'cl3.1' for 'OpenCL 3.1' standard
 // CHECK-NEXT: note: use 'clc++1.0' or 'clc++' for 'C++ for OpenCL 1.0' 
standard
 // CHECK-NEXT: note: use 'clc++2021' for 'C++ for OpenCL 2021' standard
 
diff --git a/clang/test/Preprocessor/predefined-macros.c 
b/clang/test/Preprocessor/predefined-macros.c
index ab85cfc00b42a..2dd4b78238a7b 100644
--- a/clang/test/Preprocessor/predefined-macros.c
+++ b/clang/test/Preprocessor/predefined-macros.c
@@ -145,6 +145,8 @@
 // RUN:   | FileCheck -match-full-lines %s --check-prefix=CHECK-CL20
 // RUN: %clang_cc1 %s -E -dM -o - -x cl -cl-std=CL3.0 \
 // RUN:   | FileCheck -match-full-lines %s --check-prefix=CHECK-CL30
+// RUN: %clang_cc1 %s -E -dM -o - -x cl -cl-std=CL3.1 \
+// RUN:   | FileCheck -match-full-lines %s --check-prefix=CHECK-CL31
 // RUN: %clang_cc1 %s -E -dM -o - -x cl -cl-fast-relaxed-math \
 // RUN:   | FileCheck -match-full-lines %s --check-prefix=CHECK-FRM
 // RUN: %clang_cc1 %s -E -dM -o - -x cl -cl-std=clc++ \
@@ -158,6 +160,7 @@
 // CHECK-CL10: #define CL_VERSION_1_2 120
 // CHECK-CL10: #define CL_VERSION_2_0 200
 // CHECK-CL10: #define CL_VERSION_3_0 300
+// CHECK-CL10: #define CL_VERSION_3_1 310
 // CHECK-CL10: #define __OPENCL_C_VERSION__ 100
 // CHECK-CL10-NOT: #define __FAST_RELAXED_MATH__ 1
 // CHECK-CL11: #define CL_VERSION_1_0 100
@@ -165,6 +168,7 @@
 // CHECK-CL11: #define CL_VERSION_1_2 120
 // CHECK-CL11: #define CL_VERSION_2_0 200
 // CHECK-CL11: #define CL_VERSION_3_0 300
+// CHECK-CL11: #define CL_VERSION_3_1 310
 // CHECK-CL11: #define __OPENCL_C_VERSION__ 110
 // CHECK-CL11-NOT: #define __FAST_RELAXED_MATH__ 1
 // CHECK-CL12: #define CL_VERSION_1_0 100
@@ -172,6 +176,7 @@
 // CHECK-CL12: #define CL_VERSION_1_2 120
 // CHECK-CL12: #define CL_VERSION_2_0 200
 // CHECK-CL12: #define CL_VERSION_3_0 300
+// CHECK-CL12: #define CL_VERSION_3_1 310
 // CHECK-CL12: #define __OPENCL_C_VERSION__ 120
 // CHECK-CL12-NOT: #define __FAST_RELAXED_MATH__ 1
 // CHECK-CL20: #define CL_VERSION_1_0 100
@@ -179,6 +184,7 @@
 // CHECK-CL20: #define CL_VERSION_1_2 120
 // CHECK-CL20: #define CL_VERSION_2_0 200
 // CHECK-CL20: #define CL_VERSION_3_0 300
+// CHECK-CL20: #define CL_VERSION_3_1 310
 // CHECK-CL20: #define __OPENCL_C_VERSION__ 200
 // CHECK-CL20-NOT: #define __FAST_RELAXED_MATH__ 1
 // CHECK-CL30: #define CL_VERSION_1_0 100
@@ -186,8 +192,17 @@
 // CHECK-CL30: #define CL_VERSION_1_2 120
 // CHECK-CL30: #define CL_VERSION_2_0 200
 // CHECK-CL30: #define CL_VERSION_3_0 300
+// CHECK-CL30: #define CL_VERSION_3_1 310
 // CHECK-CL30: #define __OPENCL_C_VERSION__ 300
 // CHECK-CL30-NOT: #define __FAST_RELAXED_MATH__ 1
+// CHECK-CL31: #define CL_VERSION_1_0 100
+// CHECK-CL31: #define CL_VERSION_1_1 110
+// CHECK-CL31: #define CL_VERSION_1_2 120
+// CHECK-CL31: #define CL_VERSION_2_0 200
+// CHECK-CL31: #define CL_VERSION_3_0 300
+// CHECK-CL31: #define CL_VERSION_3_1 310
+// CHECK-CL31: #define __OPENCL_C_VERSION__ 310
+// CHECK-CL31-NOT: #define __FAST_RELAXED_MATH__ 1
 // CHECK-FRM: #define __FAST_RELAXED_MATH__ 1
 // CHECK-CLCPP10: #define __CL_CPP_VERSION_1_0__ 100
 // CHECK-CLCPP10: #define __CL_CPP_VERSION_2021__ 202100
diff --git a/clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp 
b/clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp
index 720afea8b0965..d888e6e40cfa1 100644
--- a/clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp
+++ b/clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp
@@ -593,8 +593,6 @@ void BuiltinNameEmitter::EmitSignatureTable() {
 
 // Encode a range MinVersion..MaxVersion into a single bit mask that can be
 // checked against LangOpts using isOpenCLVersionContainedInMask().
-// This must be kept in sync with OpenCLVersionID in OpenCLOptions.h.
-// (Including OpenCLOptions.h here would be a layering violation.)
 static unsigned short EncodeVersions(unsigned int MinVersion,
                                      unsigned int MaxVersion) {
   unsigned short Encoded = 0;
@@ -604,7 +602,10 @@ static unsigned short EncodeVersions(unsigned int 
MinVersion,
     MaxVersion = UINT_MAX;
   }
 
-  unsigned VersionIDs[] = {100, 110, 120, 200, 300};
+  unsigned VersionIDs[] = {
+#define OPENCL_VERSION(VersionCode, Enumerator, BitValue) VersionCode,
+#include "clang/Basic/OpenCLVersions.def"
+  };
   for (unsigned I = 0; I < std::size(VersionIDs); I++) {
     if (VersionIDs[I] >= MinVersion && VersionIDs[I] < MaxVersion) {
       Encoded |= 1 << I;

>From 0d60499fecaf279f9293b7886935cbb4b37693ba Mon Sep 17 00:00:00 2001
From: Wenju He <[email protected]>
Date: Tue, 16 Jun 2026 12:00:25 +0200
Subject: [PATCH 2/2] delete OpenCLVersions.def

---
 clang/include/clang/Basic/OpenCLOptions.h     | 29 ++++++++++++-------
 clang/include/clang/Basic/OpenCLVersions.def  | 29 -------------------
 .../TableGen/ClangOpenCLBuiltinEmitter.cpp    |  7 ++---
 3 files changed, 22 insertions(+), 43 deletions(-)
 delete mode 100644 clang/include/clang/Basic/OpenCLVersions.def

diff --git a/clang/include/clang/Basic/OpenCLOptions.h 
b/clang/include/clang/Basic/OpenCLOptions.h
index 6eb08a183c244..ec661bba94adb 100644
--- a/clang/include/clang/Basic/OpenCLOptions.h
+++ b/clang/include/clang/Basic/OpenCLOptions.h
@@ -27,12 +27,13 @@ namespace {
 // a mask to indicate in which OpenCL version(s) extension is a core or
 // optional core feature.
 enum OpenCLVersionID : unsigned int {
-#define OPENCL_VERSION(VersionCode, Enumerator, BitValue) Enumerator = 
BitValue,
-#include "clang/Basic/OpenCLVersions.def"
-  OCL_C_ALL = 0
-#define OPENCL_VERSION(VersionCode, Enumerator, BitValue) | (Enumerator)
-#include "clang/Basic/OpenCLVersions.def"
-  ,
+  OCL_C_10 = 0x1,
+  OCL_C_11 = 0x2,
+  OCL_C_12 = 0x4,
+  OCL_C_20 = 0x8,
+  OCL_C_30 = 0x10,
+  OCL_C_31 = 0x20,
+  OCL_C_ALL = 0x3f,
   OCL_C_11P = OCL_C_ALL ^ OCL_C_10,              // OpenCL C 1.1+
   OCL_C_12P = OCL_C_ALL ^ (OCL_C_10 | OCL_C_11), // OpenCL C 1.2+
 };
@@ -41,10 +42,18 @@ static inline OpenCLVersionID encodeOpenCLVersion(unsigned 
OpenCLVersion) {
   switch (OpenCLVersion) {
   default:
     llvm_unreachable("Unknown OpenCL version code");
-#define OPENCL_VERSION(VersionCode, Enumerator, BitValue)                      
\
-  case VersionCode:                                                            
\
-    return Enumerator;
-#include "clang/Basic/OpenCLVersions.def"
+  case 100:
+    return OCL_C_10;
+  case 110:
+    return OCL_C_11;
+  case 120:
+    return OCL_C_12;
+  case 200:
+    return OCL_C_20;
+  case 300:
+    return OCL_C_30;
+  case 310:
+    return OCL_C_31;
   }
 }
 
diff --git a/clang/include/clang/Basic/OpenCLVersions.def 
b/clang/include/clang/Basic/OpenCLVersions.def
deleted file mode 100644
index 9952ce8c92d33..0000000000000
--- a/clang/include/clang/Basic/OpenCLVersions.def
+++ /dev/null
@@ -1,29 +0,0 @@
-//===--- OpenCLVersions.def - OpenCL version list ---------------*- C++ 
-*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the list of supported OpenCL C versions.
-//
-//   OPENCL_VERSION(VersionCode, Enumerator, BitValue)
-//
-//     VersionCode - integer representation (e.g., 100 for OpenCL C 1.0).
-//     Enumerator  - OpenCLVersionID enum name.
-//     BitValue    - bitmask value for OpenCLVersionID.
-//
-
-#ifndef OPENCL_VERSION
-#error "OPENCL_VERSION macro must be defined before including this file"
-#endif
-
-OPENCL_VERSION(100, OCL_C_10, 0x01)
-OPENCL_VERSION(110, OCL_C_11, 0x02)
-OPENCL_VERSION(120, OCL_C_12, 0x04)
-OPENCL_VERSION(200, OCL_C_20, 0x08)
-OPENCL_VERSION(300, OCL_C_30, 0x10)
-OPENCL_VERSION(310, OCL_C_31, 0x20)
-
-#undef OPENCL_VERSION
diff --git a/clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp 
b/clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp
index d888e6e40cfa1..a666dd1ed795d 100644
--- a/clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp
+++ b/clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp
@@ -593,6 +593,8 @@ void BuiltinNameEmitter::EmitSignatureTable() {
 
 // Encode a range MinVersion..MaxVersion into a single bit mask that can be
 // checked against LangOpts using isOpenCLVersionContainedInMask().
+// This must be kept in sync with OpenCLVersionID in OpenCLOptions.h.
+// (Including OpenCLOptions.h here would be a layering violation.)
 static unsigned short EncodeVersions(unsigned int MinVersion,
                                      unsigned int MaxVersion) {
   unsigned short Encoded = 0;
@@ -602,10 +604,7 @@ static unsigned short EncodeVersions(unsigned int 
MinVersion,
     MaxVersion = UINT_MAX;
   }
 
-  unsigned VersionIDs[] = {
-#define OPENCL_VERSION(VersionCode, Enumerator, BitValue) VersionCode,
-#include "clang/Basic/OpenCLVersions.def"
-  };
+  unsigned VersionIDs[] = {100, 110, 120, 200, 300, 310};
   for (unsigned I = 0; I < std::size(VersionIDs); I++) {
     if (VersionIDs[I] >= MinVersion && VersionIDs[I] < MaxVersion) {
       Encoded |= 1 << I;

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to