r225090 - DebugInfo: Provide a less subtle way to set the debug location of simple ret instructions
David Blaikie
dblaikie at gmail.com
Sat Jan 17 18:49:51 PST 2015
On Mon, Jan 5, 2015 at 3:29 PM, Eric Christopher <echristo at gmail.com> wrote:
>
>
> On Fri Jan 02 2015 at 2:12:40 PM David Blaikie <dblaikie at gmail.com> 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
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150117/5b7897cb/attachment.html>
More information about the cfe-commits
mailing list