forked from OSchip/llvm-project
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. llvm-svn: 253886
This commit is contained in:
parent
e95d7fac58
commit
4dff875259
|
@ -2794,6 +2794,8 @@ static bool shouldUseFramePointer(const ArgList &Args,
|
|||
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(const ArgList &Args,
|
|||
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;
|
||||
|
|
|
@ -453,7 +453,8 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
|||
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);
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue