Re: r253886 - Disable frame pointer elimination when using -pg
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
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
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