summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-02-26 22:39:37 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-02-26 22:39:37 +0000
commit26d5f05bf5ec9c22dee6c7bd4057ccdf48b22432 (patch)
tree81c670622787df91d6aef15a8428c4ffd6e3c2ee
parent53e06f9cb49f1b3e30ca2dcc8717911957acad2f (diff)
downloadbcm5719-llvm-26d5f05bf5ec9c22dee6c7bd4057ccdf48b22432.tar.gz
bcm5719-llvm-26d5f05bf5ec9c22dee6c7bd4057ccdf48b22432.zip
Add -emit-llvm-only option (generate LLVM IR & run passes, but discard
output). - For timing IRgen phase. llvm-svn: 65580
-rw-r--r--clang/Driver/ASTConsumers.h3
-rw-r--r--clang/Driver/Backend.cpp3
-rw-r--r--clang/Driver/clang.cpp8
3 files changed, 12 insertions, 2 deletions
diff --git a/clang/Driver/ASTConsumers.h b/clang/Driver/ASTConsumers.h
index 34c9fb246ec..670f8dc190b 100644
--- a/clang/Driver/ASTConsumers.h
+++ b/clang/Driver/ASTConsumers.h
@@ -48,7 +48,8 @@ ASTConsumer *CreateCodeRewriterTest(const std::string& InFile,
enum BackendAction {
Backend_EmitAssembly,
Backend_EmitBC,
- Backend_EmitLL
+ Backend_EmitLL,
+ Backend_EmitNothing
};
ASTConsumer *CreateBackendConsumer(BackendAction Action,
Diagnostic &Diags,
diff --git a/clang/Driver/Backend.cpp b/clang/Driver/Backend.cpp
index 8cffae07484..3c7c1bc0288 100644
--- a/clang/Driver/Backend.cpp
+++ b/clang/Driver/Backend.cpp
@@ -181,6 +181,9 @@ FunctionPassManager *BackendConsumer::getPerFunctionPasses() const {
}
bool BackendConsumer::AddEmitPasses(std::string &Error) {
+ if (Action == Backend_EmitNothing)
+ return true;
+
if (OutputFile == "-" || (InputFile == "-" && OutputFile.empty())) {
AsmOutStream = new raw_stdout_ostream();
sys::Program::ChangeStdoutToBinary();
diff --git a/clang/Driver/clang.cpp b/clang/Driver/clang.cpp
index d17f77b0a87..6fdd18af6bd 100644
--- a/clang/Driver/clang.cpp
+++ b/clang/Driver/clang.cpp
@@ -86,6 +86,7 @@ enum ProgActions {
EmitAssembly, // Emit a .s file.
EmitLLVM, // Emit a .ll file.
EmitBC, // Emit a .bc file.
+ EmitLLVMOnly, // Generate LLVM IR, but do not
SerializeAST, // Emit a .ast file.
EmitHTML, // Translate input source into HTML.
ASTPrint, // Parse ASTs and print them.
@@ -143,6 +144,8 @@ ProgAction(llvm::cl::desc("Choose output type:"), llvm::cl::ZeroOrMore,
"Build ASTs then convert to LLVM, emit .ll file"),
clEnumValN(EmitBC, "emit-llvm-bc",
"Build ASTs then convert to LLVM, emit .bc file"),
+ clEnumValN(EmitLLVMOnly, "emit-llvm-only",
+ "Build ASTs and convert to LLVM, discarding output"),
clEnumValN(SerializeAST, "serialize",
"Build ASTs and emit .ast file"),
clEnumValN(RewriteTest, "rewrite-test",
@@ -1297,12 +1300,15 @@ static ASTConsumer *CreateASTConsumer(const std::string& InFile,
case EmitAssembly:
case EmitLLVM:
- case EmitBC: {
+ case EmitBC:
+ case EmitLLVMOnly: {
BackendAction Act;
if (ProgAction == EmitAssembly)
Act = Backend_EmitAssembly;
else if (ProgAction == EmitLLVM)
Act = Backend_EmitLL;
+ else if (ProgAction == EmitLLVMOnly)
+ Act = Backend_EmitNothing;
else
Act = Backend_EmitBC;
OpenPOWER on IntegriCloud