rearrange some code and make it more efficient.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45087 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 76080f8..095eaaa 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -616,24 +616,20 @@
                     bool isFramework, FileManager &FM) {
   assert(!Path.empty() && "can't handle empty path here");
   
-  const DirectoryEntry *DE;
-  if (Group == System) {
-    if (isysroot != "/")
-      DE = FM.getDirectory(isysroot + "/" + Path);
-    else if (Path[0] == '/')
-      DE = FM.getDirectory(Path);
-    else
-      DE = FM.getDirectory("/" + Path);
-  } else
-    DE = FM.getDirectory(Path);
+  // Compute the actual path, taking into consideration -isysroot.
+  llvm::SmallString<256> MappedPath;
   
-  if (DE == 0) {
-    if (Verbose)
-      fprintf(stderr, "ignoring nonexistent directory \"%s\"\n",
-              Path.c_str());
-    return;
+  // Handle isysroot.
+  if (Group == System) {
+    if (isysroot.size() != 1 || isysroot[0] != '/') // Add isysroot if present.
+      MappedPath.append(isysroot.begin(), isysroot.end());
+    if (Path[0] != '/')  // If in the system group, add a /.
+      MappedPath.push_back('/');
   }
   
+  MappedPath.append(Path.begin(), Path.end());
+
+  // Compute the DirectoryLookup type.
   DirectoryLookup::DirType Type;
   if (Group == Quoted || Group == Angled)
     Type = DirectoryLookup::NormalHeaderDir;
@@ -642,8 +638,18 @@
   else
     Type = DirectoryLookup::ExternCSystemHeaderDir;
   
-  IncludeGroup[Group].push_back(DirectoryLookup(DE, Type, isUserSupplied,
-                                                isFramework));
+  
+  // If the directory exists, add it.
+  if (const DirectoryEntry *DE = FM.getDirectory(&MappedPath[0], 
+                                                 &MappedPath[0]+
+                                                 MappedPath.size())) {
+    IncludeGroup[Group].push_back(DirectoryLookup(DE, Type, isUserSupplied,
+                                                  isFramework));
+    return;
+  }
+  
+  if (Verbose)
+    fprintf(stderr, "ignoring nonexistent directory \"%s\"\n", Path.c_str());
 }
 
 /// RemoveDuplicates - If there are duplicate directory entries in the specified