<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 23, 2015 at 9:30 AM, Xinliang David Li via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: davidxl<br>
Date: Mon Nov 23 11:30:31 2015<br>
New Revision: 253886<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=253886&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=253886&view=rev</a><br>
Log:<br>
Disable frame pointer elimination when using -pg<br>
<br>
(Re-apply patch after bug fixing)<br></blockquote><div><br></div><div>It's helpful to describe what the bug fixing was (& test changes to ensure it's covered (if it fails only on some subset of buildbots usually a test case can be added so it would fail on any buildbot/locally, which is a good idea to help proactively avoid regressions in the future)) when recommitting a patch.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
This diff makes sure that the driver does not pass<br>
-fomit-frame-pointer or -momit-leaf-frame-pointer to<br>
the frontend when -pg is used. Currently, clang gives<br>
an error if -fomit-frame-pointer is used in combination<br>
with -pg, but -momit-leaf-frame-pointer was forgotten.<br>
Also, disable frame pointer elimination in the frontend<br>
when -pg is set.<br>
<br>
Patch by Stefan Kempf.<br>
<br>
Added:<br>
    cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c<br>
Modified:<br>
    cfe/trunk/lib/Driver/Tools.cpp<br>
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
<br>
Modified: cfe/trunk/lib/Driver/Tools.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=253886&r1=253885&r2=253886&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=253886&r1=253885&r2=253886&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/Tools.cpp (original)<br>
+++ cfe/trunk/lib/Driver/Tools.cpp Mon Nov 23 11:30:31 2015<br>
@@ -2794,6 +2794,8 @@ static bool shouldUseFramePointer(const<br>
   if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer,<br>
                                options::OPT_fomit_frame_pointer))<br>
     return A->getOption().matches(options::OPT_fno_omit_frame_pointer);<br>
+  if (Args.hasArg(options::OPT_pg))<br>
+    return true;<br>
<br>
   return shouldUseFramePointerForTarget(Args, Triple);<br>
 }<br>
@@ -2803,6 +2805,8 @@ static bool shouldUseLeafFramePointer(co<br>
   if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer,<br>
                                options::OPT_momit_leaf_frame_pointer))<br>
     return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer);<br>
+  if (Args.hasArg(options::OPT_pg))<br>
+    return true;<br>
<br>
   if (Triple.isPS4CPU())<br>
     return false;<br>
<br>
Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=253886&r1=253885&r2=253886&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=253886&r1=253885&r2=253886&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Nov 23 11:30:31 2015<br>
@@ -453,7 +453,8 @@ static bool ParseCodeGenArgs(CodeGenOpti<br>
   Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases);<br>
   Opts.CodeModel = getCodeModel(Args, Diags);<br>
   Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass);<br>
-  Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim);<br>
+  Opts.DisableFPElim =<br>
+      (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg));<br>
   Opts.DisableFree = Args.hasArg(OPT_disable_free);<br>
   Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls);<br>
   Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi);<br>
<br>
Added: cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c?rev=253886&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c?rev=253886&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c (added)<br>
+++ cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c Mon Nov 23 11:30:31 2015<br>
@@ -0,0 +1,14 @@<br>
+// REQUIRES: x86-registered-target<br>
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \<br>
+// RUN:   FileCheck %s<br>
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -momit-leaf-frame-pointer -pg -S -o - %s | \<br>
+// RUN:   FileCheck %s<br>
+<br>
+// Test that the frame pointer is kept when compiling with<br>
+// profiling.<br>
+<br>
+//CHECK: pushq %rbp<br>
+int main(void)<br>
+{<br>
+  return 0;<br>
+}<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>