diff options
author | Adrian Prantl <aprantl@apple.com> | 2015-02-03 20:00:54 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2015-02-03 20:00:54 +0000 |
commit | 95b24e9b59f7d5f6b29736dd6b7db9b032ce5701 (patch) | |
tree | d98996b548857342fa41cb1406d10e748acca83a /clang/lib/CodeGen | |
parent | 6c5e36ae3be87fefcec9177eae3aacd115905332 (diff) | |
download | bcm5719-llvm-95b24e9b59f7d5f6b29736dd6b7db9b032ce5701.tar.gz bcm5719-llvm-95b24e9b59f7d5f6b29736dd6b7db9b032ce5701.zip |
Address review feedback for r228003.
- use named constructors
- get rid of MarkAsPrologue
llvm-svn: 228021
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGBlocks.cpp | 11 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGCleanup.cpp | 2 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 8 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.h | 50 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGDecl.cpp | 2 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGDeclCXX.cpp | 8 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGException.cpp | 2 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 2 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGStmt.cpp | 4 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGStmtOpenMP.cpp | 4 |
10 files changed, 57 insertions, 36 deletions
diff --git a/clang/lib/CodeGen/CGBlocks.cpp b/clang/lib/CodeGen/CGBlocks.cpp index ffc6e57b074..968c54ef849 100644 --- a/clang/lib/CodeGen/CGBlocks.cpp +++ b/clang/lib/CodeGen/CGBlocks.cpp @@ -1178,7 +1178,7 @@ CodeGenFunction::GenerateBlockFunction(GlobalDecl GD, Alloca->setAlignment(Align); // Set the DebugLocation to empty, so the store is recognized as a // frame setup instruction by llvm::DwarfDebug::beginFunction(). - ApplyDebugLocation NL(*this, ApplyDebugLocation::MarkAsPrologue); + auto NL = ApplyDebugLocation::CreateEmpty(*this); Builder.CreateAlignedStore(BlockPointer, Alloca, Align); BlockPointerDbgLoc = Alloca; } @@ -1328,11 +1328,10 @@ CodeGenFunction::GenerateCopyHelperFunction(const CGBlockInfo &blockInfo) { nullptr, SC_Static, false, false); - ApplyDebugLocation NL(*this, ApplyDebugLocation::MarkAsPrologue); + auto NL = ApplyDebugLocation::CreateEmpty(*this); StartFunction(FD, C.VoidTy, Fn, FI, args); // Create a scope with an artificial location for the body of this function. - ApplyDebugLocation AL(*this, ApplyDebugLocation::Artificial); - + auto AL = ApplyDebugLocation::CreateArtificial(*this); llvm::Type *structPtrTy = blockInfo.StructureType->getPointerTo(); llvm::Value *src = GetAddrOfLocalVar(&srcDecl); @@ -1500,9 +1499,9 @@ CodeGenFunction::GenerateDestroyHelperFunction(const CGBlockInfo &blockInfo) { nullptr, SC_Static, false, false); // Create a scope with an artificial location for the body of this function. - ApplyDebugLocation NL(*this, ApplyDebugLocation::MarkAsPrologue); + auto NL = ApplyDebugLocation::CreateEmpty(*this); StartFunction(FD, C.VoidTy, Fn, FI, args); - ApplyDebugLocation AL(*this, ApplyDebugLocation::Artificial); + auto AL = ApplyDebugLocation::CreateArtificial(*this); llvm::Type *structPtrTy = blockInfo.StructureType->getPointerTo(); diff --git a/clang/lib/CodeGen/CGCleanup.cpp b/clang/lib/CodeGen/CGCleanup.cpp index a75a7af453e..bda8d8e942c 100644 --- a/clang/lib/CodeGen/CGCleanup.cpp +++ b/clang/lib/CodeGen/CGCleanup.cpp @@ -861,7 +861,7 @@ void CodeGenFunction::PopCleanupBlock(bool FallthroughIsBranchThrough) { // Emit the EH cleanup if required. if (RequiresEHCleanup) { - ApplyDebugLocation AL(*this, ApplyDebugLocation::Artificial, CurEHLocation); + auto AL = ApplyDebugLocation::CreateDefaultArtificial(*this, CurEHLocation); CGBuilderTy::InsertPoint SavedIP = Builder.saveAndClearIP(); diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 3fb839369db..de424ba1bb4 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -60,18 +60,18 @@ ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, } ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, - bool MarkAsPrologue, + bool DefaultToEmpty, SourceLocation TemporaryLocation) : CGF(CGF) { - init(TemporaryLocation, MarkAsPrologue); + init(TemporaryLocation, DefaultToEmpty); } void ApplyDebugLocation::init(SourceLocation TemporaryLocation, - bool MarkAsPrologue) { + bool DefaultToEmpty) { if (auto *DI = CGF.getDebugInfo()) { OriginalLocation = CGF.Builder.getCurrentDebugLocation(); if (TemporaryLocation.isInvalid()) { - if (MarkAsPrologue) + if (DefaultToEmpty) CGF.Builder.SetCurrentDebugLocation(llvm::DebugLoc()); else { // Construct a location that has a valid scope, but no line info. diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h index 2f0c3f51d41..1d61d14950e 100644 --- a/clang/lib/CodeGen/CGDebugInfo.h +++ b/clang/lib/CodeGen/CGDebugInfo.h @@ -447,22 +447,23 @@ private: /// location or preferred location of the specified Expr. class ApplyDebugLocation { private: - void init(SourceLocation TemporaryLocation, bool MarkAsPrologue = false); + void init(SourceLocation TemporaryLocation, bool DefaultToEmpty = false); + ApplyDebugLocation(CodeGenFunction &CGF, bool DefaultToEmpty, + SourceLocation TemporaryLocation); -protected: llvm::DebugLoc OriginalLocation; CodeGenFunction &CGF; - public: - enum { Artificial = false, MarkAsPrologue = true, NoLocation = true }; /// \brief Set the location to the (valid) TemporaryLocation. ApplyDebugLocation(CodeGenFunction &CGF, SourceLocation TemporaryLocation); - /// \brief Apply TemporaryLocation if it is valid, or apply a default - /// location: If MarkAsPrologue is true, the IRBuilder will be set to not - /// attach debug locations, thus marking the instructions as - /// prologue. Otherwise this switches to an artificial debug location that has - /// a valid scope, but no line information. + ApplyDebugLocation(CodeGenFunction &CGF, const Expr *E); + ApplyDebugLocation(CodeGenFunction &CGF, llvm::DebugLoc Loc); + + ~ApplyDebugLocation(); + + /// \brief Apply TemporaryLocation if it is valid. Otherwise switch to an + /// artificial debug location that has a valid scope, but no line information. /// /// Artificial locations are useful when emitting compiler-generated helper /// functions that have no source location associated with them. The DWARF @@ -470,11 +471,32 @@ public: /// indicate code that can not be attributed to any source location. Note that /// passing an empty SourceLocation to CGDebugInfo::setLocation() will result /// in the last valid location being reused. - ApplyDebugLocation(CodeGenFunction &CGF, bool MarkAsPrologue, - SourceLocation TemporaryLocation = SourceLocation()); - ApplyDebugLocation(CodeGenFunction &CGF, const Expr *E); - ApplyDebugLocation(CodeGenFunction &CGF, llvm::DebugLoc Loc); - ~ApplyDebugLocation(); + static ApplyDebugLocation CreateArtificial(CodeGenFunction &CGF) { + return ApplyDebugLocation(CGF, false, SourceLocation()); + } + /// \brief Apply TemporaryLocation if it is valid. Otherwise switch to an + /// artificial debug location that has a valid scope, but no line information. + static ApplyDebugLocation CreateDefaultArtificial(CodeGenFunction &CGF, + SourceLocation TemporaryLocation) { + return ApplyDebugLocation(CGF, false, TemporaryLocation); + } + + /// \brief Set the IRBuilder to not attach debug locations. Note that passing + /// an empty SourceLocation to CGDebugInfo::setLocation() will result in the + /// last valid location being reused. Note that all instructions that do not + /// have a location at the beginning of a function are counted towards to + /// funciton prologue. + static ApplyDebugLocation CreateEmpty(CodeGenFunction &CGF) { + return ApplyDebugLocation(CGF, true, SourceLocation()); + } + + /// \brief Apply TemporaryLocation if it is valid. Otherwise set the IRBuilder + /// to not attach debug locations. + static ApplyDebugLocation CreateDefaultEmpty(CodeGenFunction &CGF, + SourceLocation TemporaryLocation) { + return ApplyDebugLocation(CGF, true, TemporaryLocation); + } + }; diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp index bada6ea6511..fb72a9a5433 100644 --- a/clang/lib/CodeGen/CGDecl.cpp +++ b/clang/lib/CodeGen/CGDecl.cpp @@ -1090,7 +1090,7 @@ void CodeGenFunction::EmitAutoVarInit(const AutoVarEmission &emission) { if (emission.wasEmittedAsGlobal()) return; const VarDecl &D = *emission.Variable; - ApplyDebugLocation DL(*this, ApplyDebugLocation::Artificial, D.getLocation()); + auto DL = ApplyDebugLocation::CreateDefaultArtificial(*this, D.getLocation()); QualType type = D.getType(); // If this local has an initializer, emit it now. diff --git a/clang/lib/CodeGen/CGDeclCXX.cpp b/clang/lib/CodeGen/CGDeclCXX.cpp index 6303db6000e..0255a92276e 100644 --- a/clang/lib/CodeGen/CGDeclCXX.cpp +++ b/clang/lib/CodeGen/CGDeclCXX.cpp @@ -469,11 +469,11 @@ CodeGenFunction::GenerateCXXGlobalInitFunc(llvm::Function *Fn, ArrayRef<llvm::Function *> Decls, llvm::GlobalVariable *Guard) { { - ApplyDebugLocation NL(*this, ApplyDebugLocation::MarkAsPrologue); + auto NL = ApplyDebugLocation::CreateEmpty(*this); StartFunction(GlobalDecl(), getContext().VoidTy, Fn, getTypes().arrangeNullaryFunction(), FunctionArgList()); // Emit an artificial location for this function. - ApplyDebugLocation AL(*this, ApplyDebugLocation::Artificial); + auto AL = ApplyDebugLocation::CreateArtificial(*this); llvm::BasicBlock *ExitBlock = nullptr; if (Guard) { @@ -520,11 +520,11 @@ void CodeGenFunction::GenerateCXXGlobalDtorsFunc(llvm::Function *Fn, const std::vector<std::pair<llvm::WeakVH, llvm::Constant*> > &DtorsAndObjects) { { - ApplyDebugLocation NL(*this, ApplyDebugLocation::MarkAsPrologue); + auto NL = ApplyDebugLocation::CreateEmpty(*this); StartFunction(GlobalDecl(), getContext().VoidTy, Fn, getTypes().arrangeNullaryFunction(), FunctionArgList()); // Emit an artificial location for this function. - ApplyDebugLocation AL(*this, ApplyDebugLocation::Artificial); + auto AL = ApplyDebugLocation::CreateArtificial(*this); // Emit the dtors, in reverse order from construction. for (unsigned i = 0, e = DtorsAndObjects.size(); i != e; ++i) { diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp index 406afb2739d..28f7449deec 100644 --- a/clang/lib/CodeGen/CGException.cpp +++ b/clang/lib/CodeGen/CGException.cpp @@ -770,7 +770,7 @@ llvm::BasicBlock *CodeGenFunction::EmitLandingPad() { // Save the current IR generation state. CGBuilderTy::InsertPoint savedIP = Builder.saveAndClearIP(); - ApplyDebugLocation AL(*this, ApplyDebugLocation::Artificial, CurEHLocation); + auto DL = ApplyDebugLocation::CreateDefaultArtificial(*this, CurEHLocation); const EHPersonality &personality = EHPersonality::get(CGM); diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index 503f9b17195..49165d550e2 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -3043,7 +3043,7 @@ Value *ScalarExprEmitter::VisitBinLAnd(const BinaryOperator *E) { // Emit an unconditional branch from this block to ContBlock. { // There is no need to emit line number for unconditional branch. - ApplyDebugLocation NL(CGF, ApplyDebugLocation::NoLocation); + auto NL = ApplyDebugLocation::CreateEmpty(CGF); CGF.EmitBlock(ContBlock); } // Insert an entry into the phi node for the edge with the value of RHSCond. diff --git a/clang/lib/CodeGen/CGStmt.cpp b/clang/lib/CodeGen/CGStmt.cpp index be2ddf67339..0d41055bf7e 100644 --- a/clang/lib/CodeGen/CGStmt.cpp +++ b/clang/lib/CodeGen/CGStmt.cpp @@ -565,7 +565,7 @@ void CodeGenFunction::EmitIfStmt(const IfStmt &S) { if (const Stmt *Else = S.getElse()) { { // There is no need to emit line number for an unconditional branch. - ApplyDebugLocation NL(*this, ApplyDebugLocation::NoLocation); + auto NL = ApplyDebugLocation::CreateEmpty(*this); EmitBlock(ElseBlock); } { @@ -574,7 +574,7 @@ void CodeGenFunction::EmitIfStmt(const IfStmt &S) { } { // There is no need to emit line number for an unconditional branch. - ApplyDebugLocation NL(*this, ApplyDebugLocation::NoLocation); + auto NL = ApplyDebugLocation::CreateEmpty(*this); EmitBranch(ContBlock); } } diff --git a/clang/lib/CodeGen/CGStmtOpenMP.cpp b/clang/lib/CodeGen/CGStmtOpenMP.cpp index 395f6fa69ac..29743282d36 100644 --- a/clang/lib/CodeGen/CGStmtOpenMP.cpp +++ b/clang/lib/CodeGen/CGStmtOpenMP.cpp @@ -86,13 +86,13 @@ static void EmitOMPIfClause(CodeGenFunction &CGF, const Expr *Cond, // Emit the 'else' code if present. { // There is no need to emit line number for unconditional branch. - ApplyDebugLocation NL(CGF, ApplyDebugLocation::NoLocation); + auto NL = ApplyDebugLocation::CreateEmpty(CGF); CGF.EmitBlock(ElseBlock); } CodeGen(/*ThenBlock*/ false); { // There is no need to emit line number for unconditional branch. - ApplyDebugLocation NL(CGF, ApplyDebugLocation::NoLocation); + auto NL = ApplyDebugLocation::CreateEmpty(CGF); CGF.EmitBranch(ContBlock); } // Emit the continuation block for code after the if. |