diff --git a/include/clang/Basic/SourceManager.h b/include/clang/Basic/SourceManager.h
index 41fa041..202a7c5 100644
--- a/include/clang/Basic/SourceManager.h
+++ b/include/clang/Basic/SourceManager.h
@@ -409,15 +409,6 @@
     return getContentCache(FID)->Entry;
   }
   
-  /// getCanonicalFileID - Return the canonical FileID for a SourceLocation.
-  ///  A file can have multiple FileIDs if it is large enough to be broken
-  ///  into multiple chunks.  This method returns the unique FileID without
-  ///  chunk information for a given SourceLocation.  Use this method when
-  ///  you want to compare FileIDs across SourceLocations.
-  FileID getCanonicalFileID(SourceLocation SpellingLoc) const {
-    return getDecomposedFileLoc(SpellingLoc).first;
-  }    
-  
   /// getDecomposedFileLoc - Decompose the specified file location into a raw
   /// FileID + Offset pair.  The first element is the FileID, the second is the
   /// offset from the start of the buffer of the location.
@@ -437,7 +428,13 @@
     
     return std::make_pair(FileID::Create(Loc.getChunkID()-ChunkNo), Offset);
   }
-    
+  
+  /// getFileID - Return the FileID for a SourceLocation.
+  ///
+  FileID getFileID(SourceLocation SpellingLoc) const {
+    return getDecomposedFileLoc(SpellingLoc).first;
+  }    
+  
   /// getFullFilePos - This (efficient) method returns the offset from the start
   /// of the file that the specified spelling SourceLocation represents.  This
   /// returns the location of the actual character data, not the instantiation
@@ -449,13 +446,13 @@
   /// isFromSameFile - Returns true if both SourceLocations correspond to
   ///  the same file.
   bool isFromSameFile(SourceLocation Loc1, SourceLocation Loc2) const {
-    return getCanonicalFileID(Loc1) == getCanonicalFileID(Loc2);
+    return getFileID(Loc1) == getFileID(Loc2);
   }
   
   /// isFromMainFile - Returns true if the file of provided SourceLocation is
   ///   the main file.
   bool isFromMainFile(SourceLocation Loc) const {
-    return getCanonicalFileID(Loc) == getMainFileID();
+    return getFileID(Loc) == getMainFileID();
   } 
 
   /// isInSystemHeader - Returns if a SourceLocation is in a system header.
diff --git a/lib/Basic/SourceLocation.cpp b/lib/Basic/SourceLocation.cpp
index 66ad720..f0c8274 100644
--- a/lib/Basic/SourceLocation.cpp
+++ b/lib/Basic/SourceLocation.cpp
@@ -39,7 +39,7 @@
 
 FileID FullSourceLoc::getFileID() const {
   assert(isValid());
-  return SrcMgr->getCanonicalFileID(*this);
+  return SrcMgr->getFileID(*this);
 }
 
 
@@ -106,7 +106,7 @@
 
 const llvm::MemoryBuffer* FullSourceLoc::getBuffer() const {
   assert(isValid());
-  return SrcMgr->getBuffer(SrcMgr->getCanonicalFileID(*this));
+  return SrcMgr->getBuffer(SrcMgr->getFileID(*this));
 }
 
 void FullSourceLoc::dump() const {
diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp
index 5e4a95c..1aab4bb 100644
--- a/lib/CodeGen/CGDebugInfo.cpp
+++ b/lib/CodeGen/CGDebugInfo.cpp
@@ -51,7 +51,7 @@
     return llvm::DICompileUnit();
 
   SourceManager &SM = M->getContext().getSourceManager();
-  const FileEntry *FE = SM.getFileEntryForID(SM.getCanonicalFileID(Loc));
+  const FileEntry *FE = SM.getFileEntryForID(SM.getFileID(Loc));
   if (FE == 0) return llvm::DICompileUnit();
     
   // See if this compile unit has been used before.
diff --git a/lib/Driver/HTMLDiagnostics.cpp b/lib/Driver/HTMLDiagnostics.cpp
index 81cedba..2772cf3 100644
--- a/lib/Driver/HTMLDiagnostics.cpp
+++ b/lib/Driver/HTMLDiagnostics.cpp
@@ -26,7 +26,6 @@
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/System/Path.h"
 #include <fstream>
-
 using namespace clang;
 
 //===----------------------------------------------------------------------===//
@@ -132,8 +131,8 @@
     FullSourceLoc L = I->getLocation().getInstantiationLoc();
     
     if (FID.isInvalid()) {
-      FID = SMgr.getCanonicalFileID(L);
-    } else if (SMgr.getCanonicalFileID(L) != FID)
+      FID = SMgr.getFileID(L);
+    } else if (SMgr.getFileID(L) != FID)
       return; // FIXME: Emit a warning?
     
     // Check the source ranges.
