[llvm] r288794 - [framelowering] Improve tracking of first CS pop instruction.

Greg Bedwell via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 8 12:11:24 PST 2016


Hi Florian,

In our testing using the clang/utils/check_cfc tool we spotted a case where
after this commit we're seeing a new codegen difference depending on
whether or not -g is specified.  I've put the details in PR31319 (
https://llvm.org/bugs/show_bug.cgi?id=31319 ).

Thanks,

-Greg Bedwell
SN Systems Ltd - Sony Interactive Entertainment


On 6 December 2016 at 10:24, Florian Hahn via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: fhahn
> Date: Tue Dec  6 04:24:55 2016
> New Revision: 288794
>
> URL: http://llvm.org/viewvc/llvm-project?rev=288794&view=rev
> Log:
> [framelowering] Improve tracking of first CS pop instruction.
>
>
> Summary: This patch makes sure FirstCSPop and MBBI never point to
> DBG_VALUE instructions, which affected the code generated.
>
> Reviewers: mkuper, aprantl, MatzeB
>
> Subscribers: llvm-commits
>
> Differential Revision: https://reviews.llvm.org/D27343
>
> Added:
>     llvm/trunk/test/CodeGen/X86/frame-lowering-debug-intrinsic.ll
> Modified:
>     llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
>
> Modified: llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/
> X86/X86FrameLowering.cpp?rev=288794&r1=288793&r2=288794&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/Target/X86/X86FrameLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86FrameLowering.cpp Tue Dec  6 04:24:55
> 2016
> @@ -1550,19 +1550,22 @@ void X86FrameLowering::emitEpilogue(Mach
>    }
>    uint64_t SEHStackAllocAmt = NumBytes;
>
> +  MachineBasicBlock::iterator FirstCSPop = MBBI;
>    // Skip the callee-saved pop instructions.
>    while (MBBI != MBB.begin()) {
>      MachineBasicBlock::iterator PI = std::prev(MBBI);
>      unsigned Opc = PI->getOpcode();
>
> -    if ((Opc != X86::POP32r || !PI->getFlag(MachineInstr::FrameDestroy))
> &&
> -        (Opc != X86::POP64r || !PI->getFlag(MachineInstr::FrameDestroy))
> &&
> -        Opc != X86::DBG_VALUE && !PI->isTerminator())
> -      break;
> +    if (Opc != X86::DBG_VALUE && !PI->isTerminator()) {
> +      if ((Opc != X86::POP32r || !PI->getFlag(MachineInstr::FrameDestroy))
> &&
> +          (Opc != X86::POP64r || !PI->getFlag(MachineInstr::
> FrameDestroy)))
> +        break;
> +      FirstCSPop = PI;
> +    }
>
>      --MBBI;
>    }
> -  MachineBasicBlock::iterator FirstCSPop = MBBI;
> +  MBBI = FirstCSPop;
>
>    if (TargetMBB) {
>      // Fill EAX/RAX with the address of the target block.
>
> Added: llvm/trunk/test/CodeGen/X86/frame-lowering-debug-intrinsic.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/
> CodeGen/X86/frame-lowering-debug-intrinsic.ll?rev=288794&view=auto
> ============================================================
> ==================
> --- llvm/trunk/test/CodeGen/X86/frame-lowering-debug-intrinsic.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/frame-lowering-debug-intrinsic.ll Tue
> Dec  6 04:24:55 2016
> @@ -0,0 +1,41 @@
> +; Test ensuring debug intrinsics do not affect generated function
> prologue.
> +;
> +; RUN: llc -O1 -mtriple=x86_64-unknown-unknown -o - %s | FileCheck %s
> +
> +
> +define i64 @noDebug(i64 %a) {
> +  %call = call i64 @fn(i64 %a, i64 0)
> +  ret i64 %call
> +}
> +
> +; CHECK-LABEL: noDebug
> +; CHECK: popq %rcx
> +; CHECK: ret
> +
> +
> +define i64 @withDebug(i64 %a) !dbg !4 {
> +  %call = call i64 @fn(i64 %a, i64 0)
> +  tail call void @llvm.dbg.value(metadata i64 %call, i64 0, metadata !5,
> metadata !6), !dbg !7
> +  ret i64 %call
> +}
> +
> +; CHECK-LABEL: withDebug
> +; CHECK: popq %rcx
> +; CHECK: ret
> +
> +
> +declare i64 @fn(i64, i64)
> +
> +declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
> +
> +!llvm.dbg.cu = !{!0}
> +!llvm.module.flags = !{!2,!3}
> +
> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer:
> "clang version 4.0.0")
> +!1 = !DIFile(filename: "test.c", directory: "/")
> +!2 = !{i32 2, !"Dwarf Version", i32 4}
> +!3 = !{i32 2, !"Debug Info Version", i32 3}
> +!4 = distinct !DISubprogram(name: "withDebug", unit: !0)
> +!5 = !DILocalVariable(name: "w", scope: !4)
> +!6 = !DIExpression()
> +!7 = !DILocation(line: 210, column: 12, scope: !4)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161208/87388040/attachment.html>


More information about the llvm-commits mailing list