On Mon, Jan 5, 2015 at 3:29 PM, Eric Christopher <[email protected]> wrote:
> > > On Fri Jan 02 2015 at 2:12:40 PM David Blaikie <[email protected]> wrote: > >> Author: dblaikie >> Date: Fri Jan 2 16:07:26 2015 >> New Revision: 225090 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=225090&view=rev >> Log: >> DebugInfo: Provide a less subtle way to set the debug location of simple >> ret instructions >> >> un-XFAILing the test XFAIL'd in r225086 after it regressed in r225083. >> >> Modified: >> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> cfe/trunk/lib/CodeGen/CGDebugInfo.h >> cfe/trunk/lib/CodeGen/CodeGenFunction.cpp >> cfe/trunk/lib/CodeGen/CodeGenFunction.h >> cfe/trunk/test/CodeGen/debug-info-line3.c >> >> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ >> CGDebugInfo.cpp?rev=225090&r1=225089&r2=225090&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Fri Jan 2 16:07:26 2015 >> @@ -75,6 +75,15 @@ ApplyDebugLocation::ApplyDebugLocation(C >> } >> } >> >> +ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, >> llvm::DebugLoc Loc) >> + : CGF(CGF) { >> + if (CGF.getDebugInfo()) { >> + OriginalLocation = CGF.Builder.getCurrentDebugLocation(); >> + if (!Loc.isUnknown()) >> + CGF.Builder.SetCurrentDebugLocation(Loc); >> + } >> +} >> + >> ApplyDebugLocation::~ApplyDebugLocation() { >> // Query CGF so the location isn't overwritten when location updates >> are >> // temporarily disabled (for C++ default function arguments) >> >> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ >> CGDebugInfo.h?rev=225090&r1=225089&r2=225090&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original) >> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Fri Jan 2 16:07:26 2015 >> @@ -454,6 +454,7 @@ public: >> ApplyDebugLocation(CodeGenFunction &CGF, >> SourceLocation TemporaryLocation = SourceLocation(), >> bool ForceColumnInfo = false); >> + ApplyDebugLocation(CodeGenFunction &CGF, llvm::DebugLoc Loc); >> ~ApplyDebugLocation(); >> }; >> >> >> Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ >> CodeGenFunction.cpp?rev=225090&r1=225089&r2=225090&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Fri Jan 2 16:07:26 2015 >> @@ -158,7 +158,7 @@ TypeEvaluationKind CodeGenFunction::getE >> } >> } >> >> -void CodeGenFunction::EmitReturnBlock() { >> +llvm::DebugLoc CodeGenFunction::EmitReturnBlock() { >> > > Update the block documentation for the function? > Sure - little tricky to explain, but added some words in r226393 > > -eric > > >> // For cleanliness, we try to avoid emitting the return block for >> // simple cases. >> llvm::BasicBlock *CurBB = Builder.GetInsertBlock(); >> @@ -173,7 +173,7 @@ void CodeGenFunction::EmitReturnBlock() >> delete ReturnBlock.getBlock(); >> } else >> EmitBlock(ReturnBlock.getBlock()); >> - return; >> + return llvm::DebugLoc(); >> } >> >> // Otherwise, if the return block is the target of a single direct >> @@ -184,15 +184,13 @@ void CodeGenFunction::EmitReturnBlock() >> dyn_cast<llvm::BranchInst>(*ReturnBlock.getBlock()->user_begin()); >> if (BI && BI->isUnconditional() && >> BI->getSuccessor(0) == ReturnBlock.getBlock()) { >> - // Reset insertion point, including debug location, and delete the >> - // branch. This is really subtle and only works because the next >> change >> - // in location will hit the caching in CGDebugInfo::EmitLocation >> and not >> - // override this. >> - Builder.SetCurrentDebugLocation(BI->getDebugLoc()); >> + // Record/return the DebugLoc of the simple 'return' expression to >> be used >> + // later by the actual 'ret' instruction. >> + llvm::DebugLoc Loc = BI->getDebugLoc(); >> Builder.SetInsertPoint(BI->getParent()); >> BI->eraseFromParent(); >> delete ReturnBlock.getBlock(); >> - return; >> + return Loc; >> } >> } >> >> @@ -201,6 +199,7 @@ void CodeGenFunction::EmitReturnBlock() >> // region.end for now. >> >> EmitBlock(ReturnBlock.getBlock()); >> + return llvm::DebugLoc(); >> } >> >> static void EmitIfUsed(CodeGenFunction &CGF, llvm::BasicBlock *BB) { >> @@ -254,16 +253,18 @@ void CodeGenFunction::FinishFunction(Sou >> } >> >> // Emit function epilog (to return). >> - EmitReturnBlock(); >> + llvm::DebugLoc Loc = EmitReturnBlock(); >> >> if (ShouldInstrumentFunction()) >> EmitFunctionInstrumentation("__cyg_profile_func_exit"); >> >> // Emit debug descriptor for function end. >> - if (CGDebugInfo *DI = getDebugInfo()) { >> + if (CGDebugInfo *DI = getDebugInfo()) >> DI->EmitFunctionEnd(Builder); >> - } >> >> + // Reset the debug location to that of the simple 'return' expression, >> if any >> + // rather than that of the end of the function's scope '}'. >> + ApplyDebugLocation AL(*this, Loc); >> EmitFunctionEpilog(*CurFnInfo, EmitRetDbgLoc, EndLoc); >> EmitEndEHSpec(CurCodeDecl); >> >> >> Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ >> CodeGenFunction.h?rev=225090&r1=225089&r2=225090&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original) >> +++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Fri Jan 2 16:07:26 2015 >> @@ -1262,7 +1262,7 @@ public: >> >> /// EmitReturnBlock - Emit the unified return block, trying to avoid >> its >> /// emission when possible. >> - void EmitReturnBlock(); >> + llvm::DebugLoc EmitReturnBlock(); >> >> /// FinishFunction - Complete IR generation of the current function. >> It is >> /// legal to call this function even if there is no current insertion >> point. >> >> Modified: cfe/trunk/test/CodeGen/debug-info-line3.c >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ >> CodeGen/debug-info-line3.c?rev=225090&r1=225089&r2=225090&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/test/CodeGen/debug-info-line3.c (original) >> +++ cfe/trunk/test/CodeGen/debug-info-line3.c Fri Jan 2 16:07:26 2015 >> @@ -1,10 +1,5 @@ >> // RUN: %clang_cc1 -g -S -emit-llvm %s -o - | FileCheck %s >> >> -// Temporarily XFAIL while investigating regression. (other improvements >> seem >> -// more important to keep rather than reverting them in favor of >> preserving >> -// this) >> -// XFAIL: * >> - >> void func(char c, char* d) >> { >> *d = c + 1; >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