@@ -142,19 +141,13 @@
       
       SourceLocation L = SMgr.getInstantiationLoc(RI->getBegin());
 
-      if (!L.isFileID())
-        return; // FIXME: Emit a warning?      
-      
-      if (SMgr.getCanonicalFileID(L) != FID)
+      if (!L.isFileID() || SMgr.getFileID(L) != FID)
         return; // FIXME: Emit a warning?
       
       L = SMgr.getInstantiationLoc(RI->getEnd());
       
-      if (!L.isFileID())
+      if (!L.isFileID() || SMgr.getFileID(L) != FID)
         return; // FIXME: Emit a warning?      
-      
-      if (SMgr.getCanonicalFileID(L) != FID)
-        return; // FIXME: Emit a warning?
     }
   }
   
@@ -336,10 +329,10 @@
   
   SourceManager &SM = R.getSourceMgr();
   FullSourceLoc LPos = Pos.getInstantiationLoc();
-  FileID FID = SM.getCanonicalFileID(LPos);
+  FileID FID = SM.getFileID(LPos);
   assert(&LPos.getManager() == &SM && "SourceManagers are different!");
   
-  if (SM.getCanonicalFileID(LPos) != BugFileID)
+  if (SM.getFileID(LPos) != BugFileID)
     return;
   
   const llvm::MemoryBuffer *Buf = SM.getBuffer(FID);
@@ -469,8 +462,8 @@
   if (EndLineNo < StartLineNo)
     return;
   
-  if (SM.getCanonicalFileID(InstantiationStart) != BugFileID ||
-      SM.getCanonicalFileID(InstantiationEnd) != BugFileID)
+  if (SM.getFileID(InstantiationStart) != BugFileID ||
+      SM.getFileID(InstantiationEnd) != BugFileID)
     return;
     
   // Compute the column number of the end.
diff --git a/lib/Driver/PlistDiagnostics.cpp b/lib/Driver/PlistDiagnostics.cpp
index 0b2ca52..9b7da48 100644
--- a/lib/Driver/PlistDiagnostics.cpp
+++ b/lib/Driver/PlistDiagnostics.cpp
@@ -51,20 +51,18 @@
   return new PlistDiagnostics(s);
 }
 
