[cfe-commits] r42689 - in /cfe/trunk: Basic/TargetInfo.cpp Driver/Targets.cpp Driver/clang.cpp include/clang/Basic/TargetInfo.h

Chris Lattner sabre at nondot.org
Fri Oct 5 23:57:35 PDT 2007


Author: lattner
Date: Sat Oct  6 01:57:34 2007
New Revision: 42689

URL: http://llvm.org/viewvc/llvm-project?rev=42689&view=rev
Log:
speed up clang startup another 28% by avoiding std::vector<std::string> 
for holding builtin target-specific macros.

Modified:
    cfe/trunk/Basic/TargetInfo.cpp
    cfe/trunk/Driver/Targets.cpp
    cfe/trunk/Driver/clang.cpp
    cfe/trunk/include/clang/Basic/TargetInfo.h

Modified: cfe/trunk/Basic/TargetInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Basic/TargetInfo.cpp?rev=42689&r1=42688&r2=42689&view=diff

==============================================================================
--- cfe/trunk/Basic/TargetInfo.cpp (original)
+++ cfe/trunk/Basic/TargetInfo.cpp Sat Oct  6 01:57:34 2007
@@ -63,25 +63,25 @@
 /// collection for easy lookup.
 static void GetTargetDefineMap(const TargetInfoImpl *Target,
                                llvm::StringMap<std::string> &Map) {
-  std::vector<std::string> PrimaryDefines;
-  Target->getTargetDefines(PrimaryDefines);
-
-  while (!PrimaryDefines.empty()) {
-    std::string &PrimDefineStr = PrimaryDefines.back();
-    const char *Str    = PrimDefineStr.c_str();
-    const char *StrEnd = Str+PrimDefineStr.size();
-    
-    if (const char *Equal = strchr(Str, '=')) {
-      // Split at the '='.
-      
-      std::string &Entry = Map.GetOrCreateValue(Str, Equal).getValue();
-      Entry = std::string(Equal+1, StrEnd);
-    } else {
-      // Remember "macroname=1".
-      std::string &Entry = Map.GetOrCreateValue(Str, StrEnd).getValue();
-      Entry = "1";
-    }
-    PrimaryDefines.pop_back();
+  std::vector<char> Defines;
+  Defines.reserve(4096);
+  Target->getTargetDefines(Defines);
+
+  for (const char *DefStr = &Defines[0], *E = DefStr+Defines.size();
+       DefStr != E;) {
+    // Skip the '#define ' portion.
+    assert(memcmp(DefStr, "#define ", strlen("#define ")) == 0 &&
+           "#define didn't start with #define!");
+    DefStr += strlen("#define ");
+    
+    // Find the divider between the key and value.
+    const char *SpacePos = strchr(DefStr, ' ');
+
+    std::string &Entry = Map.GetOrCreateValue(DefStr, SpacePos).getValue();
+
+    const char *EndPos = strchr(SpacePos+1, '\n');
+    Entry = std::string(SpacePos+1, EndPos);
+    DefStr = EndPos+1;
   }
 }
 
@@ -90,30 +90,7 @@
 void TargetInfo::getTargetDefines(std::vector<char> &Buffer) {
   // If we have no secondary targets, be a bit more efficient.
   if (SecondaryTargets.empty()) {
-    std::vector<std::string> PrimaryDefines;
-    PrimaryTarget->getTargetDefines(PrimaryDefines);
-
-    for (unsigned i = 0, e = PrimaryDefines.size(); i != e; ++i) {
-      // Always produce a #define.
-      const char *Command = "#define ";
-      Buffer.insert(Buffer.end(), Command, Command+strlen("#define "));
-      
-      const std::string &Val = PrimaryDefines[i];
-      unsigned EqualPos = Val.find('=');
-      if (EqualPos != std::string::npos) {
-        // Insert "defname defvalue\n".
-        Buffer.insert(Buffer.end(), Val.begin(), Val.begin()+EqualPos);
-        Buffer.push_back(' ');
-        Buffer.insert(Buffer.end(), Val.begin()+EqualPos+1, Val.end());
-        Buffer.push_back('\n');
-      } else {
-        // Insert "defname 1\n".
-        Buffer.insert(Buffer.end(), Val.begin(), Val.end());
-        Buffer.push_back(' ');
-        Buffer.push_back('1');
-        Buffer.push_back('\n');
-      }
-    }
+    PrimaryTarget->getTargetDefines(Buffer);
     return;
   }
   

Modified: cfe/trunk/Driver/Targets.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/Targets.cpp?rev=42689&r1=42688&r2=42689&view=diff

==============================================================================
--- cfe/trunk/Driver/Targets.cpp (original)
+++ cfe/trunk/Driver/Targets.cpp Sat Oct  6 01:57:34 2007
@@ -40,27 +40,38 @@
 //  Common code shared among targets.
 //===----------------------------------------------------------------------===//
 
+static void Define(std::vector<char> &Buf, const char *Macro,
+                   const char *Val = "1") {
+  const char *Def = "#define ";
+  Buf.insert(Buf.end(), Def, Def+strlen(Def));
+  Buf.insert(Buf.end(), Macro, Macro+strlen(Macro));
+  Buf.push_back(' ');
+  Buf.insert(Buf.end(), Val, Val+strlen(Val));
+  Buf.push_back('\n');
+}
+
+
 namespace {
 class DarwinTargetInfo : public TargetInfoImpl {
 public:
-  virtual void getTargetDefines(std::vector<std::string> &Defines) const {
-    Defines.push_back("__APPLE__=1");
-    Defines.push_back("__MACH__=1");
+  virtual void getTargetDefines(std::vector<char> &Defs) const {
+    Define(Defs, "__APPLE__");
+    Define(Defs, "__MACH__");
     
     if (1) {// -fobjc-gc controls this.
-      Defines.push_back("__weak=");
-      Defines.push_back("__strong=");
+      Define(Defs, "__weak", "");
+      Define(Defs, "__strong", "");
     } else {
-      Defines.push_back("__weak=__attribute__((objc_gc(weak)))");
-      Defines.push_back("__strong=__attribute__((objc_gc(strong)))");
-      Defines.push_back("__OBJC_GC__");
+      Define(Defs, "__weak", "__attribute__((objc_gc(weak)))");
+      Define(Defs, "__strong", "__attribute__((objc_gc(strong)))");
+      Define(Defs, "__OBJC_GC__");
     }
 
     // darwin_constant_cfstrings controls this.
-    Defines.push_back("__CONSTANT_CFSTRINGS__=1");
+    Define(Defs, "__CONSTANT_CFSTRINGS__");
     
     if (0)  // darwin_pascal_strings
-      Defines.push_back("__PASCAL_STRINGS__");
+      Define(Defs, "__PASCAL_STRINGS__");
   }
 
 };
@@ -69,205 +80,203 @@
 
 /// getPowerPCDefines - Return a set of the PowerPC-specific #defines that are
 /// not tied to a specific subtarget.
-static void getPowerPCDefines(std::vector<std::string> &Defines, bool is64Bit) {
+static void getPowerPCDefines(std::vector<char> &Defs, bool is64Bit) {
   // Target identification.
-  Defines.push_back("__ppc__");
-  Defines.push_back("_ARCH_PPC=1");
-  Defines.push_back("__POWERPC__=1");
+  Define(Defs, "__ppc__");
+  Define(Defs, "_ARCH_PPC");
+  Define(Defs, "__POWERPC__");
   if (is64Bit) {
-    Defines.push_back("_ARCH_PPC64");
-    Defines.push_back("_LP64");
-    Defines.push_back("__LP64__");
-    Defines.push_back("__ppc64__");
+    Define(Defs, "_ARCH_PPC64");
+    Define(Defs, "_LP64");
+    Define(Defs, "__LP64__");
+    Define(Defs, "__ppc64__");
   } else {
-    Defines.push_back("__ppc__=1");
+    Define(Defs, "__ppc__");
   }
 
   // Target properties.
-  Defines.push_back("_BIG_ENDIAN=1");
-  Defines.push_back("__BIG_ENDIAN__=1");
+  Define(Defs, "_BIG_ENDIAN");
+  Define(Defs, "__BIG_ENDIAN__");
 
   if (is64Bit) {
-    Defines.push_back("__INTMAX_MAX__=9223372036854775807L");
-    Defines.push_back("__INTMAX_TYPE__=long int");
-    Defines.push_back("__LONG_MAX__=9223372036854775807L");
-    Defines.push_back("__PTRDIFF_TYPE__=long int");
-    Defines.push_back("__UINTMAX_TYPE__=long unsigned int");
+    Define(Defs, "__INTMAX_MAX__", "9223372036854775807L");
+    Define(Defs, "__INTMAX_TYPE__", "long int");
+    Define(Defs, "__LONG_MAX__", "9223372036854775807L");
+    Define(Defs, "__PTRDIFF_TYPE__", "long int");
+    Define(Defs, "__UINTMAX_TYPE__", "long unsigned int");
   } else {
-    Defines.push_back("__INTMAX_MAX__=9223372036854775807LL");
-    Defines.push_back("__INTMAX_TYPE__=long long int");
-    Defines.push_back("__LONG_MAX__=2147483647L");
-    Defines.push_back("__PTRDIFF_TYPE__=int");
-    Defines.push_back("__UINTMAX_TYPE__=long long unsigned int");
-  }
-  Defines.push_back("__INT_MAX__=2147483647");
-  Defines.push_back("__LONG_LONG_MAX__=9223372036854775807LL");
-  Defines.push_back("__CHAR_BIT__=8");
-  Defines.push_back("__SCHAR_MAX__=127");
-  Defines.push_back("__SHRT_MAX__=32767");
-  Defines.push_back("__SIZE_TYPE__=long unsigned int");
+    Define(Defs, "__INTMAX_MAX__", "9223372036854775807LL");
+    Define(Defs, "__INTMAX_TYPE__", "long long int");
+    Define(Defs, "__LONG_MAX__", "2147483647L");
+    Define(Defs, "__PTRDIFF_TYPE__", "int");
+    Define(Defs, "__UINTMAX_TYPE__", "long long unsigned int");
+  }
+  Define(Defs, "__INT_MAX__", "2147483647");
+  Define(Defs, "__LONG_LONG_MAX__", "9223372036854775807LL");
+  Define(Defs, "__CHAR_BIT__", "8");
+  Define(Defs, "__SCHAR_MAX__", "127");
+  Define(Defs, "__SHRT_MAX__", "32767");
+  Define(Defs, "__SIZE_TYPE__", "long unsigned int");
   
   // Subtarget options.
-  Defines.push_back("__USER_LABEL_PREFIX__=_");
-  Defines.push_back("__NATURAL_ALIGNMENT__=1");
-  Defines.push_back("__REGISTER_PREFIX__=");
-
-  Defines.push_back("__WCHAR_MAX__=2147483647");
-  Defines.push_back("__WCHAR_TYPE__=int");
-  Defines.push_back("__WINT_TYPE__=int");
+  Define(Defs, "__USER_LABEL_PREFIX__", "_");
+  Define(Defs, "__NATURAL_ALIGNMENT__");
+  Define(Defs, "__REGISTER_PREFIX__", "");
+
+  Define(Defs, "__WCHAR_MAX__", "2147483647");
+  Define(Defs, "__WCHAR_TYPE__", "int");
+  Define(Defs, "__WINT_TYPE__", "int");
   
   // Float macros.
-  Defines.push_back("__FLT_DENORM_MIN__=1.40129846e-45F");
-  Defines.push_back("__FLT_DIG__=6");
-  Defines.push_back("__FLT_EPSILON__=1.19209290e-7F");
-  Defines.push_back("__FLT_EVAL_METHOD__=0");
-  Defines.push_back("__FLT_HAS_INFINITY__=1");
-  Defines.push_back("__FLT_HAS_QUIET_NAN__=1");
-  Defines.push_back("__FLT_MANT_DIG__=24");
-  Defines.push_back("__FLT_MAX_10_EXP__=38");
-  Defines.push_back("__FLT_MAX_EXP__=128");
-  Defines.push_back("__FLT_MAX__=3.40282347e+38F");
-  Defines.push_back("__FLT_MIN_10_EXP__=(-37)");
-  Defines.push_back("__FLT_MIN_EXP__=(-125)");
-  Defines.push_back("__FLT_MIN__=1.17549435e-38F");
-  Defines.push_back("__FLT_RADIX__=2");
+  Define(Defs, "__FLT_DENORM_MIN__", "1.40129846e-45F");
+  Define(Defs, "__FLT_DIG__", "6");
+  Define(Defs, "__FLT_EPSILON__", "1.19209290e-7F");
+  Define(Defs, "__FLT_EVAL_METHOD__", "0");
+  Define(Defs, "__FLT_HAS_INFINITY__");
+  Define(Defs, "__FLT_HAS_QUIET_NAN__");
+  Define(Defs, "__FLT_MANT_DIG__", "24");
+  Define(Defs, "__FLT_MAX_10_EXP__", "38");
+  Define(Defs, "__FLT_MAX_EXP__", "128");
+  Define(Defs, "__FLT_MAX__", "3.40282347e+38F");
+  Define(Defs, "__FLT_MIN_10_EXP__", "(-37)");
+  Define(Defs, "__FLT_MIN_EXP__", "(-125)");
+  Define(Defs, "__FLT_MIN__", "1.17549435e-38F");
+  Define(Defs, "__FLT_RADIX__", "2");
   
   // double macros.
-  Defines.push_back("__DBL_DENORM_MIN__=4.9406564584124654e-324");
-  Defines.push_back("__DBL_DIG__=15");
-  Defines.push_back("__DBL_EPSILON__=2.2204460492503131e-16");
-  Defines.push_back("__DBL_HAS_INFINITY__=1");
-  Defines.push_back("__DBL_HAS_QUIET_NAN__=1");
-  Defines.push_back("__DBL_MANT_DIG__=53");
-  Defines.push_back("__DBL_MAX_10_EXP__=308");
-  Defines.push_back("__DBL_MAX_EXP__=1024");
-  Defines.push_back("__DBL_MAX__=1.7976931348623157e+308");
-  Defines.push_back("__DBL_MIN_10_EXP__=(-307)");
-  Defines.push_back("__DBL_MIN_EXP__=(-1021)");
-  Defines.push_back("__DBL_MIN__=2.2250738585072014e-308");
-  Defines.push_back("__DECIMAL_DIG__=33");
+  Define(Defs, "__DBL_DENORM_MIN__", "4.9406564584124654e-324");
+  Define(Defs, "__DBL_DIG__", "15");
+  Define(Defs, "__DBL_EPSILON__", "2.2204460492503131e-16");
+  Define(Defs, "__DBL_HAS_INFINITY__");
+  Define(Defs, "__DBL_HAS_QUIET_NAN__");
+  Define(Defs, "__DBL_MANT_DIG__", "53");
+  Define(Defs, "__DBL_MAX_10_EXP__", "308");
+  Define(Defs, "__DBL_MAX_EXP__", "1024");
+  Define(Defs, "__DBL_MAX__", "1.7976931348623157e+308");
+  Define(Defs, "__DBL_MIN_10_EXP__", "(-307)");
+  Define(Defs, "__DBL_MIN_EXP__", "(-1021)");
+  Define(Defs, "__DBL_MIN__", "2.2250738585072014e-308");
+  Define(Defs, "__DECIMAL_DIG__", "33");
   
   // 128-bit long double macros.
-  Defines.push_back("__LDBL_DENORM_MIN__=4.940656458412465441765687"
-                     "92868221e-324L");
-  Defines.push_back("__LDBL_DIG__=31");
-  Defines.push_back("__LDBL_EPSILON__=4.9406564584124654417656879286822"
-                     "1e-324L");
-  Defines.push_back("__LDBL_HAS_INFINITY__=1");
-  Defines.push_back("__LDBL_HAS_QUIET_NAN__=1");
-  Defines.push_back("__LDBL_MANT_DIG__=106");
-  Defines.push_back("__LDBL_MAX_10_EXP__=308");
-  Defines.push_back("__LDBL_MAX_EXP__=1024");
-  Defines.push_back("__LDBL_MAX__=1.7976931348623158079372897140"
-                     "5301e+308L");
-  Defines.push_back("__LDBL_MIN_10_EXP__=(-291)");
-  Defines.push_back("__LDBL_MIN_EXP__=(-968)");
-  Defines.push_back("__LDBL_MIN__=2.004168360008972777996108051350"
-                     "16e-292L");
-  Defines.push_back("__LONG_DOUBLE_128__=1");
-  
+  Define(Defs, "__LDBL_DENORM_MIN__",
+         "4.94065645841246544176568792868221e-324L");
+  Define(Defs, "__LDBL_DIG__", "31");
+  Define(Defs, "__LDBL_EPSILON__",
+         "4.94065645841246544176568792868221e-324L");
+  Define(Defs, "__LDBL_HAS_INFINITY__");
+  Define(Defs, "__LDBL_HAS_QUIET_NAN__");
+  Define(Defs, "__LDBL_MANT_DIG__", "106");
+  Define(Defs, "__LDBL_MAX_10_EXP__", "308");
+  Define(Defs, "__LDBL_MAX_EXP__", "1024");
+  Define(Defs, "__LDBL_MAX__",
+         "1.79769313486231580793728971405301e+308L");
+  Define(Defs, "__LDBL_MIN_10_EXP__", "(-291)");
+  Define(Defs, "__LDBL_MIN_EXP__", "(-968)");
+  Define(Defs, "__LDBL_MIN__",
+         "2.00416836000897277799610805135016e-292L");
+  Define(Defs, "__LONG_DOUBLE_128__");
 }
 
 /// getX86Defines - Return a set of the X86-specific #defines that are
 /// not tied to a specific subtarget.
-static void getX86Defines(std::vector<std::string> &Defines, bool is64Bit) {
+static void getX86Defines(std::vector<char> &Defs, bool is64Bit) {
   // Target identification.
   if (is64Bit) {
-    Defines.push_back("_LP64");
-    Defines.push_back("__LP64__");
-    Defines.push_back("__amd64__");
-    Defines.push_back("__amd64");
-    Defines.push_back("__x86_64");
-    Defines.push_back("__x86_64__");
+    Define(Defs, "_LP64");
+    Define(Defs, "__LP64__");
+    Define(Defs, "__amd64__");
+    Define(Defs, "__amd64");
+    Define(Defs, "__x86_64");
+    Define(Defs, "__x86_64__");
   } else {
-    Defines.push_back("__i386__=1");
-    Defines.push_back("__i386=1");
-    Defines.push_back("i386=1");
+    Define(Defs, "__i386__");
+    Define(Defs, "__i386");
+    Define(Defs, "i386");
   }
 
   // Target properties.
-  Defines.push_back("__LITTLE_ENDIAN__=1");
+  Define(Defs, "__LITTLE_ENDIAN__");
   
   if (is64Bit) {
-    Defines.push_back("__INTMAX_MAX__=9223372036854775807L");
-    Defines.push_back("__INTMAX_TYPE__=long int");
-    Defines.push_back("__LONG_MAX__=9223372036854775807L");
-    Defines.push_back("__PTRDIFF_TYPE__=long int");
-    Defines.push_back("__UINTMAX_TYPE__=long unsigned int");
+    Define(Defs, "__INTMAX_MAX__", "9223372036854775807L");
+    Define(Defs, "__INTMAX_TYPE__", "long int");
+    Define(Defs, "__LONG_MAX__", "9223372036854775807L");
+    Define(Defs, "__PTRDIFF_TYPE__", "long int");
+    Define(Defs, "__UINTMAX_TYPE__", "long unsigned int");
   } else {
-    Defines.push_back("__INTMAX_MAX__=9223372036854775807LL");
-    Defines.push_back("__INTMAX_TYPE__=long long int");
-    Defines.push_back("__LONG_MAX__=2147483647L");
-    Defines.push_back("__PTRDIFF_TYPE__=int");
-    Defines.push_back("__UINTMAX_TYPE__=long long unsigned int");
-  }
-  Defines.push_back("__CHAR_BIT__=8");
-  Defines.push_back("__INT_MAX__=2147483647");
-  Defines.push_back("__LONG_LONG_MAX__=9223372036854775807LL");
-  Defines.push_back("__SCHAR_MAX__=127");
-  Defines.push_back("__SHRT_MAX__=32767");
-  Defines.push_back("__SIZE_TYPE__=long unsigned int");
+    Define(Defs, "__INTMAX_MAX__", "9223372036854775807LL");
+    Define(Defs, "__INTMAX_TYPE__", "long long int");
+    Define(Defs, "__LONG_MAX__", "2147483647L");
+    Define(Defs, "__PTRDIFF_TYPE__", "int");
+    Define(Defs, "__UINTMAX_TYPE__", "long long unsigned int");
+  }
+  Define(Defs, "__CHAR_BIT__", "8");
+  Define(Defs, "__INT_MAX__", "2147483647");
+  Define(Defs, "__LONG_LONG_MAX__", "9223372036854775807LL");
+  Define(Defs, "__SCHAR_MAX__", "127");
+  Define(Defs, "__SHRT_MAX__", "32767");
+  Define(Defs, "__SIZE_TYPE__", "long unsigned int");
   
   // Subtarget options.
-  Defines.push_back("__nocona=1");
-  Defines.push_back("__nocona__=1");
-  Defines.push_back("__tune_nocona__=1");
-  Defines.push_back("__SSE2_MATH__=1");
-  Defines.push_back("__SSE2__=1");
-  Defines.push_back("__SSE_MATH__=1");
-  Defines.push_back("__SSE__=1");
-  Defines.push_back("__MMX__=1");
-  Defines.push_back("__REGISTER_PREFIX__=");
-
-  Defines.push_back("__WCHAR_MAX__=2147483647");
-  Defines.push_back("__WCHAR_TYPE__=int");
-  Defines.push_back("__WINT_TYPE__=int");
+  Define(Defs, "__nocona");
+  Define(Defs, "__nocona__");
+  Define(Defs, "__tune_nocona__");
+  Define(Defs, "__SSE2_MATH__");
+  Define(Defs, "__SSE2__");
+  Define(Defs, "__SSE_MATH__");
+  Define(Defs, "__SSE__");
+  Define(Defs, "__MMX__");
+  Define(Defs, "__REGISTER_PREFIX__", "");
+
+  Define(Defs, "__WCHAR_MAX__", "2147483647");
+  Define(Defs, "__WCHAR_TYPE__", "int");
+  Define(Defs, "__WINT_TYPE__", "int");
   
   // Float macros.
-  Defines.push_back("__FLT_DENORM_MIN__=1.40129846e-45F");
-  Defines.push_back("__FLT_DIG__=6");
-  Defines.push_back("__FLT_EPSILON__=1.19209290e-7F");
-  Defines.push_back("__FLT_EVAL_METHOD__=0");
-  Defines.push_back("__FLT_HAS_INFINITY__=1");
-  Defines.push_back("__FLT_HAS_QUIET_NAN__=1");
-  Defines.push_back("__FLT_MANT_DIG__=24");
-  Defines.push_back("__FLT_MAX_10_EXP__=38");
-  Defines.push_back("__FLT_MAX_EXP__=128");
-  Defines.push_back("__FLT_MAX__=3.40282347e+38F");
-  Defines.push_back("__FLT_MIN_10_EXP__=(-37)");
-  Defines.push_back("__FLT_MIN_EXP__=(-125)");
-  Defines.push_back("__FLT_MIN__=1.17549435e-38F");
-  Defines.push_back("__FLT_RADIX__=2");
+  Define(Defs, "__FLT_DENORM_MIN__", "1.40129846e-45F");
+  Define(Defs, "__FLT_DIG__", "6");
+  Define(Defs, "__FLT_EPSILON__", "1.19209290e-7F");
+  Define(Defs, "__FLT_EVAL_METHOD__", "0");
+  Define(Defs, "__FLT_HAS_INFINITY__");
+  Define(Defs, "__FLT_HAS_QUIET_NAN__");
+  Define(Defs, "__FLT_MANT_DIG__", "24");
+  Define(Defs, "__FLT_MAX_10_EXP__", "38");
+  Define(Defs, "__FLT_MAX_EXP__", "128");
+  Define(Defs, "__FLT_MAX__", "3.40282347e+38F");
+  Define(Defs, "__FLT_MIN_10_EXP__", "(-37)");
+  Define(Defs, "__FLT_MIN_EXP__", "(-125)");
+  Define(Defs, "__FLT_MIN__", "1.17549435e-38F");
+  Define(Defs, "__FLT_RADIX__", "2");
   
   // Double macros.
-  Defines.push_back("__DBL_DENORM_MIN__=4.9406564584124654e-324");
-  Defines.push_back("__DBL_DIG__=15");
-  Defines.push_back("__DBL_EPSILON__=2.2204460492503131e-16");
-  Defines.push_back("__DBL_HAS_INFINITY__=1");
-  Defines.push_back("__DBL_HAS_QUIET_NAN__=1");
-  Defines.push_back("__DBL_MANT_DIG__=53");
-  Defines.push_back("__DBL_MAX_10_EXP__=308");
-  Defines.push_back("__DBL_MAX_EXP__=1024");
-  Defines.push_back("__DBL_MAX__=1.7976931348623157e+308");
-  Defines.push_back("__DBL_MIN_10_EXP__=(-307)");
-  Defines.push_back("__DBL_MIN_EXP__=(-1021)");
-  Defines.push_back("__DBL_MIN__=2.2250738585072014e-308");
-  Defines.push_back("__DECIMAL_DIG__=21");
+  Define(Defs, "__DBL_DENORM_MIN__", "4.9406564584124654e-324");
+  Define(Defs, "__DBL_DIG__", "15");
+  Define(Defs, "__DBL_EPSILON__", "2.2204460492503131e-16");
+  Define(Defs, "__DBL_HAS_INFINITY__");
+  Define(Defs, "__DBL_HAS_QUIET_NAN__");
+  Define(Defs, "__DBL_MANT_DIG__", "53");
+  Define(Defs, "__DBL_MAX_10_EXP__", "308");
+  Define(Defs, "__DBL_MAX_EXP__", "1024");
+  Define(Defs, "__DBL_MAX__", "1.7976931348623157e+308");
+  Define(Defs, "__DBL_MIN_10_EXP__", "(-307)");
+  Define(Defs, "__DBL_MIN_EXP__", "(-1021)");
+  Define(Defs, "__DBL_MIN__", "2.2250738585072014e-308");
+  Define(Defs, "__DECIMAL_DIG__", "21");
   
   // 80-bit Long double macros.
-  Defines.push_back("__LDBL_DENORM_MIN__=3.64519953188247460253e-4951L");
-  Defines.push_back("__LDBL_DIG__=18");
-  Defines.push_back("__LDBL_EPSILON__=1.08420217248550443401e-19L");
-  Defines.push_back("__LDBL_HAS_INFINITY__=1");
-  Defines.push_back("__LDBL_HAS_QUIET_NAN__=1");
-  Defines.push_back("__LDBL_MANT_DIG__=64");
-  Defines.push_back("__LDBL_MAX_10_EXP__=4932");
-  Defines.push_back("__LDBL_MAX_EXP__=16384");
-  Defines.push_back("__LDBL_MAX__=1.18973149535723176502e+4932L");
-  Defines.push_back("__LDBL_MIN_10_EXP__=(-4931)");
-  Defines.push_back("__LDBL_MIN_EXP__=(-16381)");
-  Defines.push_back("__LDBL_MIN__=3.36210314311209350626e-4932L");
-
+  Define(Defs, "__LDBL_DENORM_MIN__", "3.64519953188247460253e-4951L");
+  Define(Defs, "__LDBL_DIG__", "18");
+  Define(Defs, "__LDBL_EPSILON__", "1.08420217248550443401e-19L");
+  Define(Defs, "__LDBL_HAS_INFINITY__");
+  Define(Defs, "__LDBL_HAS_QUIET_NAN__");
+  Define(Defs, "__LDBL_MANT_DIG__", "64");
+  Define(Defs, "__LDBL_MAX_10_EXP__", "4932");
+  Define(Defs, "__LDBL_MAX_EXP__", "16384");
+  Define(Defs, "__LDBL_MAX__", "1.18973149535723176502e+4932L");
+  Define(Defs, "__LDBL_MIN_10_EXP__", "(-4931)");
+  Define(Defs, "__LDBL_MIN_EXP__", "(-16381)");
+  Define(Defs, "__LDBL_MIN__", "3.36210314311209350626e-4932L");
 }
 
 /// PPC builtin info.
@@ -319,7 +328,7 @@
 namespace {
 class DarwinPPCTargetInfo : public DarwinTargetInfo {
 public:
-  virtual void getTargetDefines(std::vector<std::string> &Defines) const {
+  virtual void getTargetDefines(std::vector<char> &Defines) const {
     DarwinTargetInfo::getTargetDefines(Defines);
     getPowerPCDefines(Defines, false);
   }
@@ -333,7 +342,7 @@
 namespace {
 class DarwinPPC64TargetInfo : public DarwinTargetInfo {
 public:
-  virtual void getTargetDefines(std::vector<std::string> &Defines) const {
+  virtual void getTargetDefines(std::vector<char> &Defines) const {
     DarwinTargetInfo::getTargetDefines(Defines);
     getPowerPCDefines(Defines, true);
   }
@@ -347,7 +356,7 @@
 namespace {
 class DarwinI386TargetInfo : public DarwinTargetInfo {
 public:
-  virtual void getTargetDefines(std::vector<std::string> &Defines) const {
+  virtual void getTargetDefines(std::vector<char> &Defines) const {
     DarwinTargetInfo::getTargetDefines(Defines);
     getX86Defines(Defines, false);
   }
@@ -361,7 +370,7 @@
 namespace {
 class DarwinX86_64TargetInfo : public DarwinTargetInfo {
 public:
-  virtual void getTargetDefines(std::vector<std::string> &Defines) const {
+  virtual void getTargetDefines(std::vector<char> &Defines) const {
     DarwinTargetInfo::getTargetDefines(Defines);
     getX86Defines(Defines, true);
   }
@@ -381,7 +390,7 @@
     WCharAlign = 16;
   }
   
-  virtual void getTargetDefines(std::vector<std::string> &Defines) const {
+  virtual void getTargetDefines(std::vector<char> &Defines) const {
     // TODO: linux-specific stuff.
     getX86Defines(Defines, false);
   }

Modified: cfe/trunk/Driver/clang.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/clang.cpp?rev=42689&r1=42688&r2=42689&view=diff

==============================================================================
--- cfe/trunk/Driver/clang.cpp (original)
+++ cfe/trunk/Driver/clang.cpp Sat Oct  6 01:57:34 2007
@@ -744,6 +744,8 @@
                                        HeaderSearch &HeaderInfo,
                                        const LangOptions &LangInfo,
                                        std::vector<char> &PrologMacros) {
+  PrologMacros.reserve(4080);
+  
   FileManager &FileMgr = HeaderInfo.getFileMgr();
   
   // Install things like __POWERPC__, __GNUC__, etc into the macro table.

Modified: cfe/trunk/include/clang/Basic/TargetInfo.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=42689&r1=42688&r2=42689&view=diff

==============================================================================
--- cfe/trunk/include/clang/Basic/TargetInfo.h (original)
+++ cfe/trunk/include/clang/Basic/TargetInfo.h Sat Oct  6 01:57:34 2007
@@ -234,9 +234,9 @@
   virtual ~TargetInfoImpl() {}
   
   /// getTargetDefines - Return a list of the target-specific #define values set
-  /// when compiling to this target.  Each string should be of the form "X",
-  /// which results in '#define X 1' or "X=Y" which results in "#define X Y"
-  virtual void getTargetDefines(std::vector<std::string> &Defines) const = 0;
+  /// when compiling to this target.  Each string should be of the form
+  /// "#define X Y\n".
+  virtual void getTargetDefines(std::vector<char> &Defines) const = 0;
 
   /// getWCharWidth - Return the size of wchar_t in bits.
   ///





More information about the cfe-commits mailing list