[llvm-commits] [llvm] r95202 - in /llvm/trunk: include/llvm/Target/TargetMachine.h lib/CodeGen/LLVMTargetMachine.cpp tools/llc/llc.cpp tools/lto/LTOCodeGenerator.cpp
Chris Lattner
sabre at nondot.org
Tue Feb 2 21:55:10 PST 2010
Author: lattner
Date: Tue Feb 2 23:55:08 2010
New Revision: 95202
URL: http://llvm.org/viewvc/llvm-project?rev=95202&view=rev
Log:
change addPassesToEmitFile to return true on failure instead of its input,
add -filetype=null for performance testing and remove -filetype=dynlib,
which isn't planned to be implemented.
Modified:
llvm/trunk/include/llvm/Target/TargetMachine.h
llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp
llvm/trunk/tools/llc/llc.cpp
llvm/trunk/tools/lto/LTOCodeGenerator.cpp
Modified: llvm/trunk/include/llvm/Target/TargetMachine.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachine.h?rev=95202&r1=95201&r2=95202&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Target/TargetMachine.h (original)
+++ llvm/trunk/include/llvm/Target/TargetMachine.h Tue Feb 2 23:55:08 2010
@@ -199,8 +199,7 @@
enum CodeGenFileType {
CGFT_AssemblyFile,
CGFT_ObjectFile,
- CGFT_DynamicLibrary,
- CGFT_ErrorOccurred
+ CGFT_Null // Do not emit any output.
};
/// getEnableTailMergeDefault - the default setting for -enable-tail-merge
@@ -209,15 +208,13 @@
/// addPassesToEmitFile - Add passes to the specified pass manager to get the
/// specified file emitted. Typically this will involve several steps of code
- /// generation.
- /// This method should return InvalidFile if emission of this file type
- /// is not supported.
- ///
- virtual CodeGenFileType addPassesToEmitFile(PassManagerBase &,
- formatted_raw_ostream &,
- CodeGenFileType Filetype,
- CodeGenOpt::Level) {
- return CGFT_ErrorOccurred;
+ /// generation. This method should return true if emission of this file type
+ /// is not supported, or false on success.
+ virtual bool addPassesToEmitFile(PassManagerBase &,
+ formatted_raw_ostream &,
+ CodeGenFileType Filetype,
+ CodeGenOpt::Level) {
+ return true;
}
/// addPassesToEmitMachineCode - Add passes to the specified pass manager to
@@ -264,18 +261,11 @@
/// addPassesToEmitFile - Add passes to the specified pass manager to get the
/// specified file emitted. Typically this will involve several steps of code
/// generation. If OptLevel is None, the code generator should emit code as
- /// fast as possible, though the generated code may be less efficient. This
- /// method should return CGFT_ErrorOccurred if emission of this file type is
- /// not supported.
- ///
- /// The default implementation of this method adds components from the
- /// LLVM retargetable code generator, invoking the methods below to get
- /// target-specific passes in standard locations.
- ///
- virtual CodeGenFileType addPassesToEmitFile(PassManagerBase &PM,
- formatted_raw_ostream &Out,
- CodeGenFileType FileType,
- CodeGenOpt::Level);
+ /// fast as possible, though the generated code may be less efficient.
+ virtual bool addPassesToEmitFile(PassManagerBase &PM,
+ formatted_raw_ostream &Out,
+ CodeGenFileType FileType,
+ CodeGenOpt::Level);
/// addPassesToEmitMachineCode - Add passes to the specified pass manager to
/// get machine code emitted. This uses a JITCodeEmitter object to handle
Modified: llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp?rev=95202&r1=95201&r2=95202&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp (original)
+++ llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp Tue Feb 2 23:55:08 2010
@@ -111,21 +111,20 @@
setCodeModel(CodeModel::Small);
}
-TargetMachine::CodeGenFileType
-LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM,
- formatted_raw_ostream &Out,
- CodeGenFileType FileType,
- CodeGenOpt::Level OptLevel) {
+bool LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM,
+ formatted_raw_ostream &Out,
+ CodeGenFileType FileType,
+ CodeGenOpt::Level OptLevel) {
// Add common CodeGen passes.
if (addCommonCodeGenPasses(PM, OptLevel))
- return CGFT_ErrorOccurred;
+ return true;
OwningPtr<MCContext> Context(new MCContext());
OwningPtr<MCStreamer> AsmStreamer;
formatted_raw_ostream *LegacyOutput;
switch (FileType) {
- default: return CGFT_ErrorOccurred;
+ default: return true;
case CGFT_AssemblyFile: {
const MCAsmInfo &MAI = *getMCAsmInfo();
MCInstPrinter *InstPrinter =
@@ -143,7 +142,7 @@
// emission fails.
MCCodeEmitter *MCE = getTarget().createCodeEmitter(*this);
if (MCE == 0)
- return CGFT_ErrorOccurred;
+ return true;
AsmStreamer.reset(createMachOStreamer(*Context, Out, MCE));
@@ -154,6 +153,16 @@
LegacyOutput = new formatted_raw_ostream(errs());
break;
}
+ case CGFT_Null:
+ // The Null output is intended for use for performance analysis and testing,
+ // not real users.
+ AsmStreamer.reset(createNullStreamer(*Context));
+ // Any output to the asmprinter's "O" stream is bad and needs to be fixed,
+ // force it to come out stderr.
+ // FIXME: this is horrible and leaks, eventually remove the raw_ostream from
+ // asmprinter.
+ LegacyOutput = new formatted_raw_ostream(errs());
+ break;
}
// Create the AsmPrinter, which takes ownership of Context and AsmStreamer
@@ -162,7 +171,7 @@
getTarget().createAsmPrinter(*LegacyOutput, *this, *Context, *AsmStreamer,
getMCAsmInfo());
if (Printer == 0)
- return CGFT_ErrorOccurred;
+ return true;
// If successful, createAsmPrinter took ownership of AsmStreamer and Context.
Context.take(); AsmStreamer.take();
@@ -172,7 +181,7 @@
// Make sure the code model is set.
setCodeModelForStatic();
PM.add(createGCInfoDeleter());
- return FileType;
+ return false;
}
/// addPassesToEmitMachineCode - Add passes to the specified pass manager to
Modified: llvm/trunk/tools/llc/llc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=95202&r1=95201&r2=95202&view=diff
==============================================================================
--- llvm/trunk/tools/llc/llc.cpp (original)
+++ llvm/trunk/tools/llc/llc.cpp Tue Feb 2 23:55:08 2010
@@ -91,9 +91,8 @@
"Emit an assembly ('.s') file"),
clEnumValN(TargetMachine::CGFT_ObjectFile, "obj",
"Emit a native object ('.o') file [experimental]"),
- clEnumValN(TargetMachine::CGFT_DynamicLibrary, "dynlib",
- "Emit a native dynamic library ('.so') file"
- " [experimental]"),
+ clEnumValN(TargetMachine::CGFT_Null, "null",
+ "Emit nothing, for performance testing"),
clEnumValEnd));
cl::opt<bool> NoVerify("disable-verify", cl::Hidden,
@@ -177,8 +176,8 @@
OutputFilename += ".o";
Binary = true;
break;
- case TargetMachine::CGFT_DynamicLibrary:
- OutputFilename += LTDL_SHLIB_EXT;
+ case TargetMachine::CGFT_Null:
+ OutputFilename += ".null";
Binary = true;
break;
}
@@ -348,20 +347,13 @@
// Override default to generate verbose assembly.
Target.setAsmVerbosityDefault(true);
- switch (Target.addPassesToEmitFile(Passes, *Out, FileType, OLvl)) {
- default:
- assert(0 && "Invalid file model!");
- return 1;
- case TargetMachine::CGFT_ErrorOccurred:
+ if (Target.addPassesToEmitFile(Passes, *Out, FileType, OLvl)) {
errs() << argv[0] << ": target does not support generation of this"
<< " file type!\n";
if (Out != &fouts()) delete Out;
// And the Out file is empty and useless, so remove it now.
sys::Path(OutputFilename).eraseFromDisk();
return 1;
- case TargetMachine::CGFT_AssemblyFile:
- case TargetMachine::CGFT_ObjectFile:
- break;
}
Passes.doInitialization();
Modified: llvm/trunk/tools/lto/LTOCodeGenerator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOCodeGenerator.cpp?rev=95202&r1=95201&r2=95202&view=diff
==============================================================================
--- llvm/trunk/tools/lto/LTOCodeGenerator.cpp (original)
+++ llvm/trunk/tools/lto/LTOCodeGenerator.cpp Tue Feb 2 23:55:08 2010
@@ -393,14 +393,11 @@
codeGenPasses->add(new TargetData(*_target->getTargetData()));
- switch (_target->addPassesToEmitFile(*codeGenPasses, out,
- TargetMachine::CGFT_AssemblyFile,
- CodeGenOpt::Aggressive)) {
- case TargetMachine::CGFT_AssemblyFile:
- break;
- default:
- errMsg = "target file type not supported";
- return true;
+ if (_target->addPassesToEmitFile(*codeGenPasses, out,
+ TargetMachine::CGFT_AssemblyFile,
+ CodeGenOpt::Aggressive)) {
+ errMsg = "target file type not supported";
+ return true;
}
// Run our queue of passes all at once now, efficiently.
More information about the llvm-commits
mailing list