]> granicus.if.org Git - clang/commitdiff
Driver, Frontend: add CUDA language support
authorPeter Collingbourne <peter@pcc.me.uk>
Wed, 1 Dec 2010 03:15:20 +0000 (03:15 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Wed, 1 Dec 2010 03:15:20 +0000 (03:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120544 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Types.def
include/clang/Frontend/FrontendAction.h
include/clang/Frontend/LangStandards.def
lib/Driver/Types.cpp
lib/Frontend/CompilerInvocation.cpp
lib/Frontend/FrontendActions.cpp
lib/Frontend/FrontendOptions.cpp

index 06a8690ce8330ccddab8e01d1aedaef421ee3456..f09a1dcaf26f3401f4c4c7b2a1139090c02af707 100644 (file)
@@ -42,6 +42,7 @@
 TYPE("cpp-output",               PP_C,         INVALID,         "i",     "u")
 TYPE("c",                        C,            PP_C,            0,       "u")
 TYPE("cl",                       CL,           PP_C,            0,       "u")
+TYPE("cuda",                     CUDA,         PP_CXX,          0,       "u")
 TYPE("objective-c-cpp-output",   PP_ObjC,      INVALID,         "mi",    "u")
 TYPE("objective-c",              ObjC,         PP_ObjC,         0,       "u")
 TYPE("c++-cpp-output",           PP_CXX,       INVALID,         "ii",    "u")
index f659b2f42e91896913f200e9dff1a3c62d783edb..e3551d7749f85d2f18a02b4df5efa0953b9d978d 100644 (file)
@@ -37,6 +37,7 @@ enum InputKind {
   IK_PreprocessedObjC,
   IK_PreprocessedObjCXX,
   IK_OpenCL,
+  IK_CUDA,
   IK_AST,
   IK_LLVM_IR
 };
index 52aa4636084d313d978a58aa643c35673b2f4d60..d4046b3e56680903c96e521dfbfaa0ecd6fb9895 100644 (file)
@@ -80,4 +80,9 @@ LANGSTANDARD(opencl, "cl",
              "OpenCL 1.0",
              BCPLComment | C99 | Digraphs | HexFloat)
 
+// CUDA
+LANGSTANDARD(cuda, "cuda",
+             "NVIDIA CUDA(tm)",
+             BCPLComment | CPlusPlus | Digraphs)
+
 #undef LANGSTANDARD
index 3c07cf2898af7e5a1295d2a42135a078507046c0..c677149a76ae06a1c7d4c726228265fd4093f5f1 100644 (file)
@@ -78,6 +78,7 @@ bool types::isAcceptedByClang(ID Id) {
   case TY_Asm:
   case TY_C: case TY_PP_C:
   case TY_CL:
+  case TY_CUDA:
   case TY_ObjC: case TY_PP_ObjC:
   case TY_CXX: case TY_PP_CXX:
   case TY_ObjCXX: case TY_PP_ObjCXX:
@@ -151,6 +152,7 @@ types::ID types::lookupTypeForExtension(const char *Ext) {
            .Case("CC", TY_CXX)
            .Case("cl", TY_CL)
            .Case("cp", TY_CXX)
+           .Case("cu", TY_CUDA)
            .Case("hh", TY_CXXHeader)
            .Case("ll", TY_LLVM_IR)
            .Case("hpp", TY_CXXHeader)
index c00ffc88a6d9ebb4b06c49091fbac112a1424fc1..fcefad7b3e3b2672c89c674db8c542e9951a978e 100644 (file)
@@ -302,6 +302,7 @@ static const char *getInputKindName(InputKind Kind) {
   case IK_ObjC:              return "objective-c";
   case IK_ObjCXX:            return "objective-c++";
   case IK_OpenCL:            return "cl";
+  case IK_CUDA:              return "cuda";
   case IK_PreprocessedC:     return "cpp-output";
   case IK_PreprocessedCXX:   return "c++-cpp-output";
   case IK_PreprocessedObjC:  return "objective-c-cpp-output";
@@ -1113,6 +1114,7 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,
       .Case("cl", IK_OpenCL)
       .Case("c", IK_C)
       .Case("cl", IK_OpenCL)
+      .Case("cuda", IK_CUDA)
       .Case("c++", IK_CXX)
       .Case("objective-c", IK_ObjC)
       .Case("objective-c++", IK_ObjCXX)
@@ -1254,6 +1256,9 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
     case IK_OpenCL:
       LangStd = LangStandard::lang_opencl;
       break;
+    case IK_CUDA:
+      LangStd = LangStandard::lang_cuda;
+      break;
     case IK_Asm:
     case IK_C:
     case IK_PreprocessedC:
@@ -1289,6 +1294,9 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
     Opts.LaxVectorConversions = 1;
   }
 
+  if (LangStd == LangStandard::lang_cuda)
+    Opts.CUDA = 1;
+
   // OpenCL and C++ both have bool, true, false keywords.
   Opts.Bool = Opts.OpenCL || Opts.CPlusPlus;
 
index 0ffc06a47720ea23575a3d2c3c000cdc2b2e0723..eb7152cb4741078bd6e076e9a58029bbe85144b1 100644 (file)
@@ -204,6 +204,7 @@ void PrintPreambleAction::ExecuteAction() {
   case IK_ObjC:
   case IK_ObjCXX:
   case IK_OpenCL:
+  case IK_CUDA:
     break;
       
   case IK_None:
index 9dfee244ea36348dfb6afb4a7ec712439c8f0c83..0a2005192a19a7163f1b66840b89f0297ee44e49 100644 (file)
@@ -26,6 +26,7 @@ InputKind FrontendOptions::getInputKindForExtension(llvm::StringRef Extension) {
     .Cases("C", "cc", "cp", IK_CXX)
     .Cases("cpp", "CPP", "c++", "cxx", "hpp", IK_CXX)
     .Case("cl", IK_OpenCL)
+    .Case("cu", IK_CUDA)
     .Cases("ll", "bc", IK_LLVM_IR)
     .Default(IK_C);
 }