-static void AddFID(FIDMap &FIDs,
-                   llvm::SmallVectorImpl<FileID> &V,
+static void AddFID(FIDMap &FIDs, llvm::SmallVectorImpl<FileID> &V,
                    SourceManager& SM, SourceLocation L) {
 
-  FileID FID = SM.getCanonicalFileID(SM.getInstantiationLoc(L));
+  FileID FID = SM.getFileID(SM.getInstantiationLoc(L));
   FIDMap::iterator I = FIDs.find(FID);
   if (I != FIDs.end()) return;
   FIDs[FID] = V.size();
   V.push_back(FID);
 }
 
-static unsigned GetFID(const FIDMap& FIDs,
-                       SourceManager& SM, SourceLocation L) {
-  FileID FID = SM.getCanonicalFileID(SM.getInstantiationLoc(L));
+static unsigned GetFID(const FIDMap& FIDs, SourceManager& SM, SourceLocation L){
+  FileID FID = SM.getFileID(SM.getInstantiationLoc(L));
   FIDMap::const_iterator I = FIDs.find(FID);
   assert(I != FIDs.end());
   return I->second;
@@ -178,7 +176,7 @@
     AddFID(FM, Fids, SM, I->getLocation());
 
     for (PathDiagnosticPiece::range_iterator RI=I->ranges_begin(),
-                                             RE=I->ranges_end(); RI!=RE; ++RI) {      
+                                             RE=I->ranges_end(); RI!=RE; ++RI) {
       AddFID(FM, Fids, SM, RI->getBegin());
       AddFID(FM, Fids, SM, RI->getEnd());
     }
@@ -229,7 +227,8 @@
   o << " </array>\n";
     
   // Output the bug type and bug category.  
-  o << " <key>description</key>\n <string>" << D->getDescription() << "</string>\n"
+  o << " <key>description</key>\n <string>" << D->getDescription()
+    << "</string>\n"
        " <key>category</key>\n <string>" << D->getCategory() << "</string>\n";
 
   // Finish.
diff --git a/lib/Driver/TextDiagnosticPrinter.cpp b/lib/Driver/TextDiagnosticPrinter.cpp
index 4080b74..71a5e40 100644
--- a/lib/Driver/TextDiagnosticPrinter.cpp
+++ b/lib/Driver/TextDiagnosticPrinter.cpp
@@ -48,13 +48,13 @@
     SourceMgr.getInstantiationLoc(R.getBegin());
   unsigned StartLineNo = SourceMgr.getLineNumber(InstantiationStart);
   if (StartLineNo > LineNo ||
-      SourceMgr.getCanonicalFileID(InstantiationStart) != FID)
+      SourceMgr.getFileID(InstantiationStart) != FID)
     return;  // No intersection.
   
   SourceLocation InstantiationEnd = SourceMgr.getInstantiationLoc(R.getEnd());
   unsigned EndLineNo = SourceMgr.getLineNumber(InstantiationEnd);
   if (EndLineNo < LineNo ||
-      SourceMgr.getCanonicalFileID(InstantiationEnd) != FID)
+      SourceMgr.getFileID(InstantiationEnd) != FID)
     return;  // No intersection.
   
   // Compute the column number of the start.
diff --git a/lib/Lex/Lexer.cpp b/lib/Lex/Lexer.cpp
index 9280526..19b3121 100644
--- a/lib/Lex/Lexer.cpp
+++ b/lib/Lex/Lexer.cpp
@@ -156,7 +156,7 @@
   SourceManager &SM = PP.getSourceManager();
 
   // Create the lexer as if we were going to lex the file normally.
-  FileID SpellingFID = SM.getCanonicalFileID(SpellingLoc);
+  FileID SpellingFID = SM.getFileID(SpellingLoc);
   Lexer *L = new Lexer(SpellingFID, PP);
   
   // Now that the lexer is created, change the start/end locations so that we
diff --git a/lib/Rewrite/HTMLRewrite.cpp b/lib/Rewrite/HTMLRewrite.cpp
index 68a53d3..0401466 100644
--- a/lib/Rewrite/HTMLRewrite.cpp
+++ b/lib/Rewrite/HTMLRewrite.cpp
@@ -33,8 +33,8 @@
   SourceManager &SM = R.getSourceMgr();
   B = SM.getInstantiationLoc(B);
   E = SM.getInstantiationLoc(E);
-  FileID FID = SM.getCanonicalFileID(B);
-  assert(SM.getCanonicalFileID(E) == FID && "B/E not in the same file!");
+  FileID FID = SM.getFileID(B);
+  assert(SM.getFileID(E) == FID && "B/E not in the same file!");
 
   unsigned BOffset = SM.getFullFilePos(B);
   unsigned EOffset = SM.getFullFilePos(E);
