From 8f5cf74c77e65847201cb7d0c894d2f7b78366be Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Sat, 19 Feb 2011 23:03:58 +0000 Subject: [PATCH] Re-instate r125819 and r125820 with no functionality change llvm-svn: 126060 --- .../PrintFunctionNames/CMakeLists.txt | 25 +----------- clang/examples/clang-interpreter/main.cpp | 2 - clang/include/clang/Basic/TargetInfo.h | 8 ---- clang/include/clang/CodeGen/CodeGenAction.h | 23 +++++++---- clang/include/clang/Frontend/ASTConsumers.h | 2 - .../include/clang/Frontend/CompilerInstance.h | 21 ---------- clang/lib/Basic/Targets.cpp | 12 ------ clang/lib/CodeGen/CGStmt.cpp | 9 +++-- clang/lib/CodeGen/CodeGenAction.cpp | 38 +++++++++++++------ clang/lib/CodeGen/TargetInfo.cpp | 22 +++++++++++ clang/lib/CodeGen/TargetInfo.h | 9 +++++ clang/lib/Frontend/CompilerInstance.cpp | 5 --- clang/tools/c-index-test/CMakeLists.txt | 3 +- clang/tools/c-index-test/Makefile | 2 +- clang/tools/driver/cc1_main.cpp | 3 -- clang/tools/libclang/CMakeLists.txt | 3 +- clang/tools/libclang/Makefile | 2 +- clang/unittests/Basic/Makefile | 2 +- .../unittests/Frontend/FrontendActionTest.cpp | 2 - clang/unittests/Frontend/Makefile | 2 +- 20 files changed, 86 insertions(+), 109 deletions(-) diff --git a/clang/examples/PrintFunctionNames/CMakeLists.txt b/clang/examples/PrintFunctionNames/CMakeLists.txt index 58b4603e9b6d..86793ce7e187 100644 --- a/clang/examples/PrintFunctionNames/CMakeLists.txt +++ b/clang/examples/PrintFunctionNames/CMakeLists.txt @@ -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) diff --git a/clang/examples/clang-interpreter/main.cpp b/clang/examples/clang-interpreter/main.cpp index 835a5a90ad17..a99766f9a314 100644 --- a/clang/examples/clang-interpreter/main.cpp +++ b/clang/examples/clang-interpreter/main.cpp @@ -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 @@ int main(int argc, const char **argv, char * const *envp) { // 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. diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 586680bbd02d..b9087f2c47e8 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -26,8 +26,6 @@ namespace llvm { struct fltSemantics; class StringRef; -class LLVMContext; -class Type; } namespace clang { @@ -532,12 +530,6 @@ public: virtual const char *getStaticInitSectionSpecifier() const { return 0; } - - virtual const llvm::Type* adjustInlineAsmType(std::string& Constraint, - const llvm::Type* Ty, - llvm::LLVMContext& Context) const { - return Ty; - } protected: virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { return PointerWidth; diff --git a/clang/include/clang/CodeGen/CodeGenAction.h b/clang/include/clang/CodeGen/CodeGenAction.h index b55effc6be07..052c6603f5a7 100644 --- a/clang/include/clang/CodeGen/CodeGenAction.h +++ b/clang/include/clang/CodeGen/CodeGenAction.h @@ -14,6 +14,7 @@ #include "llvm/ADT/OwningPtr.h" namespace llvm { + class LLVMContext; class Module; } @@ -24,9 +25,14 @@ class CodeGenAction : public ASTFrontendAction { private: unsigned Act; llvm::OwningPtr 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 @@ public: /// 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); }; } diff --git a/clang/include/clang/Frontend/ASTConsumers.h b/clang/include/clang/Frontend/ASTConsumers.h index e2071df8e32c..c45bd4070600 100644 --- a/clang/include/clang/Frontend/ASTConsumers.h +++ b/clang/include/clang/Frontend/ASTConsumers.h @@ -18,8 +18,6 @@ namespace llvm { class raw_ostream; - class Module; - class LLVMContext; namespace sys { class Path; } } namespace clang { diff --git a/clang/include/clang/Frontend/CompilerInstance.h b/clang/include/clang/Frontend/CompilerInstance.h index 430cc603c78f..7ea79e5599ff 100644 --- a/clang/include/clang/Frontend/CompilerInstance.h +++ b/clang/include/clang/Frontend/CompilerInstance.h @@ -19,7 +19,6 @@ #include namespace llvm { -class LLVMContext; class raw_ostream; class raw_fd_ostream; class Timer; @@ -59,9 +58,6 @@ class TargetInfo; /// 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 LLVMContext; - /// The options used in this compiler instance. llvm::OwningPtr Invocation; @@ -154,23 +150,6 @@ public: // of the context or else not CompilerInstance specific. 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 /// { diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index b3501a31c807..a8198e4ae79e 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -1014,9 +1014,6 @@ public: } virtual bool validateAsmConstraint(const char *&Name, TargetInfo::ConstraintInfo &info) const; - virtual const llvm::Type* adjustInlineAsmType(std::string& Constraint, - const llvm::Type* Ty, - llvm::LLVMContext& Context) const; virtual std::string convertConstraint(const char Constraint) const; virtual const char *getClobbers() const { return "~{dirflag},~{fpsr},~{flags}"; @@ -1341,15 +1338,6 @@ X86TargetInfo::validateAsmConstraint(const char *&Name, return false; } -const llvm::Type* -X86TargetInfo::adjustInlineAsmType(std::string& Constraint, - const llvm::Type* Ty, - llvm::LLVMContext &Context) const { - if (Constraint=="y" && Ty->isVectorTy()) - return llvm::Type::getX86_MMXTy(Context); - return Ty; -} - std::string X86TargetInfo::convertConstraint(const char Constraint) const { diff --git a/clang/lib/CodeGen/CGStmt.cpp b/clang/lib/CodeGen/CGStmt.cpp index f809c009ce11..cd238112ed1d 100644 --- a/clang/lib/CodeGen/CGStmt.cpp +++ b/clang/lib/CodeGen/CGStmt.cpp @@ -14,6 +14,7 @@ #include "CGDebugInfo.h" #include "CodeGenModule.h" #include "CodeGenFunction.h" +#include "TargetInfo.h" #include "clang/AST/StmtVisitor.h" #include "clang/Basic/PrettyStackTrace.h" #include "clang/Basic/TargetInfo.h" @@ -1135,8 +1136,8 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) { } } if (const llvm::Type* AdjTy = - Target.adjustInlineAsmType(OutputConstraint, ResultRegTypes.back(), - getLLVMContext())) + getTargetHooks().adjustInlineAsmType(*this, OutputConstraint, + ResultRegTypes.back())) ResultRegTypes.back() = AdjTy; } else { ArgTypes.push_back(Dest.getAddress()->getType()); @@ -1207,8 +1208,8 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) { } } if (const llvm::Type* AdjTy = - Target.adjustInlineAsmType(InputConstraint, Arg->getType(), - getLLVMContext())) + getTargetHooks().adjustInlineAsmType(*this, InputConstraint, + Arg->getType())) Arg = Builder.CreateBitCast(Arg, AdjTy); ArgTypes.push_back(Arg->getType()); diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp index 69ac995a468b..a24bbc480c19 100644 --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -224,9 +224,15 @@ void BackendConsumer::InlineAsmDiagHandler2(const llvm::SMDiagnostic &D, // -CodeGenAction::CodeGenAction(unsigned _Act) : Act(_Act) {} +CodeGenAction::CodeGenAction(unsigned _Act, LLVMContext *_VMContext) + : Act(_Act), VMContext(_VMContext ? _VMContext : new LLVMContext), + OwnsVMContext(!_VMContext) {} -CodeGenAction::~CodeGenAction() {} +CodeGenAction::~CodeGenAction() { + TheModule.reset(); + if (OwnsVMContext) + delete VMContext; +} bool CodeGenAction::hasIRSupport() const { return true; } @@ -243,6 +249,11 @@ llvm::Module *CodeGenAction::takeModule() { 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 @@ ASTConsumer *CodeGenAction::CreateASTConsumer(CompilerInstance &CI, new BackendConsumer(BA, CI.getDiagnostics(), CI.getCodeGenOpts(), CI.getTargetOpts(), CI.getFrontendOpts().ShowTimers, InFile, OS.take(), - CI.getLLVMContext()); + *VMContext); return BEConsumer; } @@ -301,7 +312,7 @@ void CodeGenAction::ExecuteAction() { 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 @@ void CodeGenAction::ExecuteAction() { // -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) {} diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index 881a7ee4d04b..d74b3f32d954 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -355,6 +355,14 @@ bool UseX86_MMXType(const llvm::Type *IRType) { IRType->getScalarSizeInBits() != 64; } +static const llvm::Type* X86AdjustInlineAsmType(CodeGen::CodeGenFunction &CGF, + llvm::StringRef Constraint, + const llvm::Type* Ty) { + if (Constraint=="y" && Ty->isVectorTy()) + return llvm::Type::getX86_MMXTy(CGF.getLLVMContext()); + return Ty; +} + //===----------------------------------------------------------------------===// // X86-32 ABI Implementation //===----------------------------------------------------------------------===// @@ -415,6 +423,13 @@ public: bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF, llvm::Value *Address) const; + + const llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF, + llvm::StringRef Constraint, + const llvm::Type* Ty) const { + return X86AdjustInlineAsmType(CGF, Constraint, Ty); + } + }; } @@ -895,6 +910,13 @@ public: return false; } + + const llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF, + llvm::StringRef Constraint, + const llvm::Type* Ty) const { + return X86AdjustInlineAsmType(CGF, Constraint, Ty); + } + }; class WinX86_64TargetCodeGenInfo : public TargetCodeGenInfo { diff --git a/clang/lib/CodeGen/TargetInfo.h b/clang/lib/CodeGen/TargetInfo.h index 9d4cf1610308..4f59eb619e9d 100644 --- a/clang/lib/CodeGen/TargetInfo.h +++ b/clang/lib/CodeGen/TargetInfo.h @@ -15,8 +15,11 @@ #ifndef CLANG_CODEGEN_TARGETINFO_H #define CLANG_CODEGEN_TARGETINFO_H +#include "llvm/ADT/StringRef.h" + namespace llvm { class GlobalValue; + class Type; class Value; } @@ -102,6 +105,12 @@ namespace clang { llvm::Value *Address) const { return Address; } + + virtual const llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF, + llvm::StringRef Constraint, + const llvm::Type* Ty) const { + return Ty; + } }; } diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index 412e7111e480..fd593de560c0 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -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() CompilerInstance::~CompilerInstance() { } -void CompilerInstance::setLLVMContext(llvm::LLVMContext *Value) { - LLVMContext.reset(Value); -} - void CompilerInstance::setInvocation(CompilerInvocation *Value) { Invocation.reset(Value); } diff --git a/clang/tools/c-index-test/CMakeLists.txt b/clang/tools/c-index-test/CMakeLists.txt index 9169fc7422a0..45ad9e35c6ef 100644 --- a/clang/tools/c-index-test/CMakeLists.txt +++ b/clang/tools/c-index-test/CMakeLists.txt @@ -1,9 +1,8 @@ set(LLVM_USED_LIBS libclang) set( LLVM_LINK_COMPONENTS - bitreader + support mc - core ) add_clang_executable(c-index-test diff --git a/clang/tools/c-index-test/Makefile b/clang/tools/c-index-test/Makefile index f41aa8098155..3d9849a3a401 100644 --- a/clang/tools/c-index-test/Makefile +++ b/clang/tools/c-index-test/Makefile @@ -13,7 +13,7 @@ TOOLNAME = c-index-test # 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 diff --git a/clang/tools/driver/cc1_main.cpp b/clang/tools/driver/cc1_main.cpp index 1f8d1129dad1..7fb394fa5b01 100644 --- a/clang/tools/driver/cc1_main.cpp +++ b/clang/tools/driver/cc1_main.cpp @@ -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 @@ int cc1_main(const char **ArgBegin, const char **ArgEnd, llvm::OwningPtr Clang(new CompilerInstance()); llvm::IntrusiveRefCntPtr 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(), diff --git a/clang/tools/libclang/CMakeLists.txt b/clang/tools/libclang/CMakeLists.txt index 661fddd822e0..da72f5a02d01 100644 --- a/clang/tools/libclang/CMakeLists.txt +++ b/clang/tools/libclang/CMakeLists.txt @@ -11,9 +11,8 @@ set(LLVM_USED_LIBS clangBasic) set( LLVM_LINK_COMPONENTS - bitreader + support mc - core ) add_clang_library(libclang diff --git a/clang/tools/libclang/Makefile b/clang/tools/libclang/Makefile index 6d2a13cfc0b4..e684652aa4ca 100644 --- a/clang/tools/libclang/Makefile +++ b/clang/tools/libclang/Makefile @@ -15,7 +15,7 @@ EXPORTED_SYMBOL_FILE = $(PROJ_SRC_DIR)/libclang.exports 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 diff --git a/clang/unittests/Basic/Makefile b/clang/unittests/Basic/Makefile index e7ac57cbe19c..4bac50c12ab3 100644 --- a/clang/unittests/Basic/Makefile +++ b/clang/unittests/Basic/Makefile @@ -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 diff --git a/clang/unittests/Frontend/FrontendActionTest.cpp b/clang/unittests/Frontend/FrontendActionTest.cpp index 49a63983f052..a32388a062e9 100644 --- a/clang/unittests/Frontend/FrontendActionTest.cpp +++ b/clang/unittests/Frontend/FrontendActionTest.cpp @@ -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 @@ TEST(ASTFrontendAction, Sanity) { 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); diff --git a/clang/unittests/Frontend/Makefile b/clang/unittests/Frontend/Makefile index cdbfb4c57c98..4d9937f517cf 100644 --- a/clang/unittests/Frontend/Makefile +++ b/clang/unittests/Frontend/Makefile @@ -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 \