Move target specific builtin IDs to TargetBuiltins.h so that they can be used by CGBuiltin.cpp

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44748 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CGBuiltin.cpp b/CodeGen/CGBuiltin.cpp
index 7f3bd0a..bb32b9a 100644
--- a/CodeGen/CGBuiltin.cpp
+++ b/CodeGen/CGBuiltin.cpp
@@ -17,6 +17,7 @@
 #include "clang/AST/ASTContext.h"
 #include "clang/AST/Builtins.h"
 #include "clang/AST/Expr.h"
+#include "clang/AST/TargetBuiltins.h"
 #include "llvm/Constants.h"
 #include "llvm/Function.h"
 #include "llvm/Intrinsics.h"
@@ -79,16 +80,18 @@
       
       return RValue::get(V);
     }
+
+    // See if we have a target specific builtin that needs to be lowered.
+    llvm::Value *V = 0;
     
-    if (strcmp(TargetPrefix, "x86") == 0) {
-      if (strcmp(BuiltinName, "__builtin_ia32_mulps") == 0) {
-        llvm::Value *V = Builder.CreateMul(EmitScalarExpr(E->getArg(0)),
-                                           EmitScalarExpr(E->getArg(1)),
-                                           "result");
-        return RValue::get(V);
-      }
-    }
-      
+    if (strcmp(TargetPrefix, "x86") == 0)
+      V = EmitX86BuiltinExpr(BuiltinID, E);
+    else if (strcmp(TargetPrefix, "ppc") == 0)
+      V = EmitPPCBuiltinExpr(BuiltinID, E);
+
+    if (V)
+      return RValue::get(V);
+    
     WarnUnsupported(E, "builtin function");
 
     // Unknown builtin, for now just dump it out and return undef.
@@ -188,8 +191,26 @@
     llvm::Value *V = llvm::ConstantFP::get(llvm::Type::DoubleTy, f);
     return RValue::get(V);
   }
-    
   }
-  
   return RValue::get(0);
 }
+
+llvm::Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, 
+                                                 const CallExpr *E)
+{
+  switch (BuiltinID) {
+    default: return 0;
+    case X86::BI__builtin_ia32_mulps:
+      return Builder.CreateMul(EmitScalarExpr(E->getArg(0)),
+                               EmitScalarExpr(E->getArg(1)),
+                               "result");
+  }
+}
+
+llvm::Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID, 
+                                                 const CallExpr *E)
+{
+  switch (BuiltinID) {
+    default: return 0;
+  }
+}  
diff --git a/CodeGen/CodeGenFunction.h b/CodeGen/CodeGenFunction.h
index 0c66b50..6ae256d 100644
--- a/CodeGen/CodeGenFunction.h
+++ b/CodeGen/CodeGenFunction.h
@@ -388,6 +388,9 @@
   RValue EmitCallExpr(llvm::Value *Callee, const CallExpr *E);
   RValue EmitBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
 
+  llvm::Value *EmitX86BuiltinExpr(unsigned BuiltinID, const CallExpr *E);
+  llvm::Value *EmitPPCBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
+  
   llvm::Value *EmitObjCStringLiteral(const ObjCStringLiteral *E);
 
   //===--------------------------------------------------------------------===//
diff --git a/Driver/Targets.cpp b/Driver/Targets.cpp
index 4000908..a809b94 100644
--- a/Driver/Targets.cpp
+++ b/Driver/Targets.cpp
@@ -14,8 +14,10 @@
 
 #include "clang.h"
 #include "clang/AST/Builtins.h"
+#include "clang/AST/TargetBuiltins.h"
 #include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/TargetInfo.h"
+
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/Support/CommandLine.h"
 
