[cfe-commits] r102623 - /cfe/trunk/lib/Frontend/CodeGenAction.cpp
Daniel Dunbar
daniel at zuster.org
Thu Apr 29 09:29:09 PDT 2010
Author: ddunbar
Date: Thu Apr 29 11:29:09 2010
New Revision: 102623
URL: http://llvm.org/viewvc/llvm-project?rev=102623&view=rev
Log:
Remove a FIXME that is unlikely to be fixed (streaming code generation).
Modified:
cfe/trunk/lib/Frontend/CodeGenAction.cpp
Modified: cfe/trunk/lib/Frontend/CodeGenAction.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CodeGenAction.cpp?rev=102623&r1=102622&r2=102623&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CodeGenAction.cpp (original)
+++ cfe/trunk/lib/Frontend/CodeGenAction.cpp Thu Apr 29 11:29:09 2010
@@ -179,13 +179,13 @@
virtual void CompleteTentativeDefinition(VarDecl *D) {
Gen->CompleteTentativeDefinition(D);
}
-
+
static void InlineAsmDiagHandler(const llvm::SMDiagnostic &SM,void *Context,
unsigned LocCookie) {
SourceLocation Loc = SourceLocation::getFromRawEncoding(LocCookie);
((BackendConsumer*)Context)->InlineAsmDiagHandler2(SM, Loc);
}
-
+
void InlineAsmDiagHandler2(const llvm::SMDiagnostic &,
SourceLocation LocCookie);
};
@@ -226,12 +226,12 @@
getPerModulePasses()->add(createBitcodeWriterPass(FormattedOutStream));
return true;
}
-
+
if (Action == Backend_EmitLL) {
getPerModulePasses()->add(createPrintModulePass(&FormattedOutStream));
return true;
}
-
+
bool Fast = CodeGenOpts.OptimizationLevel == 0;
// Create the TargetMachine for generating code.
@@ -321,11 +321,7 @@
RegisterRegAlloc::setDefault(Fast ? createLocalRegisterAllocator :
createLinearScanRegisterAllocator);
- // From llvm-gcc:
- // If there are passes we have to run on the entire module, we do codegen
- // as a separate "pass" after that happens.
- // FIXME: This is disabled right now until bugs can be worked out. Reenable
- // this for fast -O0 compiles!
+ // Create the code generator passes.
FunctionPassManager *PM = getCodeGenPasses();
CodeGenOpt::Level OptLevel = CodeGenOpt::Default;
@@ -444,7 +440,7 @@
if (CodeGenPasses) {
PrettyStackTraceString CrashInfo("Code generation");
-
+
// Install an inline asm handler so that diagnostics get printed through our
// diagnostics hooks.
LLVMContext &Ctx = TheModule->getContext();
@@ -452,13 +448,13 @@
void *OldContext = Ctx.getInlineAsmDiagnosticContext();
Ctx.setInlineAsmDiagnosticHandler((void*)(intptr_t)InlineAsmDiagHandler,
this);
-
+
CodeGenPasses->doInitialization();
for (Module::iterator I = M->begin(), E = M->end(); I != E; ++I)
if (!I->isDeclaration())
CodeGenPasses->run(*I);
CodeGenPasses->doFinalization();
-
+
Ctx.setInlineAsmDiagnosticHandler(OldHandler, OldContext);
}
}
@@ -469,23 +465,23 @@
SourceManager &CSM) {
// Get both the clang and llvm source managers. The location is relative to
// a memory buffer that the LLVM Source Manager is handling, we need to add
- // a copy to the Clang source manager.
+ // a copy to the Clang source manager.
const llvm::SourceMgr &LSM = *D.getSourceMgr();
-
+
// We need to copy the underlying LLVM memory buffer because llvm::SourceMgr
// already owns its one and clang::SourceManager wants to own its one.
const MemoryBuffer *LBuf =
LSM.getMemoryBuffer(LSM.FindBufferContainingLoc(D.getLoc()));
-
+
// Create the copy and transfer ownership to clang::SourceManager.
llvm::MemoryBuffer *CBuf =
llvm::MemoryBuffer::getMemBufferCopy(LBuf->getBuffer(),
LBuf->getBufferIdentifier());
FileID FID = CSM.createFileIDForMemBuffer(CBuf);
-
+
// Translate the offset into the file.
unsigned Offset = D.getLoc().getPointer() - LBuf->getBufferStart();
- SourceLocation NewLoc =
+ SourceLocation NewLoc =
CSM.getLocForStartOfFile(FID).getFileLocWithOffset(Offset);
return FullSourceLoc(NewLoc, CSM);
}
@@ -493,12 +489,12 @@
/// InlineAsmDiagHandler2 - This function is invoked when the backend hits an
/// error parsing inline asm. The SMDiagnostic indicates the error relative to
-/// the temporary memory buffer that the inline asm parser has set up.
+/// the temporary memory buffer that the inline asm parser has set up.
void BackendConsumer::InlineAsmDiagHandler2(const llvm::SMDiagnostic &D,
SourceLocation LocCookie) {
// There are a couple of different kinds of errors we could get here. First,
// we re-format the SMDiagnostic in terms of a clang diagnostic.
-
+
// Strip "error: " off the start of the message string.
llvm::StringRef Message = D.getMessage();
if (Message.startswith("error: "))
@@ -510,7 +506,7 @@
if (D.getLoc() != SMLoc())
Loc = ConvertBackendLocation(D, Context->getSourceManager());
Diags.Report(Loc, diag::err_fe_inline_asm).AddString(Message);
-
+
// This could be a problem with no clang-level source location information.
// In this case, LocCookie is invalid. If there is source level information,
// print an "generated from" note.
More information about the cfe-commits
mailing list