From 45d196b8387dcefc4df26cda114fa34c6528e928 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sat, 1 Nov 2008 01:53:16 +0000 Subject: [PATCH] Move IRBuilder type definition to common file. - No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58546 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGBuilder.h | 21 +++++++++++++++++++++ lib/CodeGen/CGDebugInfo.cpp | 11 +++++------ lib/CodeGen/CGDebugInfo.h | 15 +++++++-------- lib/CodeGen/CGExprAgg.cpp | 2 +- lib/CodeGen/CGExprComplex.cpp | 2 +- lib/CodeGen/CGExprScalar.cpp | 2 +- lib/CodeGen/CGObjCGNU.cpp | 15 +++++++-------- lib/CodeGen/CGObjCMac.cpp | 21 ++++++++++----------- lib/CodeGen/CGObjCRuntime.h | 11 +++++------ lib/CodeGen/CodeGenFunction.h | 6 +++--- 10 files changed, 61 insertions(+), 45 deletions(-) create mode 100644 lib/CodeGen/CGBuilder.h diff --git a/lib/CodeGen/CGBuilder.h b/lib/CodeGen/CGBuilder.h new file mode 100644 index 0000000000..7d6e868159 --- /dev/null +++ b/lib/CodeGen/CGBuilder.h @@ -0,0 +1,21 @@ +//===-- CGBuilder.h - Choose IRBuilder implementation ----------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef CLANG_CODEGEN_CGBUILDER_H +#define CLANG_CODEGEN_CGBUILDER_H + +#include "llvm/Support/IRBuilder.h" + +namespace clang { +namespace CodeGen { + typedef llvm::IRBuilder<> CGBuilderTy; +} // end namespace CodeGen +} // end namespace clang + +#endif diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 7641c4ee15..478f862775 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -27,7 +27,6 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/Support/Dwarf.h" -#include "llvm/Support/IRBuilder.h" #include "llvm/Target/TargetMachine.h" using namespace clang; using namespace clang::CodeGen; @@ -603,7 +602,7 @@ CGDebugInfo::getOrCreateType(QualType type, llvm::CompileUnitDesc *Unit) void CGDebugInfo::EmitFunctionStart(const char *Name, QualType ReturnType, llvm::Function *Fn, - llvm::IRBuilder<> &Builder) + CGBuilderTy &Builder) { // Create subprogram descriptor. Subprogram = new llvm::SubprogramDesc(); @@ -647,7 +646,7 @@ void CGDebugInfo::EmitFunctionStart(const char *Name, void -CGDebugInfo::EmitStopPoint(llvm::Function *Fn, llvm::IRBuilder<> &Builder) +CGDebugInfo::EmitStopPoint(llvm::Function *Fn, CGBuilderTy &Builder) { if (CurLoc.isInvalid() || CurLoc.isMacroID()) return; @@ -682,7 +681,7 @@ CGDebugInfo::EmitStopPoint(llvm::Function *Fn, llvm::IRBuilder<> &Builder) /// EmitRegionStart- Constructs the debug code for entering a declarative /// region - "llvm.dbg.region.start.". void CGDebugInfo::EmitRegionStart(llvm::Function *Fn, - llvm::IRBuilder<> &Builder) + CGBuilderTy &Builder) { llvm::BlockDesc *Block = new llvm::BlockDesc(); if (!RegionStack.empty()) @@ -700,7 +699,7 @@ void CGDebugInfo::EmitRegionStart(llvm::Function *Fn, /// EmitRegionEnd - Constructs the debug code for exiting a declarative /// region - "llvm.dbg.region.end." -void CGDebugInfo::EmitRegionEnd(llvm::Function *Fn, llvm::IRBuilder<> &Builder) +void CGDebugInfo::EmitRegionEnd(llvm::Function *Fn, CGBuilderTy &Builder) { assert(!RegionStack.empty() && "Region stack mismatch, stack empty!"); @@ -722,7 +721,7 @@ void CGDebugInfo::EmitRegionEnd(llvm::Function *Fn, llvm::IRBuilder<> &Builder) /// EmitDeclare - Emit local variable declaration debug info. void CGDebugInfo::EmitDeclare(const VarDecl *decl, unsigned Tag, llvm::Value *AI, - llvm::IRBuilder<> &Builder) + CGBuilderTy &Builder) { assert(!RegionStack.empty() && "Region stack mismatch, stack empty!"); diff --git a/lib/CodeGen/CGDebugInfo.h b/lib/CodeGen/CGDebugInfo.h index 9e5ad17b0f..9f25812406 100644 --- a/lib/CodeGen/CGDebugInfo.h +++ b/lib/CodeGen/CGDebugInfo.h @@ -16,10 +16,10 @@ #include "clang/AST/Type.h" #include "clang/Basic/SourceLocation.h" -#include "llvm/Support/IRBuilder.h" #include #include +#include "CGBuilder.h" namespace llvm { class Function; @@ -41,6 +41,7 @@ namespace llvm { namespace clang { class FunctionDecl; class VarDecl; + namespace CodeGen { class CodeGenModule; @@ -54,8 +55,6 @@ private: SourceLocation CurLoc; SourceLocation PrevLoc; - typedef llvm::IRBuilder<> BuilderType; - /// CompileUnitCache - Cache of previously constructed CompileUnits. std::map CompileUnitCache; @@ -109,24 +108,24 @@ public: /// EmitStopPoint - Emit a call to llvm.dbg.stoppoint to indicate a change of /// source line. - void EmitStopPoint(llvm::Function *Fn, BuilderType &Builder); + void EmitStopPoint(llvm::Function *Fn, CGBuilderTy &Builder); /// EmitFunctionStart - Emit a call to llvm.dbg.function.start to indicate /// start of a new function. void EmitFunctionStart(const char *Name, QualType ReturnType, - llvm::Function *Fn, BuilderType &Builder); + llvm::Function *Fn, CGBuilderTy &Builder); /// EmitRegionStart - Emit a call to llvm.dbg.region.start to indicate start /// of a new block. - void EmitRegionStart(llvm::Function *Fn, BuilderType &Builder); + void EmitRegionStart(llvm::Function *Fn, CGBuilderTy &Builder); /// EmitRegionEnd - Emit call to llvm.dbg.region.end to indicate end of a /// block. - void EmitRegionEnd(llvm::Function *Fn, BuilderType &Builder); + void EmitRegionEnd(llvm::Function *Fn, CGBuilderTy &Builder); /// EmitDeclare - Emit call to llvm.dbg.declare for a variable declaration. void EmitDeclare(const VarDecl *decl, unsigned Tag, llvm::Value *AI, - BuilderType &Builder); + CGBuilderTy &Builder); /// EmitGlobalVariable - Emit information about a global variable. void EmitGlobalVariable(llvm::GlobalVariable *GV, const VarDecl *decl); diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp index e81a64ffa5..28fb9a338d 100644 --- a/lib/CodeGen/CGExprAgg.cpp +++ b/lib/CodeGen/CGExprAgg.cpp @@ -30,7 +30,7 @@ using namespace CodeGen; namespace { class VISIBILITY_HIDDEN AggExprEmitter : public StmtVisitor { CodeGenFunction &CGF; - llvm::IRBuilder<> &Builder; + CGBuilderTy &Builder; llvm::Value *DestPtr; bool VolatileDest; public: diff --git a/lib/CodeGen/CGExprComplex.cpp b/lib/CodeGen/CGExprComplex.cpp index abd0ca8527..11bc780452 100644 --- a/lib/CodeGen/CGExprComplex.cpp +++ b/lib/CodeGen/CGExprComplex.cpp @@ -32,7 +32,7 @@ namespace { class VISIBILITY_HIDDEN ComplexExprEmitter : public StmtVisitor { CodeGenFunction &CGF; - llvm::IRBuilder<> &Builder; + CGBuilderTy &Builder; public: ComplexExprEmitter(CodeGenFunction &cgf) : CGF(cgf), Builder(CGF.Builder) { } diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 2e2eea3e31..487cfcc57b 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -43,7 +43,7 @@ namespace { class VISIBILITY_HIDDEN ScalarExprEmitter : public StmtVisitor { CodeGenFunction &CGF; - llvm::IRBuilder<> &Builder; + CGBuilderTy &Builder; public: diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp index 2a43cedcfc..4afbf3c2fb 100644 --- a/lib/CodeGen/CGObjCGNU.cpp +++ b/lib/CodeGen/CGObjCGNU.cpp @@ -24,7 +24,6 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" #include "llvm/Support/Compiler.h" -#include "llvm/Support/IRBuilder.h" #include "llvm/Target/TargetData.h" #include using namespace clang; @@ -110,14 +109,14 @@ public: llvm::Value *Receiver, bool IsClassMessage, const CallArgList &CallArgs); - virtual llvm::Value *GetClass(llvm::IRBuilder<> &Builder, + virtual llvm::Value *GetClass(CGBuilderTy &Builder, const ObjCInterfaceDecl *OID); - virtual llvm::Value *GetSelector(llvm::IRBuilder<> &Builder, Selector Sel); + virtual llvm::Value *GetSelector(CGBuilderTy &Builder, Selector Sel); virtual llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD); virtual void GenerateCategory(const ObjCCategoryImplDecl *CMD); virtual void GenerateClass(const ObjCImplementationDecl *ClassDecl); - virtual llvm::Value *GenerateProtocolRef(llvm::IRBuilder<> &Builder, + virtual llvm::Value *GenerateProtocolRef(CGBuilderTy &Builder, const ObjCProtocolDecl *PD); virtual void GenerateProtocol(const ObjCProtocolDecl *PD); virtual llvm::Function *ModuleInitFunction(); @@ -182,7 +181,7 @@ CGObjCGNU::CGObjCGNU(CodeGen::CodeGenModule &cgm) } // This has to perform the lookup every time, since posing and related // techniques can modify the name -> class mapping. -llvm::Value *CGObjCGNU::GetClass(llvm::IRBuilder<> &Builder, +llvm::Value *CGObjCGNU::GetClass(CGBuilderTy &Builder, const ObjCInterfaceDecl *OID) { llvm::Value *ClassName = CGM.GetAddrOfConstantCString(OID->getName()); ClassName = Builder.CreateStructGEP(ClassName, 0); @@ -194,7 +193,7 @@ llvm::Value *CGObjCGNU::GetClass(llvm::IRBuilder<> &Builder, } /// GetSelector - Return the pointer to the unique'd string for this selector. -llvm::Value *CGObjCGNU::GetSelector(llvm::IRBuilder<> &Builder, Selector Sel) { +llvm::Value *CGObjCGNU::GetSelector(CGBuilderTy &Builder, Selector Sel) { // FIXME: uniquing on the string is wasteful, unique on Sel instead! llvm::GlobalAlias *&US = UntypedSelectors[Sel.getName()]; if (US == 0) @@ -553,7 +552,7 @@ llvm::Constant *CGObjCGNU::GenerateProtocolList( return MakeGlobal(ProtocolListTy, Elements, ".objc_protocol_list"); } -llvm::Value *CGObjCGNU::GenerateProtocolRef(llvm::IRBuilder<> &Builder, +llvm::Value *CGObjCGNU::GenerateProtocolRef(CGBuilderTy &Builder, const ObjCProtocolDecl *PD) { return ExistingProtocols[PD->getName()]; } @@ -911,7 +910,7 @@ llvm::Function *CGObjCGNU::ModuleInitFunction() { llvm::GlobalValue::InternalLinkage, ".objc_load_function", &TheModule); llvm::BasicBlock *EntryBB = llvm::BasicBlock::Create("entry", LoadFunction); - llvm::IRBuilder<> Builder; + CGBuilderTy Builder; Builder.SetInsertPoint(EntryBB); llvm::Value *Register = TheModule.getOrInsertFunction("__objc_exec_class", llvm::Type::VoidTy, llvm::PointerType::getUnqual(ModuleTy), NULL); diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index d5a21bb769..4ac6260d9b 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -22,7 +22,6 @@ #include "llvm/Module.h" #include "llvm/ADT/DenseSet.h" -#include "llvm/Support/IRBuilder.h" #include "llvm/Target/TargetData.h" #include @@ -257,7 +256,7 @@ private: /// EmitClassRef - Return a Value*, of type ObjCTypes.ClassPtrTy, /// for the given class. - llvm::Value *EmitClassRef(llvm::IRBuilder<> &Builder, + llvm::Value *EmitClassRef(CGBuilderTy &Builder, const ObjCInterfaceDecl *ID); CodeGen::RValue EmitMessageSend(CodeGen::CodeGenFunction &CGF, @@ -349,7 +348,7 @@ private: /// EmitSelector - Return a Value*, of type ObjCTypes.SelectorPtrTy, /// for the given selector. - llvm::Value *EmitSelector(llvm::IRBuilder<> &Builder, Selector Sel); + llvm::Value *EmitSelector(CGBuilderTy &Builder, Selector Sel); /// GetProtocolRef - Return a reference to the internal protocol /// description, creating an empty one if it has not been @@ -406,10 +405,10 @@ public: bool IsClassMessage, const CallArgList &CallArgs); - virtual llvm::Value *GetClass(llvm::IRBuilder<> &Builder, + virtual llvm::Value *GetClass(CGBuilderTy &Builder, const ObjCInterfaceDecl *ID); - virtual llvm::Value *GetSelector(llvm::IRBuilder<> &Builder, Selector Sel); + virtual llvm::Value *GetSelector(CGBuilderTy &Builder, Selector Sel); virtual llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD); @@ -417,7 +416,7 @@ public: virtual void GenerateClass(const ObjCImplementationDecl *ClassDecl); - virtual llvm::Value *GenerateProtocolRef(llvm::IRBuilder<> &Builder, + virtual llvm::Value *GenerateProtocolRef(CGBuilderTy &Builder, const ObjCProtocolDecl *PD); virtual void GenerateProtocol(const ObjCProtocolDecl *PD); @@ -464,13 +463,13 @@ CGObjCMac::CGObjCMac(CodeGen::CodeGenModule &cgm) /// GetClass - Return a reference to the class for the given interface /// decl. -llvm::Value *CGObjCMac::GetClass(llvm::IRBuilder<> &Builder, +llvm::Value *CGObjCMac::GetClass(CGBuilderTy &Builder, const ObjCInterfaceDecl *ID) { return EmitClassRef(Builder, ID); } /// GetSelector - Return the pointer to the unique'd string for this selector. -llvm::Value *CGObjCMac::GetSelector(llvm::IRBuilder<> &Builder, Selector Sel) { +llvm::Value *CGObjCMac::GetSelector(CGBuilderTy &Builder, Selector Sel) { return EmitSelector(Builder, Sel); } @@ -577,7 +576,7 @@ CodeGen::RValue CGObjCMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF, return CGF.EmitCall(Fn, ResultType, ActualArgs); } -llvm::Value *CGObjCMac::GenerateProtocolRef(llvm::IRBuilder<> &Builder, +llvm::Value *CGObjCMac::GenerateProtocolRef(CGBuilderTy &Builder, const ObjCProtocolDecl *PD) { // FIXME: I don't understand why gcc generates this, or where it is // resolved. Investigate. Its also wasteful to look this up over and @@ -1873,7 +1872,7 @@ llvm::Constant *CGObjCMac::EmitModuleSymbols() { return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.SymtabPtrTy); } -llvm::Value *CGObjCMac::EmitClassRef(llvm::IRBuilder<> &Builder, +llvm::Value *CGObjCMac::EmitClassRef(CGBuilderTy &Builder, const ObjCInterfaceDecl *ID) { LazySymbols.insert(ID->getIdentifier()); @@ -1895,7 +1894,7 @@ llvm::Value *CGObjCMac::EmitClassRef(llvm::IRBuilder<> &Builder, return Builder.CreateLoad(Entry, false, "tmp"); } -llvm::Value *CGObjCMac::EmitSelector(llvm::IRBuilder<> &Builder, Selector Sel) { +llvm::Value *CGObjCMac::EmitSelector(CGBuilderTy &Builder, Selector Sel) { llvm::GlobalVariable *&Entry = SelectorReferences[Sel]; if (!Entry) { diff --git a/lib/CodeGen/CGObjCRuntime.h b/lib/CodeGen/CGObjCRuntime.h index fe3032193d..d690289f14 100644 --- a/lib/CodeGen/CGObjCRuntime.h +++ b/lib/CodeGen/CGObjCRuntime.h @@ -17,11 +17,11 @@ #define CLANG_CODEGEN_OBCJRUNTIME_H #include "clang/Basic/IdentifierTable.h" // Selector #include "llvm/ADT/SmallVector.h" -#include "llvm/Support/IRBuilder.h" #include -#include "CGValue.h" +#include "CGBuilder.h" #include "CGCall.h" +#include "CGValue.h" namespace llvm { class Constant; @@ -54,7 +54,6 @@ namespace CodeGen { /// Implements runtime-specific code generation functions. class CGObjCRuntime { - typedef llvm::IRBuilder<> BuilderType; public: virtual ~CGObjCRuntime(); @@ -66,7 +65,7 @@ public: /// Get a selector for the specified name and type values. The /// return value should have the LLVM type for pointer-to /// ASTContext::getObjCSelType(). - virtual llvm::Value *GetSelector(BuilderType &Builder, + virtual llvm::Value *GetSelector(CGBuilderTy &Builder, Selector Sel) = 0; /// Generate a constant string object. @@ -102,7 +101,7 @@ public: /// Emit the code to return the named protocol as an object, as in a /// @protocol expression. - virtual llvm::Value *GenerateProtocolRef(llvm::IRBuilder &Builder, + virtual llvm::Value *GenerateProtocolRef(CGBuilderTy &Builder, const ObjCProtocolDecl *OPD) = 0; /// Generate the named protocol. Protocols contain method metadata but no @@ -126,7 +125,7 @@ public: /// GetClass - Return a reference to the class for the given /// interface decl. - virtual llvm::Value *GetClass(BuilderType &Builder, + virtual llvm::Value *GetClass(CGBuilderTy &Builder, const ObjCInterfaceDecl *OID) = 0; /// EnumerationMutationFunction - Return the function that's called by the diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index d57efa94f5..797cbf42b2 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -17,7 +17,6 @@ #include "clang/AST/Type.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallVector.h" -#include "llvm/Support/IRBuilder.h" #include "clang/AST/Expr.h" #include "clang/AST/ExprCXX.h" #include "clang/AST/ExprObjC.h" @@ -25,6 +24,7 @@ #include #include +#include "CGBuilder.h" #include "CGCall.h" #include "CGValue.h" @@ -52,7 +52,7 @@ namespace CodeGen { class CodeGenModule; class CodeGenTypes; class CGRecordLayout; - + /// CodeGenFunction - This class organizes the per-function state that is used /// while generating LLVM code. class CodeGenFunction { @@ -61,7 +61,7 @@ public: TargetInfo &Target; typedef std::pair ComplexPairTy; - llvm::IRBuilder<> Builder; + CGBuilderTy Builder; // Holds the Decl for the current function or method const Decl *CurFuncDecl; -- 2.40.0