@@ -298,16 +300,10 @@
 
 /// PPC builtin info.
 namespace PPC {
-  enum {
-    LastTIBuiltin = Builtin::FirstTSBuiltin-1,
-#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
-#include "PPCBuiltins.def"
-    LastTSBuiltin
-  };
   
   static const Builtin::Info BuiltinInfo[] = {
 #define BUILTIN(ID, TYPE, ATTRS) { #ID, TYPE, ATTRS },
-#include "PPCBuiltins.def"
+#include "clang/AST/PPCBuiltins.def"
   };
   
   static void getBuiltins(const Builtin::Info *&Records, unsigned &NumRecords) {
@@ -411,18 +407,10 @@
 
 /// X86 builtin info.
 namespace X86 {
-  enum {
-    LastTIBuiltin = Builtin::FirstTSBuiltin-1,
-#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
-#include "X86Builtins.def"
-    LastTSBuiltin
-  };
-
   static const Builtin::Info BuiltinInfo[] = {
 #define BUILTIN(ID, TYPE, ATTRS) { #ID, TYPE, ATTRS },
-#include "X86Builtins.def"
+#include "clang/AST/X86Builtins.def"
   };
-    
 
   static void getBuiltins(const Builtin::Info *&Records, unsigned &NumRecords) {
     Records = BuiltinInfo;
diff --git a/clang.xcodeproj/project.pbxproj b/clang.xcodeproj/project.pbxproj
index f6f4b68..ed2ec87 100644
--- a/clang.xcodeproj/project.pbxproj
+++ b/clang.xcodeproj/project.pbxproj
@@ -106,8 +106,6 @@
 		DED676D10B6C786700AAD4A3 /* Builtins.def in CopyFiles */ = {isa = PBXBuildFile; fileRef = DED676D00B6C786700AAD4A3 /* Builtins.def */; };
 		DED676FA0B6C797B00AAD4A3 /* Builtins.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DED676F90B6C797B00AAD4A3 /* Builtins.h */; };
 		DED677C90B6C854100AAD4A3 /* Builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DED677C80B6C854100AAD4A3 /* Builtins.cpp */; };
-		DED67AEE0B6DB92A00AAD4A3 /* X86Builtins.def in CopyFiles */ = {isa = PBXBuildFile; fileRef = DED67AED0B6DB92A00AAD4A3 /* X86Builtins.def */; };
-		DED67AF00B6DB92F00AAD4A3 /* PPCBuiltins.def in CopyFiles */ = {isa = PBXBuildFile; fileRef = DED67AEF0B6DB92F00AAD4A3 /* PPCBuiltins.def */; };
 		DED7D7410A524295003AD0FB /* Diagnostic.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DED7D7310A524295003AD0FB /* Diagnostic.h */; };
 		DED7D7420A524295003AD0FB /* DiagnosticKinds.def in CopyFiles */ = {isa = PBXBuildFile; fileRef = DED7D7320A524295003AD0FB /* DiagnosticKinds.def */; };
 		DED7D7430A524295003AD0FB /* FileManager.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DED7D7330A524295003AD0FB /* FileManager.h */; };
@@ -190,8 +188,6 @@
 				DE01DA490B12ADA300AC22CE /* PPCallbacks.h in CopyFiles */,
 				DED676D10B6C786700AAD4A3 /* Builtins.def in CopyFiles */,
 				DED676FA0B6C797B00AAD4A3 /* Builtins.h in CopyFiles */,
-				DED67AEE0B6DB92A00AAD4A3 /* X86Builtins.def in CopyFiles */,
-				DED67AF00B6DB92F00AAD4A3 /* PPCBuiltins.def in CopyFiles */,
 				1A30A9E90B93A4C800201A91 /* ExprCXX.h in CopyFiles */,
 				1A869A700BA2164C008DA07A /* LiteralSupport.h in CopyFiles */,
 				DE67E7150C020EDF00F66BC5 /* Sema.h in CopyFiles */,
