[cfe-commits] r125820 - in /cfe/trunk: examples/PrintFunctionNames/ examples/clang-interpreter/ include/clang/CodeGen/ include/clang/Frontend/ lib/CodeGen/ lib/Frontend/ tools/c-index-test/ tools/driver/ tools/libclang/ unittests/ unittests/Basic/ unittests/Frontend/
Peter Collingbourne
peter at pcc.me.uk
Thu Feb 17 18:25:12 PST 2011
Author: pcc
Date: Thu Feb 17 20:25:12 2011
New Revision: 125820
URL: http://llvm.org/viewvc/llvm-project?rev=125820&view=rev
Log:
Move CompilerInstance::LLVMContext and LLVMContext ownership to CodeGenAction
This removes the final dependency edge from any lib outside of CodeGen
to core. As a result we can, and do, trim the dependency on core
from libclang, PrintFunctionNames, the unit tests and c-index-test.
While at it, review and trim other unneeded dependencies.
Modified:
cfe/trunk/examples/PrintFunctionNames/CMakeLists.txt
cfe/trunk/examples/clang-interpreter/main.cpp
cfe/trunk/include/clang/CodeGen/CodeGenAction.h
cfe/trunk/include/clang/Frontend/ASTConsumers.h
cfe/trunk/include/clang/Frontend/CompilerInstance.h
cfe/trunk/lib/CodeGen/CodeGenAction.cpp
cfe/trunk/lib/Frontend/CompilerInstance.cpp
cfe/trunk/tools/c-index-test/CMakeLists.txt
cfe/trunk/tools/c-index-test/Makefile
cfe/trunk/tools/driver/cc1_main.cpp
cfe/trunk/tools/libclang/CMakeLists.txt
cfe/trunk/tools/libclang/Makefile
cfe/trunk/unittests/Basic/Makefile
cfe/trunk/unittests/CMakeLists.txt
cfe/trunk/unittests/Frontend/FrontendActionTest.cpp
cfe/trunk/unittests/Frontend/Makefile
Modified: cfe/trunk/examples/PrintFunctionNames/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/examples/PrintFunctionNames/CMakeLists.txt?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/examples/PrintFunctionNames/CMakeLists.txt (original)
+++ cfe/trunk/examples/PrintFunctionNames/CMakeLists.txt Thu Feb 17 20:25:12 2011
@@ -1,34 +1,11 @@
set(MODULE TRUE)
set( LLVM_USED_LIBS
- clangFrontendTool
clangFrontend
- clangDriver
- clangSerialization
- clangCodeGen
- clangParse
- clangSema
- clangStaticAnalyzerFrontend
- clangStaticAnalyzerCheckers
- clangStaticAnalyzerCore
- clangAnalysis
- clangIndex
- clangRewrite
clangAST
- clangLex
- clangBasic
)
-# Why do we have to link to all this just to print out function names?
-set( LLVM_LINK_COMPONENTS
- ${LLVM_TARGETS_TO_BUILD}
- asmparser
- bitreader
- bitwriter
- codegen
- ipo
- selectiondag
- )
+set( LLVM_LINK_COMPONENTS support mc)
add_clang_library(PrintFunctionNames PrintFunctionNames.cpp)
Modified: cfe/trunk/examples/clang-interpreter/main.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/examples/clang-interpreter/main.cpp?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/examples/clang-interpreter/main.cpp (original)
+++ cfe/trunk/examples/clang-interpreter/main.cpp Thu Feb 17 20:25:12 2011
@@ -17,7 +17,6 @@
#include "clang/Frontend/FrontendDiagnostic.h"
#include "clang/Frontend/TextDiagnosticPrinter.h"
-#include "llvm/LLVMContext.h"
#include "llvm/Module.h"
#include "llvm/Config/config.h"
#include "llvm/ADT/OwningPtr.h"
@@ -130,7 +129,6 @@
// Create a compiler instance to handle the actual work.
CompilerInstance Clang;
- Clang.setLLVMContext(new llvm::LLVMContext);
Clang.setInvocation(CI.take());
// Create the compilers actual diagnostics engine.
Modified: cfe/trunk/include/clang/CodeGen/CodeGenAction.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/CodeGenAction.h?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/include/clang/CodeGen/CodeGenAction.h (original)
+++ cfe/trunk/include/clang/CodeGen/CodeGenAction.h Thu Feb 17 20:25:12 2011
@@ -14,6 +14,7 @@
#include "llvm/ADT/OwningPtr.h"
namespace llvm {
+ class LLVMContext;
class Module;
}
@@ -24,9 +25,14 @@
private:
unsigned Act;
llvm::OwningPtr<llvm::Module> TheModule;
+ llvm::LLVMContext *VMContext;
+ bool OwnsVMContext;
protected:
- CodeGenAction(unsigned _Act);
+ /// Create a new code generation action. If the optional \arg _VMContext
+ /// parameter is supplied, the action uses it without taking ownership,
+ /// otherwise it creates a fresh LLVM context and takes ownership.
+ CodeGenAction(unsigned _Act, llvm::LLVMContext *_VMContext = 0);
virtual bool hasIRSupport() const;
@@ -44,37 +50,40 @@
/// been run. The result may be null on failure.
llvm::Module *takeModule();
+ /// Take the LLVM context used by this action.
+ llvm::LLVMContext *takeLLVMContext();
+
BackendConsumer *BEConsumer;
};
class EmitAssemblyAction : public CodeGenAction {
public:
- EmitAssemblyAction();
+ EmitAssemblyAction(llvm::LLVMContext *_VMContext = 0);
};
class EmitBCAction : public CodeGenAction {
public:
- EmitBCAction();
+ EmitBCAction(llvm::LLVMContext *_VMContext = 0);
};
class EmitLLVMAction : public CodeGenAction {
public:
- EmitLLVMAction();
+ EmitLLVMAction(llvm::LLVMContext *_VMContext = 0);
};
class EmitLLVMOnlyAction : public CodeGenAction {
public:
- EmitLLVMOnlyAction();
+ EmitLLVMOnlyAction(llvm::LLVMContext *_VMContext = 0);
};
class EmitCodeGenOnlyAction : public CodeGenAction {
public:
- EmitCodeGenOnlyAction();
+ EmitCodeGenOnlyAction(llvm::LLVMContext *_VMContext = 0);
};
class EmitObjAction : public CodeGenAction {
public:
- EmitObjAction();
+ EmitObjAction(llvm::LLVMContext *_VMContext = 0);
};
}
Modified: cfe/trunk/include/clang/Frontend/ASTConsumers.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/ASTConsumers.h?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/include/clang/Frontend/ASTConsumers.h (original)
+++ cfe/trunk/include/clang/Frontend/ASTConsumers.h Thu Feb 17 20:25:12 2011
@@ -18,8 +18,6 @@
namespace llvm {
class raw_ostream;
- class Module;
- class LLVMContext;
namespace sys { class Path; }
}
namespace clang {
Modified: cfe/trunk/include/clang/Frontend/CompilerInstance.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CompilerInstance.h?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/include/clang/Frontend/CompilerInstance.h (original)
+++ cfe/trunk/include/clang/Frontend/CompilerInstance.h Thu Feb 17 20:25:12 2011
@@ -19,7 +19,6 @@
#include <string>
namespace llvm {
-class LLVMContext;
class raw_ostream;
class raw_fd_ostream;
class Timer;
@@ -59,9 +58,6 @@
/// come in two forms; a short form that reuses the CompilerInstance objects,
/// and a long form that takes explicit instances of any required objects.
class CompilerInstance {
- /// The LLVM context used for this instance.
- llvm::OwningPtr<llvm::LLVMContext> LLVMContext;
-
/// The options used in this compiler instance.
llvm::OwningPtr<CompilerInvocation> Invocation;
@@ -155,23 +151,6 @@
bool ExecuteAction(FrontendAction &Act);
/// }
- /// @name LLVM Context
- /// {
-
- bool hasLLVMContext() const { return LLVMContext != 0; }
-
- llvm::LLVMContext &getLLVMContext() const {
- assert(LLVMContext && "Compiler instance has no LLVM context!");
- return *LLVMContext;
- }
-
- llvm::LLVMContext *takeLLVMContext() { return LLVMContext.take(); }
-
- /// setLLVMContext - Replace the current LLVM context and take ownership of
- /// \arg Value.
- void setLLVMContext(llvm::LLVMContext *Value);
-
- /// }
/// @name Compiler Invocation and Options
/// {
Modified: cfe/trunk/lib/CodeGen/CodeGenAction.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenAction.cpp?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenAction.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenAction.cpp Thu Feb 17 20:25:12 2011
@@ -224,9 +224,15 @@
//
-CodeGenAction::CodeGenAction(unsigned _Act) : Act(_Act) {}
-
-CodeGenAction::~CodeGenAction() {}
+CodeGenAction::CodeGenAction(unsigned _Act, LLVMContext *_VMContext)
+ : Act(_Act), VMContext(_VMContext ? _VMContext : new LLVMContext),
+ OwnsVMContext(!_VMContext) {}
+
+CodeGenAction::~CodeGenAction() {
+ TheModule.reset();
+ if (OwnsVMContext)
+ delete VMContext;
+}
bool CodeGenAction::hasIRSupport() const { return true; }
@@ -243,6 +249,11 @@
return TheModule.take();
}
+llvm::LLVMContext *CodeGenAction::takeLLVMContext() {
+ OwnsVMContext = false;
+ return VMContext;
+}
+
static raw_ostream *GetOutputStream(CompilerInstance &CI,
llvm::StringRef InFile,
BackendAction Action) {
@@ -275,7 +286,7 @@
new BackendConsumer(BA, CI.getDiagnostics(),
CI.getCodeGenOpts(), CI.getTargetOpts(),
CI.getFrontendOpts().ShowTimers, InFile, OS.take(),
- CI.getLLVMContext());
+ *VMContext);
return BEConsumer;
}
@@ -301,7 +312,7 @@
getCurrentFile().c_str());
llvm::SMDiagnostic Err;
- TheModule.reset(ParseIR(MainFileCopy, Err, CI.getLLVMContext()));
+ TheModule.reset(ParseIR(MainFileCopy, Err, *VMContext));
if (!TheModule) {
// Translate from the diagnostic info to the SourceManager location.
SourceLocation Loc = SM.getLocation(
@@ -332,15 +343,20 @@
//
-EmitAssemblyAction::EmitAssemblyAction()
- : CodeGenAction(Backend_EmitAssembly) {}
+EmitAssemblyAction::EmitAssemblyAction(llvm::LLVMContext *_VMContext)
+ : CodeGenAction(Backend_EmitAssembly, _VMContext) {}
-EmitBCAction::EmitBCAction() : CodeGenAction(Backend_EmitBC) {}
+EmitBCAction::EmitBCAction(llvm::LLVMContext *_VMContext)
+ : CodeGenAction(Backend_EmitBC, _VMContext) {}
-EmitLLVMAction::EmitLLVMAction() : CodeGenAction(Backend_EmitLL) {}
+EmitLLVMAction::EmitLLVMAction(llvm::LLVMContext *_VMContext)
+ : CodeGenAction(Backend_EmitLL, _VMContext) {}
-EmitLLVMOnlyAction::EmitLLVMOnlyAction() : CodeGenAction(Backend_EmitNothing) {}
+EmitLLVMOnlyAction::EmitLLVMOnlyAction(llvm::LLVMContext *_VMContext)
+ : CodeGenAction(Backend_EmitNothing, _VMContext) {}
-EmitCodeGenOnlyAction::EmitCodeGenOnlyAction() : CodeGenAction(Backend_EmitMCNull) {}
+EmitCodeGenOnlyAction::EmitCodeGenOnlyAction(llvm::LLVMContext *_VMContext)
+ : CodeGenAction(Backend_EmitMCNull, _VMContext) {}
-EmitObjAction::EmitObjAction() : CodeGenAction(Backend_EmitObj) {}
+EmitObjAction::EmitObjAction(llvm::LLVMContext *_VMContext)
+ : CodeGenAction(Backend_EmitObj, _VMContext) {}
Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Thu Feb 17 20:25:12 2011
@@ -27,7 +27,6 @@
#include "clang/Frontend/Utils.h"
#include "clang/Serialization/ASTReader.h"
#include "clang/Sema/CodeCompleteConsumer.h"
-#include "llvm/LLVMContext.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h"
@@ -47,10 +46,6 @@
CompilerInstance::~CompilerInstance() {
}
-void CompilerInstance::setLLVMContext(llvm::LLVMContext *Value) {
- LLVMContext.reset(Value);
-}
-
void CompilerInstance::setInvocation(CompilerInvocation *Value) {
Invocation.reset(Value);
}
Modified: cfe/trunk/tools/c-index-test/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/CMakeLists.txt?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/tools/c-index-test/CMakeLists.txt (original)
+++ cfe/trunk/tools/c-index-test/CMakeLists.txt Thu Feb 17 20:25:12 2011
@@ -1,9 +1,8 @@
set(LLVM_USED_LIBS libclang)
set( LLVM_LINK_COMPONENTS
- bitreader
+ support
mc
- core
)
add_clang_executable(c-index-test
Modified: cfe/trunk/tools/c-index-test/Makefile
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/Makefile?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/tools/c-index-test/Makefile (original)
+++ cfe/trunk/tools/c-index-test/Makefile Thu Feb 17 20:25:12 2011
@@ -13,7 +13,7 @@
# No plugins, optimize startup time.
TOOL_NO_EXPORTS = 1
-LINK_COMPONENTS := bitreader mc core
+LINK_COMPONENTS := support mc
USEDLIBS = clang.a clangIndex.a clangFrontend.a clangDriver.a \
clangSerialization.a clangParse.a clangSema.a clangAnalysis.a \
clangAST.a clangLex.a clangBasic.a
Modified: cfe/trunk/tools/driver/cc1_main.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1_main.cpp?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/tools/driver/cc1_main.cpp (original)
+++ cfe/trunk/tools/driver/cc1_main.cpp Thu Feb 17 20:25:12 2011
@@ -24,7 +24,6 @@
#include "clang/Frontend/TextDiagnosticBuffer.h"
#include "clang/Frontend/TextDiagnosticPrinter.h"
#include "clang/FrontendTool/Utils.h"
-#include "llvm/LLVMContext.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/ManagedStatic.h"
@@ -118,8 +117,6 @@
llvm::OwningPtr<CompilerInstance> Clang(new CompilerInstance());
llvm::IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());
- Clang->setLLVMContext(new llvm::LLVMContext());
-
// Run clang -cc1 test.
if (ArgBegin != ArgEnd && llvm::StringRef(ArgBegin[0]) == "-cc1test") {
Diagnostic Diags(DiagID, new TextDiagnosticPrinter(llvm::errs(),
Modified: cfe/trunk/tools/libclang/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CMakeLists.txt?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/CMakeLists.txt (original)
+++ cfe/trunk/tools/libclang/CMakeLists.txt Thu Feb 17 20:25:12 2011
@@ -11,9 +11,8 @@
clangBasic)
set( LLVM_LINK_COMPONENTS
- bitreader
+ support
mc
- core
)
add_clang_library(libclang
Modified: cfe/trunk/tools/libclang/Makefile
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/Makefile?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/Makefile (original)
+++ cfe/trunk/tools/libclang/Makefile Thu Feb 17 20:25:12 2011
@@ -15,7 +15,7 @@
LINK_LIBS_IN_SHARED = 1
SHARED_LIBRARY = 1
-LINK_COMPONENTS := bitreader mc core
+LINK_COMPONENTS := support mc
USEDLIBS = clangFrontend.a clangDriver.a clangSerialization.a clangParse.a \
clangSema.a clangAnalysis.a clangAST.a clangLex.a clangBasic.a
Modified: cfe/trunk/unittests/Basic/Makefile
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Basic/Makefile?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/unittests/Basic/Makefile (original)
+++ cfe/trunk/unittests/Basic/Makefile Thu Feb 17 20:25:12 2011
@@ -9,7 +9,7 @@
CLANG_LEVEL = ../..
TESTNAME = Basic
-LINK_COMPONENTS := core support mc
+LINK_COMPONENTS := support mc
USEDLIBS = clangBasic.a
include $(CLANG_LEVEL)/unittests/Makefile
Modified: cfe/trunk/unittests/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/CMakeLists.txt?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/unittests/CMakeLists.txt (original)
+++ cfe/trunk/unittests/CMakeLists.txt Thu Feb 17 20:25:12 2011
@@ -37,13 +37,13 @@
endif()
add_clang_unittest(Basic
- "Core"
+ "support mc"
"gtest gtest_main clangBasic"
Basic/FileManagerTest.cpp
)
add_clang_unittest(Frontend
- "Core"
+ "support mc"
"gtest gtest_main clangFrontend"
Frontend/FrontendActionTest.cpp
)
Modified: cfe/trunk/unittests/Frontend/FrontendActionTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Frontend/FrontendActionTest.cpp?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/unittests/Frontend/FrontendActionTest.cpp (original)
+++ cfe/trunk/unittests/Frontend/FrontendActionTest.cpp Thu Feb 17 20:25:12 2011
@@ -14,7 +14,6 @@
#include "clang/Frontend/FrontendAction.h"
#include "llvm/ADT/Triple.h"
-#include "llvm/LLVMContext.h"
#include "llvm/Support/MemoryBuffer.h"
#include "gtest/gtest.h"
@@ -61,7 +60,6 @@
invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly;
invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu";
CompilerInstance compiler;
- compiler.setLLVMContext(new LLVMContext);
compiler.setInvocation(invocation);
compiler.createDiagnostics(0, NULL);
Modified: cfe/trunk/unittests/Frontend/Makefile
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Frontend/Makefile?rev=125820&r1=125819&r2=125820&view=diff
==============================================================================
--- cfe/trunk/unittests/Frontend/Makefile (original)
+++ cfe/trunk/unittests/Frontend/Makefile Thu Feb 17 20:25:12 2011
@@ -9,7 +9,7 @@
CLANG_LEVEL = ../..
TESTNAME = Frontend
-LINK_COMPONENTS := core support mc
+LINK_COMPONENTS := support mc
USEDLIBS = clangFrontendTool.a clangFrontend.a clangDriver.a \
clangSerialization.a clangCodeGen.a clangParse.a clangSema.a \
clangStaticAnalyzerCheckers.a clangStaticAnalyzerCore.a \
More information about the cfe-commits
mailing list