Re: r253886 - Disable frame pointer elimination when using -pg

2015-11-24 Thread Stefan Kempf via cfe-commits
Hi,

David Blaikie via cfe-commits wrote:
> On Mon, Nov 23, 2015 at 9:30 AM, Xinliang David Li via cfe-commits <
> cfe-commits@lists.llvm.org> wrote:
> 
> > Author: davidxl
> > Date: Mon Nov 23 11:30:31 2015
> > New Revision: 253886
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=253886=rev
> > Log:
> > Disable frame pointer elimination when using -pg
> >
> > (Re-apply patch after bug fixing)
> >
> 
> 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.
 
the patch that David initally committed contained a test case that
was x86 specific. Thus it would fail on the AArch64 buildbot, for example.
The bug fix in the re-commited patch was to fix the test case to run
only when clang was configured with the x86 target.
 
> >
> > This diff makes sure that the driver does not pass
> > -fomit-frame-pointer or -momit-leaf-frame-pointer to
> > the frontend when -pg is used. Currently, clang gives
> > an error if -fomit-frame-pointer is used in combination
> > with -pg, but -momit-leaf-frame-pointer was forgotten.
> > Also, disable frame pointer elimination in the frontend
> > when -pg is set.
> >
> > Patch by Stefan Kempf.
> >
> > Added:
> > cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c
> > Modified:
> > cfe/trunk/lib/Driver/Tools.cpp
> > cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> >
> > Modified: cfe/trunk/lib/Driver/Tools.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=253886=253885=253886=diff
> >
> > ==
> > --- cfe/trunk/lib/Driver/Tools.cpp (original)
> > +++ cfe/trunk/lib/Driver/Tools.cpp Mon Nov 23 11:30:31 2015
> > @@ -2794,6 +2794,8 @@ static bool shouldUseFramePointer(const
> >if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer,
> > options::OPT_fomit_frame_pointer))
> >  return A->getOption().matches(options::OPT_fno_omit_frame_pointer);
> > +  if (Args.hasArg(options::OPT_pg))
> > +return true;
> >
> >return shouldUseFramePointerForTarget(Args, Triple);
> >  }
> > @@ -2803,6 +2805,8 @@ static bool shouldUseLeafFramePointer(co
> >if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer,
> > options::OPT_momit_leaf_frame_pointer))
> >  return
> > A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer);
> > +  if (Args.hasArg(options::OPT_pg))
> > +return true;
> >
> >if (Triple.isPS4CPU())
> >  return false;
> >
> > Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=253886=253885=253886=diff
> >
> > ==
> > --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> > +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Nov 23 11:30:31 2015
> > @@ -453,7 +453,8 @@ static bool ParseCodeGenArgs(CodeGenOpti
> >Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases);
> >Opts.CodeModel = getCodeModel(Args, Diags);
> >Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass);
> > -  Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim);
> > +  Opts.DisableFPElim =
> > +  (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg));
> >Opts.DisableFree = Args.hasArg(OPT_disable_free);
> >Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls);
> >Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi);
> >
> > Added: cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c?rev=253886=auto
> >
> > ==
> > --- cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c (added)
> > +++ cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c Mon Nov 23 11:30:31
> > 2015
> > @@ -0,0 +1,14 @@
> > +// REQUIRES: x86-registered-target
> > +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \
> > +// RUN:   FileCheck %s
> > +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3
> > -momit-leaf-frame-pointer -pg -S -o - %s | \
> > +// RUN:   FileCheck %s
> > +
> > +// Test that the frame pointer is kept when compiling with
> > +// profiling.
> > +
> > +//CHECK: pushq %rbp
> > +int main(void)
> > +{
> > +  return 0;
> > +}
> >
> >
> > ___
> > cfe-commits mailing list
> > cfe-commits@lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
> >

> ___
> cfe-commits mailing list
> cfe-commits@lists.llvm.org
> 

r253886 - Disable frame pointer elimination when using -pg

2015-11-23 Thread Xinliang David Li via cfe-commits
Author: davidxl
Date: Mon Nov 23 11:30:31 2015
New Revision: 253886

URL: http://llvm.org/viewvc/llvm-project?rev=253886=rev
Log:
Disable frame pointer elimination when using -pg 

(Re-apply patch after bug fixing)

This diff makes sure that the driver does not pass
-fomit-frame-pointer or -momit-leaf-frame-pointer to
the frontend when -pg is used. Currently, clang gives 
an error if -fomit-frame-pointer is used in combination 
with -pg, but -momit-leaf-frame-pointer was forgotten.
Also, disable frame pointer elimination in the frontend 
when -pg is set.

Patch by Stefan Kempf.