@@ -220,6 +216,9 @@
 
 /* Begin PBXFileReference section */
 		1A30A9E80B93A4C800201A91 /* ExprCXX.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ExprCXX.h; path = clang/AST/ExprCXX.h; sourceTree = "<group>"; };
+		1A68BC110D0CADDD001A28C8 /* PPCBuiltins.def */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = PPCBuiltins.def; path = clang/AST/PPCBuiltins.def; sourceTree = "<group>"; };
+		1A68BC120D0CADDD001A28C8 /* TargetBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TargetBuiltins.h; path = clang/AST/TargetBuiltins.h; sourceTree = "<group>"; };
+		1A68BC130D0CADDD001A28C8 /* X86Builtins.def */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = X86Builtins.def; path = clang/AST/X86Builtins.def; sourceTree = "<group>"; };
 		1A7342470C7B57D500122F56 /* CGObjC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CGObjC.cpp; path = CodeGen/CGObjC.cpp; sourceTree = "<group>"; };
 		1A869A6E0BA2164C008DA07A /* LiteralSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiteralSupport.h; sourceTree = "<group>"; };
 		1A869AA70BA21ABA008DA07A /* LiteralSupport.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = LiteralSupport.cpp; sourceTree = "<group>"; };
@@ -337,8 +336,6 @@
 		DED676D00B6C786700AAD4A3 /* Builtins.def */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = Builtins.def; path = clang/AST/Builtins.def; sourceTree = "<group>"; };
 		DED676F90B6C797B00AAD4A3 /* Builtins.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Builtins.h; path = clang/AST/Builtins.h; sourceTree = "<group>"; };
 		DED677C80B6C854100AAD4A3 /* Builtins.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Builtins.cpp; path = AST/Builtins.cpp; sourceTree = "<group>"; };
-		DED67AED0B6DB92A00AAD4A3 /* X86Builtins.def */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = X86Builtins.def; path = Driver/X86Builtins.def; sourceTree = "<group>"; };
-		DED67AEF0B6DB92F00AAD4A3 /* PPCBuiltins.def */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = PPCBuiltins.def; path = Driver/PPCBuiltins.def; sourceTree = "<group>"; };
 		DED7D7310A524295003AD0FB /* Diagnostic.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Diagnostic.h; sourceTree = "<group>"; };
 		DED7D7320A524295003AD0FB /* DiagnosticKinds.def */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = DiagnosticKinds.def; sourceTree = "<group>"; };
 		DED7D7330A524295003AD0FB /* FileManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FileManager.h; sourceTree = "<group>"; };
@@ -581,8 +578,6 @@
 				DE5932CE0AD60FF400BC794C /* clang.h */,
 				DE3985780CB8ADC800223765 /* ASTConsumers.h */,
 				DE39857A0CB8ADCB00223765 /* ASTConsumers.cpp */,
-				DED67AEF0B6DB92F00AAD4A3 /* PPCBuiltins.def */,
-				DED67AED0B6DB92A00AAD4A3 /* X86Builtins.def */,
 				DEC82DC30C32D50A00BAC245 /* DiagChecker.cpp */,
 				DE5932CF0AD60FF400BC794C /* PrintParserCallbacks.cpp */,
 				DE5932D00AD60FF400BC794C /* PrintPreprocessedOutput.cpp */,
@@ -612,14 +607,17 @@
 				84AF36A00CB17A3B00C820A5 /* DeclObjC.h */,
 				DE0FCA620A95859D00248FD5 /* Expr.h */,
 				1A30A9E80B93A4C800201A91 /* ExprCXX.h */,
-				DE6951C60C4D1F5D00A5826B /* RecordLayout.h */,
+				1A68BC110D0CADDD001A28C8 /* PPCBuiltins.def */,
 				3547129D0C88881300B3E1D5 /* PrettyPrinter.h */,
+				DE6951C60C4D1F5D00A5826B /* RecordLayout.h */,
 				DE3452800AEF1B1800DBC861 /* Stmt.h */,
 				DE345F210AFD347900DBC861 /* StmtNodes.def */,
 				DE345C190AFC658B00DBC861 /* StmtVisitor.h */,
 				35847BE30CC7DB9000C40FFF /* StmtIterator.h */,
 				35CFFE010CA1CBDD00E6F2BE /* StmtGraphTraits.h */,
+				1A68BC120D0CADDD001A28C8 /* TargetBuiltins.h */,
 				DE3464210B03040900DBC861 /* Type.h */,
+				1A68BC130D0CADDD001A28C8 /* X86Builtins.def */,
 			);
 			name = AST;
 			sourceTree = "<group>";
diff --git a/Driver/PPCBuiltins.def b/include/clang/AST/PPCBuiltins.def
similarity index 100%
rename from Driver/PPCBuiltins.def
rename to include/clang/AST/PPCBuiltins.def
diff --git a/Driver/X86Builtins.def b/include/clang/AST/X86Builtins.def
similarity index 100%
rename from Driver/X86Builtins.def
rename to include/clang/AST/X86Builtins.def