[cfe-commits] r42688 - in /cfe/trunk: Basic/TargetInfo.cpp clang.xcodeproj/project.pbxproj

Chris Lattner sabre at nondot.org
Fri Oct 5 23:29:42 PDT 2007


Author: lattner
Date: Sat Oct  6 01:29:41 2007
New Revision: 42688

URL: http://llvm.org/viewvc/llvm-project?rev=42688&view=rev
Log:
speed up clang startup time by about 23% by avoiding lots of 
stringmap operations when there are no secondary targets.

Modified:
    cfe/trunk/Basic/TargetInfo.cpp
    cfe/trunk/clang.xcodeproj/project.pbxproj

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

==============================================================================
--- cfe/trunk/Basic/TargetInfo.cpp (original)
+++ cfe/trunk/Basic/TargetInfo.cpp Sat Oct  6 01:29:41 2007
@@ -88,6 +88,35 @@
 /// getTargetDefines - Appends the target-specific #define values for this
 /// target set to the specified buffer.
 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');
+      }
+    }
+    return;
+  }
+  
   // This is tricky in the face of secondary targets.  Specifically, 
   // target-specific #defines that are present and identical across all
   // secondary targets are turned into #defines, #defines that are present in
@@ -101,27 +130,6 @@
   llvm::StringMap<std::string> PrimaryDefines;
   GetTargetDefineMap(PrimaryTarget, PrimaryDefines);
   
-  // If we have no secondary targets, be a bit more efficient.
-  if (SecondaryTargets.empty()) {
-    for (llvm::StringMap<std::string>::iterator I = 
-           PrimaryDefines.begin(), E = PrimaryDefines.end(); I != E; ++I) {
-      // If this define is non-portable, turn it into #define_target, otherwise
-      // just use #define.
-      const char *Command = "#define ";
-      Buffer.insert(Buffer.end(), Command, Command+strlen(Command));
-      
-      // Insert "defname defvalue\n".
-      const char *KeyStart = I->getKeyData();
-      const char *KeyEnd = KeyStart + I->getKeyLength();
-      
-      Buffer.insert(Buffer.end(), KeyStart, KeyEnd);
-      Buffer.push_back(' ');
-      Buffer.insert(Buffer.end(), I->getValue().begin(), I->getValue().end());
-      Buffer.push_back('\n');
-    }
-    return;
-  }
-  
   // Get the sets of secondary #defines.
   llvm::StringMap<std::string> *SecondaryDefines
     = new llvm::StringMap<std::string>[SecondaryTargets.size()];

Modified: cfe/trunk/clang.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/clang.xcodeproj/project.pbxproj?rev=42688&r1=42687&r2=42688&view=diff

==============================================================================
--- cfe/trunk/clang.xcodeproj/project.pbxproj (original)
+++ cfe/trunk/clang.xcodeproj/project.pbxproj Sat Oct  6 01:29:41 2007
@@ -739,7 +739,6 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
-			compatibilityVersion = "Xcode 2.4";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* clang */;
 			projectDirPath = "";





More information about the cfe-commits mailing list