Added:
cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c
Modified:
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/lib/Frontend/CompilerInvocation.cpp

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=253886=253885=253886=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Mon Nov 23 11:30:31 2015
@@ -2794,6 +2794,8 @@ static bool shouldUseFramePointer(const
   if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer,
options::OPT_fomit_frame_pointer))
 return A->getOption().matches(options::OPT_fno_omit_frame_pointer);
+  if (Args.hasArg(options::OPT_pg))
+return true;
 
   return shouldUseFramePointerForTarget(Args, Triple);
 }
@@ -2803,6 +2805,8 @@ static bool shouldUseLeafFramePointer(co
   if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer,
options::OPT_momit_leaf_frame_pointer))
 return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer);
+  if (Args.hasArg(options::OPT_pg))
+return true;
 
   if (Triple.isPS4CPU())
 return false;

Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=253886=253885=253886=diff
==
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Nov 23 11:30:31 2015
@@ -453,7 +453,8 @@ static bool ParseCodeGenArgs(CodeGenOpti
   Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases);
   Opts.CodeModel = getCodeModel(Args, Diags);
   Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass);
-  Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim);
+  Opts.DisableFPElim =
+  (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg));
   Opts.DisableFree = Args.hasArg(OPT_disable_free);
   Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls);
   Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi);

Added: cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c?rev=253886=auto
==
--- cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c (added)
+++ cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c Mon Nov 23 11:30:31 2015
@@ -0,0 +1,14 @@
+// REQUIRES: x86-registered-target
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \
+// RUN:   FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 
-momit-leaf-frame-pointer -pg -S -o - %s | \
+// RUN:   FileCheck %s
+
+// Test that the frame pointer is kept when compiling with
+// profiling.
+
+//CHECK: pushq %rbp
+int main(void)
+{
+  return 0;
+}


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r253886 - Disable frame pointer elimination when using -pg

2015-11-23 Thread David Blaikie via cfe-commits
On Mon, Nov 23, 2015 at 9:30 AM, Xinliang David Li via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> Author: davidxl
> Date: Mon Nov 23 11:30:31 2015
> New Revision: 253886
>
> URL: http://llvm.org/viewvc/llvm-project?rev=253886=rev
> Log:
> Disable frame pointer elimination when using -pg
>
> (Re-apply patch after bug fixing)
>

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.


>
> This diff makes sure that the driver does not pass
> -fomit-frame-pointer or -momit-leaf-frame-pointer to
> the frontend when -pg is used. Currently, clang gives
> an error if -fomit-frame-pointer is used in combination
> with -pg, but -momit-leaf-frame-pointer was forgotten.
> Also, disable frame pointer elimination in the frontend
> when -pg is set.
>
> Patch by Stefan Kempf.
>
> Added:
> cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c
> Modified:
> cfe/trunk/lib/Driver/Tools.cpp
> cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=253886=253885=253886=diff
>
> ==
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Mon Nov 23 11:30:31 2015
> @@ -2794,6 +2794,8 @@ static bool shouldUseFramePointer(const
>if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer,
> options::OPT_fomit_frame_pointer))
>  return A->getOption().matches(options::OPT_fno_omit_frame_pointer);
> +  if (Args.hasArg(options::OPT_pg))
> +return true;
>
>return shouldUseFramePointerForTarget(Args, Triple);
>  }
> @@ -2803,6 +2805,8 @@ static bool shouldUseLeafFramePointer(co
>if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer,
> options::OPT_momit_leaf_frame_pointer))
>  return
> A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer);
> +  if (Args.hasArg(options::OPT_pg))
> +return true;
>
>if (Triple.isPS4CPU())
>  return false;
>
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=253886=253885=253886=diff
>
> ==
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Nov 23 11:30:31 2015
> @@ -453,7 +453,8 @@ static bool ParseCodeGenArgs(CodeGenOpti
>Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases);
>Opts.CodeModel = getCodeModel(Args, Diags);
>Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass);
> -  Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim);
> +  Opts.DisableFPElim =
> +  (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg));
>Opts.DisableFree = Args.hasArg(OPT_disable_free);
>Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls);
>Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi);
>
> Added: cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c?rev=253886=auto
>
> ==
> --- cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c (added)
> +++ cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c Mon Nov 23 11:30:31
> 2015
> @@ -0,0 +1,14 @@
> +// REQUIRES: x86-registered-target
> +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \
> +// RUN:   FileCheck %s
> +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3
> -momit-leaf-frame-pointer -pg -S -o - %s | \
> +// RUN:   FileCheck %s
> +
> +// Test that the frame pointer is kept when compiling with
> +// profiling.
> +
> +//CHECK: pushq %rbp
> +int main(void)
> +{
> +  return 0;
> +}
>
>
> ___
> cfe-commits mailing list
> cfe-commits@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits