[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-23 Thread Shilei Tian via cfe-commits

https://github.com/shiltian closed 
https://github.com/llvm/llvm-project/pull/78333
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-23 Thread via cfe-commits

https://github.com/lntue updated https://github.com/llvm/llvm-project/pull/78333

>From 5eb2678a0a6a55c2d441b322d4eaaa8fe829a30f Mon Sep 17 00:00:00 2001
From: Shilei Tian 
Date: Tue, 23 Jan 2024 16:14:48 -0500
Subject: [PATCH] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation

We can directly call `clang -c -x cl -target amdgcn -mcpu=gfx90a test.cl -o 
test.o`
to compile an OpenCL kernel file. However, when `--save-temps` is enabled, it 
doesn't
work because the preprocessed file (`.i` file)  is taken as C source file when 
it
is fed to the front end, thus causing compilation error because those OpenCL 
keywords
can't be recognized. This patch fixes the issue.
---
 clang/include/clang/Driver/Types.def   |  6 --
 clang/lib/Driver/Types.cpp |  7 ++-
 clang/test/Driver/opencl_aot_save_temps.cl | 16 
 3 files changed, 26 insertions(+), 3 deletions(-)
 create mode 100644 clang/test/Driver/opencl_aot_save_temps.cl

diff --git a/clang/include/clang/Driver/Types.def 
b/clang/include/clang/Driver/Types.def
index b889883125c4c1..f72c27e1ee7019 100644
--- a/clang/include/clang/Driver/Types.def
+++ b/clang/include/clang/Driver/Types.def
@@ -37,8 +37,10 @@
 // C family source language (with and without preprocessing).
 TYPE("cpp-output",   PP_C, INVALID, "i",  
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("c",C,PP_C,"c",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("cl",   CL,   PP_C,"cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("clcpp",CLCXX,PP_CXX,  "clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl",   CL,   PP_CL,   "cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl-cpp-output",PP_CL,INVALID, "cli",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
+TYPE("clcpp",CLCXX,PP_CLCXX,"clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("clcpp-cpp-output", PP_CLCXX, INVALID, "clii",   
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda-cpp-output",  PP_CUDA,  INVALID, "cui",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda", CUDA, PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
 TYPE("cuda", CUDA_DEVICE,  PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp
index 08df34ade7b653..a7b6b9000e1d2b 100644
--- a/clang/lib/Driver/Types.cpp
+++ b/clang/lib/Driver/Types.cpp
@@ -133,7 +133,7 @@ bool types::isAcceptedByClang(ID Id) {
 
   case TY_Asm:
   case TY_C: case TY_PP_C:
-  case TY_CL: case TY_CLCXX:
+  case TY_CL: case TY_PP_CL: case TY_CLCXX: case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA:
   case TY_CUDA_DEVICE:
   case TY_HIP:
@@ -181,7 +181,9 @@ bool types::isDerivedFromC(ID Id) {
   case TY_PP_C:
   case TY_C:
   case TY_CL:
+  case TY_PP_CL:
   case TY_CLCXX:
+  case TY_PP_CLCXX:
   case TY_PP_CUDA:
   case TY_CUDA:
   case TY_CUDA_DEVICE:
@@ -241,6 +243,7 @@ bool types::isCXX(ID Id) {
   case TY_PP_CXXHeaderUnit:
   case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader:
   case TY_CXXModule: case TY_PP_CXXModule:
+  case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE:
   case TY_HIP:
   case TY_PP_HIP:
@@ -310,7 +313,9 @@ types::ID types::lookupTypeForExtension(llvm::StringRef 
Ext) {
   .Case("cc", TY_CXX)
   .Case("CC", TY_CXX)
   .Case("cl", TY_CL)
+  .Case("cli", TY_PP_CL)
   .Case("clcpp", TY_CLCXX)
+  .Case("clii", TY_PP_CLCXX)
   .Case("cp", TY_CXX)
   .Case("cu", TY_CUDA)
   .Case("hh", TY_CXXHeader)
diff --git a/clang/test/Driver/opencl_aot_save_temps.cl 
b/clang/test/Driver/opencl_aot_save_temps.cl
new file mode 100644
index 00..7b3149871f8fc2
--- /dev/null
+++ b/clang/test/Driver/opencl_aot_save_temps.cl
@@ -0,0 +1,16 @@
+// RUN: %clang -x cl --save-temps -c -### %s 2>&1 | FileCheck %s
+// RUN: %clang -x cl -ccc-print-phases -c %s 2>&1 | FileCheck %s 
-check-prefix=CHECK-PHASES
+
+// CHECK: "-o" "[[CLI_NAME:.+]].cli" "-x" "cl"
+// CHECK-NEXT:  "-o" "[[CLI_NAME]].bc" "-x" 
"cl-cpp-output"{{.*}}"[[CLI_NAME:.+]].cli"
+
+// CHECK-PHASES: 0: input, {{.*}}, cl
+// CHECK-PHASES: 1: preprocessor, {0}, cl-cpp-output
+// CHECK-PHASES: 2: compiler, {1}, ir
+
+uint3 add(uint3 a, uint3 b) {

[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-23 Thread Shilei Tian via cfe-commits

https://github.com/shiltian updated 
https://github.com/llvm/llvm-project/pull/78333

>From 5eb2678a0a6a55c2d441b322d4eaaa8fe829a30f Mon Sep 17 00:00:00 2001
From: Shilei Tian 
Date: Tue, 23 Jan 2024 16:14:48 -0500
Subject: [PATCH] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation

We can directly call `clang -c -x cl -target amdgcn -mcpu=gfx90a test.cl -o 
test.o`
to compile an OpenCL kernel file. However, when `--save-temps` is enabled, it 
doesn't
work because the preprocessed file (`.i` file)  is taken as C source file when 
it
is fed to the front end, thus causing compilation error because those OpenCL 
keywords
can't be recognized. This patch fixes the issue.
---
 clang/include/clang/Driver/Types.def   |  6 --
 clang/lib/Driver/Types.cpp |  7 ++-
 clang/test/Driver/opencl_aot_save_temps.cl | 16 
 3 files changed, 26 insertions(+), 3 deletions(-)
 create mode 100644 clang/test/Driver/opencl_aot_save_temps.cl

diff --git a/clang/include/clang/Driver/Types.def 
b/clang/include/clang/Driver/Types.def
index b889883125c4c16..f72c27e1ee70193 100644
--- a/clang/include/clang/Driver/Types.def
+++ b/clang/include/clang/Driver/Types.def
@@ -37,8 +37,10 @@
 // C family source language (with and without preprocessing).
 TYPE("cpp-output",   PP_C, INVALID, "i",  
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("c",C,PP_C,"c",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("cl",   CL,   PP_C,"cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("clcpp",CLCXX,PP_CXX,  "clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl",   CL,   PP_CL,   "cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl-cpp-output",PP_CL,INVALID, "cli",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
+TYPE("clcpp",CLCXX,PP_CLCXX,"clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("clcpp-cpp-output", PP_CLCXX, INVALID, "clii",   
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda-cpp-output",  PP_CUDA,  INVALID, "cui",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda", CUDA, PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
 TYPE("cuda", CUDA_DEVICE,  PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp
index 08df34ade7b6530..a7b6b9000e1d2b1 100644
--- a/clang/lib/Driver/Types.cpp
+++ b/clang/lib/Driver/Types.cpp
@@ -133,7 +133,7 @@ bool types::isAcceptedByClang(ID Id) {
 
   case TY_Asm:
   case TY_C: case TY_PP_C:
-  case TY_CL: case TY_CLCXX:
+  case TY_CL: case TY_PP_CL: case TY_CLCXX: case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA:
   case TY_CUDA_DEVICE:
   case TY_HIP:
@@ -181,7 +181,9 @@ bool types::isDerivedFromC(ID Id) {
   case TY_PP_C:
   case TY_C:
   case TY_CL:
+  case TY_PP_CL:
   case TY_CLCXX:
+  case TY_PP_CLCXX:
   case TY_PP_CUDA:
   case TY_CUDA:
   case TY_CUDA_DEVICE:
@@ -241,6 +243,7 @@ bool types::isCXX(ID Id) {
   case TY_PP_CXXHeaderUnit:
   case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader:
   case TY_CXXModule: case TY_PP_CXXModule:
+  case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE:
   case TY_HIP:
   case TY_PP_HIP:
@@ -310,7 +313,9 @@ types::ID types::lookupTypeForExtension(llvm::StringRef 
Ext) {
   .Case("cc", TY_CXX)
   .Case("CC", TY_CXX)
   .Case("cl", TY_CL)
+  .Case("cli", TY_PP_CL)
   .Case("clcpp", TY_CLCXX)
+  .Case("clii", TY_PP_CLCXX)
   .Case("cp", TY_CXX)
   .Case("cu", TY_CUDA)
   .Case("hh", TY_CXXHeader)
diff --git a/clang/test/Driver/opencl_aot_save_temps.cl 
b/clang/test/Driver/opencl_aot_save_temps.cl
new file mode 100644
index 000..7b3149871f8fc2c
--- /dev/null
+++ b/clang/test/Driver/opencl_aot_save_temps.cl
@@ -0,0 +1,16 @@
+// RUN: %clang -x cl --save-temps -c -### %s 2>&1 | FileCheck %s
+// RUN: %clang -x cl -ccc-print-phases -c %s 2>&1 | FileCheck %s 
-check-prefix=CHECK-PHASES
+
+// CHECK: "-o" "[[CLI_NAME:.+]].cli" "-x" "cl"
+// CHECK-NEXT:  "-o" "[[CLI_NAME]].bc" "-x" 
"cl-cpp-output"{{.*}}"[[CLI_NAME:.+]].cli"
+
+// CHECK-PHASES: 0: input, {{.*}}, cl
+// CHECK-PHASES: 1: preprocessor, {0}, cl-cpp-output
+// CHECK-PHASES: 2: compiler, {1}, ir
+
+uint3 add(uint3 a, 

[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-23 Thread Shilei Tian via cfe-commits

https://github.com/shiltian updated 
https://github.com/llvm/llvm-project/pull/78333

>From 9ae3562ab4a6fb152c2a92f50b72d86711bbad8b Mon Sep 17 00:00:00 2001
From: Shilei Tian 
Date: Tue, 23 Jan 2024 12:35:42 -0500
Subject: [PATCH] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation

We can directly call `clang -c -x cl -target amdgcn -mcpu=gfx90a test.cl -o 
test.o`
to compile an OpenCL kernel file. However, when `--save-temps` is enabled, it 
doesn't
work because the preprocessed file (`.i` file)  is taken as C source file when 
it
is fed to the front end, thus causing compilation error because those OpenCL 
keywords
can't be recognized. This patch fixes the issue.
---
 clang/include/clang/Driver/Types.def   |  6 --
 clang/lib/Driver/Types.cpp |  7 ++-
 clang/test/Driver/opencl_aot_save_temps.cl | 19 +++
 3 files changed, 29 insertions(+), 3 deletions(-)
 create mode 100644 clang/test/Driver/opencl_aot_save_temps.cl

diff --git a/clang/include/clang/Driver/Types.def 
b/clang/include/clang/Driver/Types.def
index b889883125c4c1..f72c27e1ee7019 100644
--- a/clang/include/clang/Driver/Types.def
+++ b/clang/include/clang/Driver/Types.def
@@ -37,8 +37,10 @@
 // C family source language (with and without preprocessing).
 TYPE("cpp-output",   PP_C, INVALID, "i",  
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("c",C,PP_C,"c",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("cl",   CL,   PP_C,"cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("clcpp",CLCXX,PP_CXX,  "clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl",   CL,   PP_CL,   "cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl-cpp-output",PP_CL,INVALID, "cli",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
+TYPE("clcpp",CLCXX,PP_CLCXX,"clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("clcpp-cpp-output", PP_CLCXX, INVALID, "clii",   
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda-cpp-output",  PP_CUDA,  INVALID, "cui",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda", CUDA, PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
 TYPE("cuda", CUDA_DEVICE,  PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp
index 08df34ade7b653..a7b6b9000e1d2b 100644
--- a/clang/lib/Driver/Types.cpp
+++ b/clang/lib/Driver/Types.cpp
@@ -133,7 +133,7 @@ bool types::isAcceptedByClang(ID Id) {
 
   case TY_Asm:
   case TY_C: case TY_PP_C:
-  case TY_CL: case TY_CLCXX:
+  case TY_CL: case TY_PP_CL: case TY_CLCXX: case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA:
   case TY_CUDA_DEVICE:
   case TY_HIP:
@@ -181,7 +181,9 @@ bool types::isDerivedFromC(ID Id) {
   case TY_PP_C:
   case TY_C:
   case TY_CL:
+  case TY_PP_CL:
   case TY_CLCXX:
+  case TY_PP_CLCXX:
   case TY_PP_CUDA:
   case TY_CUDA:
   case TY_CUDA_DEVICE:
@@ -241,6 +243,7 @@ bool types::isCXX(ID Id) {
   case TY_PP_CXXHeaderUnit:
   case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader:
   case TY_CXXModule: case TY_PP_CXXModule:
+  case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE:
   case TY_HIP:
   case TY_PP_HIP:
@@ -310,7 +313,9 @@ types::ID types::lookupTypeForExtension(llvm::StringRef 
Ext) {
   .Case("cc", TY_CXX)
   .Case("CC", TY_CXX)
   .Case("cl", TY_CL)
+  .Case("cli", TY_PP_CL)
   .Case("clcpp", TY_CLCXX)
+  .Case("clii", TY_PP_CLCXX)
   .Case("cp", TY_CXX)
   .Case("cu", TY_CUDA)
   .Case("hh", TY_CXXHeader)
diff --git a/clang/test/Driver/opencl_aot_save_temps.cl 
b/clang/test/Driver/opencl_aot_save_temps.cl
new file mode 100644
index 00..b78014ca617b9a
--- /dev/null
+++ b/clang/test/Driver/opencl_aot_save_temps.cl
@@ -0,0 +1,19 @@
+// RUN: %clang -x cl --save-temps -c -### %s 2>&1 | FileCheck %s
+// RUN: %clang -x cl -ccc-print-phases -c %s 2>&1 | FileCheck %s 
-check-prefix=CHECK-PHASES
+
+// CHECK: "-o" "[[CLI_NAME:.+]].cli" "-x" "cl"
+// CHECK-NEXT:  "-o" "[[CLI_NAME]].bc" "-x" 
"cl-cpp-output"{{.*}}"[[CLI_NAME:.+]].cli"
+
+// CHECK-PHASES: 0: input, {{.*}}, cl
+// CHECK-PHASES: 1: preprocessor, {0}, cl-cpp-output
+// CHECK-PHASES: 2: compiler, {1}, ir
+// CHECK-PHASES: 3: 

[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-23 Thread Joseph Huber via cfe-commits

https://github.com/jhuber6 approved this pull request.


https://github.com/llvm/llvm-project/pull/78333
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-23 Thread Shilei Tian via cfe-commits

https://github.com/shiltian updated 
https://github.com/llvm/llvm-project/pull/78333

>From 6770e41a1bf1b2595f162a09c81760314e5061b2 Mon Sep 17 00:00:00 2001
From: Shilei Tian 
Date: Tue, 23 Jan 2024 09:27:38 -0500
Subject: [PATCH] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation

We can directly call `clang -c -x cl -target amdgcn -mcpu=gfx90a test.cl -o 
test.o`
to compile an OpenCL kernel file. However, when `--save-temps` is enabled, it 
doesn't
work because the preprocessed file (`.i` file)  is taken as C source file when 
it
is fed to the front end, thus causing compilation error because those OpenCL 
keywords
can't be recognized. This patch fixes the issue.
---
 clang/include/clang/Driver/Types.def   |  6 --
 clang/lib/Driver/Types.cpp |  7 ++-
 clang/test/Driver/opencl_aot_save_temps.cl | 19 +++
 3 files changed, 29 insertions(+), 3 deletions(-)
 create mode 100644 clang/test/Driver/opencl_aot_save_temps.cl

diff --git a/clang/include/clang/Driver/Types.def 
b/clang/include/clang/Driver/Types.def
index b889883125c4c1..f72c27e1ee7019 100644
--- a/clang/include/clang/Driver/Types.def
+++ b/clang/include/clang/Driver/Types.def
@@ -37,8 +37,10 @@
 // C family source language (with and without preprocessing).
 TYPE("cpp-output",   PP_C, INVALID, "i",  
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("c",C,PP_C,"c",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("cl",   CL,   PP_C,"cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("clcpp",CLCXX,PP_CXX,  "clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl",   CL,   PP_CL,   "cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl-cpp-output",PP_CL,INVALID, "cli",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
+TYPE("clcpp",CLCXX,PP_CLCXX,"clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("clcpp-cpp-output", PP_CLCXX, INVALID, "clii",   
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda-cpp-output",  PP_CUDA,  INVALID, "cui",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda", CUDA, PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
 TYPE("cuda", CUDA_DEVICE,  PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp
index 08df34ade7b653..a7b6b9000e1d2b 100644
--- a/clang/lib/Driver/Types.cpp
+++ b/clang/lib/Driver/Types.cpp
@@ -133,7 +133,7 @@ bool types::isAcceptedByClang(ID Id) {
 
   case TY_Asm:
   case TY_C: case TY_PP_C:
-  case TY_CL: case TY_CLCXX:
+  case TY_CL: case TY_PP_CL: case TY_CLCXX: case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA:
   case TY_CUDA_DEVICE:
   case TY_HIP:
@@ -181,7 +181,9 @@ bool types::isDerivedFromC(ID Id) {
   case TY_PP_C:
   case TY_C:
   case TY_CL:
+  case TY_PP_CL:
   case TY_CLCXX:
+  case TY_PP_CLCXX:
   case TY_PP_CUDA:
   case TY_CUDA:
   case TY_CUDA_DEVICE:
@@ -241,6 +243,7 @@ bool types::isCXX(ID Id) {
   case TY_PP_CXXHeaderUnit:
   case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader:
   case TY_CXXModule: case TY_PP_CXXModule:
+  case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE:
   case TY_HIP:
   case TY_PP_HIP:
@@ -310,7 +313,9 @@ types::ID types::lookupTypeForExtension(llvm::StringRef 
Ext) {
   .Case("cc", TY_CXX)
   .Case("CC", TY_CXX)
   .Case("cl", TY_CL)
+  .Case("cli", TY_PP_CL)
   .Case("clcpp", TY_CLCXX)
+  .Case("clii", TY_PP_CLCXX)
   .Case("cp", TY_CXX)
   .Case("cu", TY_CUDA)
   .Case("hh", TY_CXXHeader)
diff --git a/clang/test/Driver/opencl_aot_save_temps.cl 
b/clang/test/Driver/opencl_aot_save_temps.cl
new file mode 100644
index 00..6967a7ba412638
--- /dev/null
+++ b/clang/test/Driver/opencl_aot_save_temps.cl
@@ -0,0 +1,19 @@
+// RUN: %clang -x cl --save-temps -c -### %s 2>&1 | FileCheck %s
+// RUN: %clang -x cl -ccc-print-phases --save-temps -c %s 2>&1 | FileCheck %s 
-check-prefix=CHECK-PHASES
+
+// CHECK: "-o" "[[CLI_NAME:.+]].cli" "-x" "cl"
+// CHECK-NEXT:  "-o" "[[CLI_NAME]].bc" "-x" 
"cl-cpp-output"{{.*}}"[[CLI_NAME:.+]].cli"
+
+// CHECK-PHASES: 0: input, {{.*}}, cl
+// CHECK-PHASES: 1: preprocessor, {0}, cl-cpp-output
+// CHECK-PHASES: 2: compiler, {1}, ir
+// 

[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-22 Thread Shilei Tian via cfe-commits

https://github.com/shiltian updated 
https://github.com/llvm/llvm-project/pull/78333

>From 2fb901b2379290b162647f0b6d152b93df1b1e7f Mon Sep 17 00:00:00 2001
From: Shilei Tian 
Date: Mon, 22 Jan 2024 15:39:19 -0500
Subject: [PATCH] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation

We can directly call `clang -c -x cl -target amdgcn -mcpu=gfx90a test.cl -o 
test.o`
to compile an OpenCL kernel file. However, when `--save-temps` is enabled, it 
doesn't
work because the preprocessed file (`.i` file)  is taken as C source file when 
it
is fed to the front end, thus causing compilation error because those OpenCL 
keywords
can't be recognized. This patch fixes the issue.
---
 clang/include/clang/Driver/Types.def   |  6 --
 clang/lib/Driver/Types.cpp |  7 ++-
 clang/test/Driver/opencl_aot_save_temps.cl | 11 +++
 3 files changed, 21 insertions(+), 3 deletions(-)
 create mode 100644 clang/test/Driver/opencl_aot_save_temps.cl

diff --git a/clang/include/clang/Driver/Types.def 
b/clang/include/clang/Driver/Types.def
index b889883125c4c16..f72c27e1ee70193 100644
--- a/clang/include/clang/Driver/Types.def
+++ b/clang/include/clang/Driver/Types.def
@@ -37,8 +37,10 @@
 // C family source language (with and without preprocessing).
 TYPE("cpp-output",   PP_C, INVALID, "i",  
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("c",C,PP_C,"c",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("cl",   CL,   PP_C,"cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("clcpp",CLCXX,PP_CXX,  "clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl",   CL,   PP_CL,   "cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl-cpp-output",PP_CL,INVALID, "cli",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
+TYPE("clcpp",CLCXX,PP_CLCXX,"clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("clcpp-cpp-output", PP_CLCXX, INVALID, "clii",   
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda-cpp-output",  PP_CUDA,  INVALID, "cui",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda", CUDA, PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
 TYPE("cuda", CUDA_DEVICE,  PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp
index 08df34ade7b6530..a7b6b9000e1d2b1 100644
--- a/clang/lib/Driver/Types.cpp
+++ b/clang/lib/Driver/Types.cpp
@@ -133,7 +133,7 @@ bool types::isAcceptedByClang(ID Id) {
 
   case TY_Asm:
   case TY_C: case TY_PP_C:
-  case TY_CL: case TY_CLCXX:
+  case TY_CL: case TY_PP_CL: case TY_CLCXX: case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA:
   case TY_CUDA_DEVICE:
   case TY_HIP:
@@ -181,7 +181,9 @@ bool types::isDerivedFromC(ID Id) {
   case TY_PP_C:
   case TY_C:
   case TY_CL:
+  case TY_PP_CL:
   case TY_CLCXX:
+  case TY_PP_CLCXX:
   case TY_PP_CUDA:
   case TY_CUDA:
   case TY_CUDA_DEVICE:
@@ -241,6 +243,7 @@ bool types::isCXX(ID Id) {
   case TY_PP_CXXHeaderUnit:
   case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader:
   case TY_CXXModule: case TY_PP_CXXModule:
+  case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE:
   case TY_HIP:
   case TY_PP_HIP:
@@ -310,7 +313,9 @@ types::ID types::lookupTypeForExtension(llvm::StringRef 
Ext) {
   .Case("cc", TY_CXX)
   .Case("CC", TY_CXX)
   .Case("cl", TY_CL)
+  .Case("cli", TY_PP_CL)
   .Case("clcpp", TY_CLCXX)
+  .Case("clii", TY_PP_CLCXX)
   .Case("cp", TY_CXX)
   .Case("cu", TY_CUDA)
   .Case("hh", TY_CXXHeader)
diff --git a/clang/test/Driver/opencl_aot_save_temps.cl 
b/clang/test/Driver/opencl_aot_save_temps.cl
new file mode 100644
index 000..4e7a8fdb314822a
--- /dev/null
+++ b/clang/test/Driver/opencl_aot_save_temps.cl
@@ -0,0 +1,11 @@
+// RUN: %clang -x cl --save-temps -c -### %s 2>&1 | FileCheck %s
+
+// CHECK: "-o" "[[CLI_NAME:.+]].cli" "-x" "cl"
+// CHECK-NEXT:  "-o" "[[CLI_NAME]].bc" "-x" 
"cl-cpp-output"{{.*}}"[[CLI_NAME:.+]].cli"
+
+uint3 add(uint3 a, uint3 b) {
+  ulong x = a.x + (ulong)b.x;
+  ulong y = a.y + (ulong)b.y + (x >> 32);
+  uint z = a.z + b.z + (y >> 32);
+  return (uint3)(x, y, z);
+}

___
cfe-commits mailing list

[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-22 Thread Joseph Huber via cfe-commits

https://github.com/jhuber6 edited 
https://github.com/llvm/llvm-project/pull/78333
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-22 Thread Joseph Huber via cfe-commits

https://github.com/jhuber6 commented:

You should add a test that checks the output of `-ccc-print-phases` and 
`-ccc-print-bindings`.

https://github.com/llvm/llvm-project/pull/78333
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-22 Thread Yaxun Liu via cfe-commits

https://github.com/yxsamliu approved this pull request.


https://github.com/llvm/llvm-project/pull/78333
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-19 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang

Author: Shilei Tian (shiltian)


Changes

We can directly call `clang -c -x cl -target amdgcn -mcpu=gfx90a test.cl -o 
test.o`
to compile an OpenCL kernel file. However, when `--save-temps` is enabled, it 
doesn't
work because the preprocessed file (`.i` file)  is taken as C source file when 
it
is fed to the front end, thus causing compilation error because those OpenCL 
keywords
can't be recognized. This patch fixes the issue.


---
Full diff: https://github.com/llvm/llvm-project/pull/78333.diff


3 Files Affected:

- (modified) clang/include/clang/Driver/Types.def (+4-2) 
- (modified) clang/lib/Driver/Types.cpp (+6-1) 
- (added) clang/test/Driver/opencl_aot_save_temps.cl (+9) 


``diff
diff --git a/clang/include/clang/Driver/Types.def 
b/clang/include/clang/Driver/Types.def
index b889883125c4c16..f72c27e1ee70193 100644
--- a/clang/include/clang/Driver/Types.def
+++ b/clang/include/clang/Driver/Types.def
@@ -37,8 +37,10 @@
 // C family source language (with and without preprocessing).
 TYPE("cpp-output",   PP_C, INVALID, "i",  
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("c",C,PP_C,"c",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("cl",   CL,   PP_C,"cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("clcpp",CLCXX,PP_CXX,  "clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl",   CL,   PP_CL,   "cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl-cpp-output",PP_CL,INVALID, "cli",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
+TYPE("clcpp",CLCXX,PP_CLCXX,"clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("clcpp-cpp-output", PP_CLCXX, INVALID, "clii",   
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda-cpp-output",  PP_CUDA,  INVALID, "cui",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda", CUDA, PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
 TYPE("cuda", CUDA_DEVICE,  PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp
index 08df34ade7b6530..a7b6b9000e1d2b1 100644
--- a/clang/lib/Driver/Types.cpp
+++ b/clang/lib/Driver/Types.cpp
@@ -133,7 +133,7 @@ bool types::isAcceptedByClang(ID Id) {
 
   case TY_Asm:
   case TY_C: case TY_PP_C:
-  case TY_CL: case TY_CLCXX:
+  case TY_CL: case TY_PP_CL: case TY_CLCXX: case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA:
   case TY_CUDA_DEVICE:
   case TY_HIP:
@@ -181,7 +181,9 @@ bool types::isDerivedFromC(ID Id) {
   case TY_PP_C:
   case TY_C:
   case TY_CL:
+  case TY_PP_CL:
   case TY_CLCXX:
+  case TY_PP_CLCXX:
   case TY_PP_CUDA:
   case TY_CUDA:
   case TY_CUDA_DEVICE:
@@ -241,6 +243,7 @@ bool types::isCXX(ID Id) {
   case TY_PP_CXXHeaderUnit:
   case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader:
   case TY_CXXModule: case TY_PP_CXXModule:
+  case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE:
   case TY_HIP:
   case TY_PP_HIP:
@@ -310,7 +313,9 @@ types::ID types::lookupTypeForExtension(llvm::StringRef 
Ext) {
   .Case("cc", TY_CXX)
   .Case("CC", TY_CXX)
   .Case("cl", TY_CL)
+  .Case("cli", TY_PP_CL)
   .Case("clcpp", TY_CLCXX)
+  .Case("clii", TY_PP_CLCXX)
   .Case("cp", TY_CXX)
   .Case("cu", TY_CUDA)
   .Case("hh", TY_CXXHeader)
diff --git a/clang/test/Driver/opencl_aot_save_temps.cl 
b/clang/test/Driver/opencl_aot_save_temps.cl
new file mode 100644
index 000..d858992eb59b789
--- /dev/null
+++ b/clang/test/Driver/opencl_aot_save_temps.cl
@@ -0,0 +1,9 @@
+// RUN: %clang -x cl -c %s
+// RUN: %clang -x cl --save-temps -c %s
+
+uint3 add(uint3 a, uint3 b) {
+  ulong x = a.x + (ulong)b.x;
+  ulong y = a.y + (ulong)b.y + (x >> 32);
+  uint z = a.z + b.z + (y >> 32);
+  return (uint3)(x, y, z);
+}

``




https://github.com/llvm/llvm-project/pull/78333
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-19 Thread Shilei Tian via cfe-commits

https://github.com/shiltian ready_for_review 
https://github.com/llvm/llvm-project/pull/78333
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-19 Thread Shilei Tian via cfe-commits

https://github.com/shiltian updated 
https://github.com/llvm/llvm-project/pull/78333

>From 837a9fd2c1fac7dcdf2c8538e6634eccf36ee7b6 Mon Sep 17 00:00:00 2001
From: Shilei Tian 
Date: Fri, 19 Jan 2024 23:46:54 -0500
Subject: [PATCH] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation

We can directly call `clang -c -x cl -target amdgcn -mcpu=gfx90a test.cl -o 
test.o`
to compile an OpenCL kernel file. However, when `--save-temps` is enabled, it 
doesn't
work because the preprocessed file (`.i` file)  is taken as C source file when 
it
is fed to the front end, thus causing compilation error because those OpenCL 
keywords
can't be recognized. This patch fixes the issue.
---
 clang/include/clang/Driver/Types.def   | 6 --
 clang/lib/Driver/Types.cpp | 7 ++-
 clang/test/Driver/opencl_aot_save_temps.cl | 9 +
 3 files changed, 19 insertions(+), 3 deletions(-)
 create mode 100644 clang/test/Driver/opencl_aot_save_temps.cl

diff --git a/clang/include/clang/Driver/Types.def 
b/clang/include/clang/Driver/Types.def
index b889883125c4c16..f72c27e1ee70193 100644
--- a/clang/include/clang/Driver/Types.def
+++ b/clang/include/clang/Driver/Types.def
@@ -37,8 +37,10 @@
 // C family source language (with and without preprocessing).
 TYPE("cpp-output",   PP_C, INVALID, "i",  
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("c",C,PP_C,"c",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("cl",   CL,   PP_C,"cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("clcpp",CLCXX,PP_CXX,  "clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl",   CL,   PP_CL,   "cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl-cpp-output",PP_CL,INVALID, "cli",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
+TYPE("clcpp",CLCXX,PP_CLCXX,"clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("clcpp-cpp-output", PP_CLCXX, INVALID, "clii",   
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda-cpp-output",  PP_CUDA,  INVALID, "cui",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda", CUDA, PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
 TYPE("cuda", CUDA_DEVICE,  PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp
index 08df34ade7b6530..a7b6b9000e1d2b1 100644
--- a/clang/lib/Driver/Types.cpp
+++ b/clang/lib/Driver/Types.cpp
@@ -133,7 +133,7 @@ bool types::isAcceptedByClang(ID Id) {
 
   case TY_Asm:
   case TY_C: case TY_PP_C:
-  case TY_CL: case TY_CLCXX:
+  case TY_CL: case TY_PP_CL: case TY_CLCXX: case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA:
   case TY_CUDA_DEVICE:
   case TY_HIP:
@@ -181,7 +181,9 @@ bool types::isDerivedFromC(ID Id) {
   case TY_PP_C:
   case TY_C:
   case TY_CL:
+  case TY_PP_CL:
   case TY_CLCXX:
+  case TY_PP_CLCXX:
   case TY_PP_CUDA:
   case TY_CUDA:
   case TY_CUDA_DEVICE:
@@ -241,6 +243,7 @@ bool types::isCXX(ID Id) {
   case TY_PP_CXXHeaderUnit:
   case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader:
   case TY_CXXModule: case TY_PP_CXXModule:
+  case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE:
   case TY_HIP:
   case TY_PP_HIP:
@@ -310,7 +313,9 @@ types::ID types::lookupTypeForExtension(llvm::StringRef 
Ext) {
   .Case("cc", TY_CXX)
   .Case("CC", TY_CXX)
   .Case("cl", TY_CL)
+  .Case("cli", TY_PP_CL)
   .Case("clcpp", TY_CLCXX)
+  .Case("clii", TY_PP_CLCXX)
   .Case("cp", TY_CXX)
   .Case("cu", TY_CUDA)
   .Case("hh", TY_CXXHeader)
diff --git a/clang/test/Driver/opencl_aot_save_temps.cl 
b/clang/test/Driver/opencl_aot_save_temps.cl
new file mode 100644
index 000..d858992eb59b789
--- /dev/null
+++ b/clang/test/Driver/opencl_aot_save_temps.cl
@@ -0,0 +1,9 @@
+// RUN: %clang -x cl -c %s
+// RUN: %clang -x cl --save-temps -c %s
+
+uint3 add(uint3 a, uint3 b) {
+  ulong x = a.x + (ulong)b.x;
+  ulong y = a.y + (ulong)b.y + (x >> 32);
+  uint z = a.z + b.z + (y >> 32);
+  return (uint3)(x, y, z);
+}

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-16 Thread Shilei Tian via cfe-commits

shiltian wrote:

I'm working on a test case.

https://github.com/llvm/llvm-project/pull/78333
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-16 Thread via cfe-commits

github-actions[bot] wrote:




:warning: C/C++ code formatter, clang-format found issues in your code. 
:warning:



You can test this locally with the following command:


``bash
git-clang-format --diff da6806dcb45d311efceaba0d770d9027d68a0de9 
9fa50ffb330ef9b77eac6f7b63be5b91dd153e85 -- clang/lib/Driver/Types.cpp
``





View the diff from clang-format here.


``diff
diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp
index a7b6b9000e..fc6ccf103b 100644
--- a/clang/lib/Driver/Types.cpp
+++ b/clang/lib/Driver/Types.cpp
@@ -133,7 +133,10 @@ bool types::isAcceptedByClang(ID Id) {
 
   case TY_Asm:
   case TY_C: case TY_PP_C:
-  case TY_CL: case TY_PP_CL: case TY_CLCXX: case TY_PP_CLCXX:
+  case TY_CL:
+  case TY_PP_CL:
+  case TY_CLCXX:
+  case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA:
   case TY_CUDA_DEVICE:
   case TY_HIP:

``




https://github.com/llvm/llvm-project/pull/78333
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation (PR #78333)

2024-01-16 Thread Shilei Tian via cfe-commits

https://github.com/shiltian created 
https://github.com/llvm/llvm-project/pull/78333

We can directly call `clang -c -x cl -target amdgcn -mcpu=gfx90a test.cl -o 
test.o`
to compile an OpenCL kernel file. However, when `--save-temps` is enabled, it 
doesn't
work because the preprocessed file (`.i` file)  is taken as C source file when 
it
is fed to the front end, thus causing compilation error because those OpenCL 
keywords
can't be recognized. This patch fixes the issue.


>From 9fa50ffb330ef9b77eac6f7b63be5b91dd153e85 Mon Sep 17 00:00:00 2001
From: Shilei Tian 
Date: Tue, 16 Jan 2024 14:29:21 -0500
Subject: [PATCH] [Clang][Driver] Fix `--save-temps` for OpenCL AoT compilation

We can directly call `clang -c -x cl -target amdgcn -mcpu=gfx90a test.cl -o 
test.o`
to compile an OpenCL kernel file. However, when `--save-temps` is enabled, it 
doesn't
work because the preprocessed file (`.i` file)  is taken as C source file when 
it
is fed to the front end, thus causing compilation error because those OpenCL 
keywords
can't be recognized. This patch fixes the issue.
---
 clang/include/clang/Driver/Types.def | 6 --
 clang/lib/Driver/Types.cpp   | 7 ++-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/clang/include/clang/Driver/Types.def 
b/clang/include/clang/Driver/Types.def
index b889883125c4c1..f72c27e1ee7019 100644
--- a/clang/include/clang/Driver/Types.def
+++ b/clang/include/clang/Driver/Types.def
@@ -37,8 +37,10 @@
 // C family source language (with and without preprocessing).
 TYPE("cpp-output",   PP_C, INVALID, "i",  
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("c",C,PP_C,"c",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("cl",   CL,   PP_C,"cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
-TYPE("clcpp",CLCXX,PP_CXX,  "clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl",   CL,   PP_CL,   "cl", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("cl-cpp-output",PP_CL,INVALID, "cli",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
+TYPE("clcpp",CLCXX,PP_CLCXX,"clcpp",  
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
+TYPE("clcpp-cpp-output", PP_CLCXX, INVALID, "clii",   
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda-cpp-output",  PP_CUDA,  INVALID, "cui",
phases::Compile, phases::Backend, phases::Assemble, phases::Link)
 TYPE("cuda", CUDA, PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
 TYPE("cuda", CUDA_DEVICE,  PP_CUDA, "cu", 
phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, 
phases::Link)
diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp
index 08df34ade7b653..a7b6b9000e1d2b 100644
--- a/clang/lib/Driver/Types.cpp
+++ b/clang/lib/Driver/Types.cpp
@@ -133,7 +133,7 @@ bool types::isAcceptedByClang(ID Id) {
 
   case TY_Asm:
   case TY_C: case TY_PP_C:
-  case TY_CL: case TY_CLCXX:
+  case TY_CL: case TY_PP_CL: case TY_CLCXX: case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA:
   case TY_CUDA_DEVICE:
   case TY_HIP:
@@ -181,7 +181,9 @@ bool types::isDerivedFromC(ID Id) {
   case TY_PP_C:
   case TY_C:
   case TY_CL:
+  case TY_PP_CL:
   case TY_CLCXX:
+  case TY_PP_CLCXX:
   case TY_PP_CUDA:
   case TY_CUDA:
   case TY_CUDA_DEVICE:
@@ -241,6 +243,7 @@ bool types::isCXX(ID Id) {
   case TY_PP_CXXHeaderUnit:
   case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader:
   case TY_CXXModule: case TY_PP_CXXModule:
+  case TY_PP_CLCXX:
   case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE:
   case TY_HIP:
   case TY_PP_HIP:
@@ -310,7 +313,9 @@ types::ID types::lookupTypeForExtension(llvm::StringRef 
Ext) {
   .Case("cc", TY_CXX)
   .Case("CC", TY_CXX)
   .Case("cl", TY_CL)
+  .Case("cli", TY_PP_CL)
   .Case("clcpp", TY_CLCXX)
+  .Case("clii", TY_PP_CLCXX)
   .Case("cp", TY_CXX)
   .Case("cu", TY_CUDA)
   .Case("hh", TY_CXXHeader)

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits