[PATCH] D74698: [Driver] -pg -mfentry should respect target specific decisions for -mframe-pointer=all
This revision was automatically updated to reflect the committed changes. Closed by commit rG8b9cb1208124: [Driver] -pg -mfentry should respect target specific decisions for -mframe… (authored by nickdesaulniers). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74698/new/ https://reviews.llvm.org/D74698 Files: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/mfentry.c Index: clang/test/Driver/mfentry.c === --- clang/test/Driver/mfentry.c +++ clang/test/Driver/mfentry.c @@ -1,9 +1,19 @@ // RUN: %clang -target s390x -c -### %s -mfentry 2>&1 | FileCheck %s // RUN: %clang -target i386 -c -### %s -mfentry 2>&1 | FileCheck %s // RUN: %clang -target x86_64 -c -### %s -mfentry 2>&1 | FileCheck %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O0 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O2 -fno-omit-frame-pointer -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O2 -### -E %s 2>&1 | FileCheck -check-prefix=NOFP %s +// RUN: %clang -target x86_64 -pg -mfentry -O0 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64 -pg -mfentry -O2 -fno-omit-frame-pointer -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64 -pg -mfentry -O2 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s // CHECK: "-mfentry" // RUN: %clang -target powerpc64le -c -### %s -mfentry 2>&1 | FileCheck --check-prefix=ERR %s // ERR: error: unsupported option '-mfentry' for target 'powerpc64le' + +// FP: "-mframe-pointer=all" +// NOFP: "-mframe-pointer=none" +void foo(void) {} Index: clang/lib/Driver/ToolChains/Clang.cpp === --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -526,7 +526,7 @@ static bool useFramePointerForTargetByDefault(const ArgList , const llvm::Triple ) { - if (Args.hasArg(options::OPT_pg)) + if (Args.hasArg(options::OPT_pg) && !Args.hasArg(options::OPT_mfentry)) return true; switch (Triple.getArch()) { @@ -6150,7 +6150,8 @@ } if (Arg *A = Args.getLastArg(options::OPT_pg)) -if (FPKeepKind == CodeGenOptions::FramePointerKind::None) +if (FPKeepKind == CodeGenOptions::FramePointerKind::None && +!Args.hasArg(options::OPT_mfentry)) D.Diag(diag::err_drv_argument_not_allowed_with) << "-fomit-frame-pointer" << A->getAsString(Args); Index: clang/test/Driver/mfentry.c === --- clang/test/Driver/mfentry.c +++ clang/test/Driver/mfentry.c @@ -1,9 +1,19 @@ // RUN: %clang -target s390x -c -### %s -mfentry 2>&1 | FileCheck %s // RUN: %clang -target i386 -c -### %s -mfentry 2>&1 | FileCheck %s // RUN: %clang -target x86_64 -c -### %s -mfentry 2>&1 | FileCheck %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O0 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O2 -fno-omit-frame-pointer -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O2 -### -E %s 2>&1 | FileCheck -check-prefix=NOFP %s +// RUN: %clang -target x86_64 -pg -mfentry -O0 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64 -pg -mfentry -O2 -fno-omit-frame-pointer -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64 -pg -mfentry -O2 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s // CHECK: "-mfentry" // RUN: %clang -target powerpc64le -c -### %s -mfentry 2>&1 | FileCheck --check-prefix=ERR %s // ERR: error: unsupported option '-mfentry' for target 'powerpc64le' + +// FP: "-mframe-pointer=all" +// NOFP: "-mframe-pointer=none" +void foo(void) {} Index: clang/lib/Driver/ToolChains/Clang.cpp === --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -526,7 +526,7 @@ static bool useFramePointerForTargetByDefault(const ArgList , const llvm::Triple ) { - if (Args.hasArg(options::OPT_pg)) + if (Args.hasArg(options::OPT_pg) && !Args.hasArg(options::OPT_mfentry)) return true; switch (Triple.getArch()) { @@ -6150,7 +6150,8 @@ } if (Arg *A = Args.getLastArg(options::OPT_pg)) -if (FPKeepKind == CodeGenOptions::FramePointerKind::None) +if (FPKeepKind == CodeGenOptions::FramePointerKind::None && +!Args.hasArg(options::OPT_mfentry)) D.Diag(diag::err_drv_argument_not_allowed_with) << "-fomit-frame-pointer" << A->getAsString(Args);
[PATCH] D74698: [Driver] -pg -mfentry should respect target specific decisions for -mframe-pointer=all
nickdesaulniers added a comment. Ok, sorry for the excessive churn. I think this now accurately describes the logic of how this was expected to work, from the stance of GCC compatibility. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74698/new/ https://reviews.llvm.org/D74698 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D74698: [Driver] -pg -mfentry should respect target specific decisions for -mframe-pointer=all
nickdesaulniers updated this revision to Diff 245279. nickdesaulniers added a comment. - respect target specific frame pointer optimizations Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74698/new/ https://reviews.llvm.org/D74698 Files: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/mfentry.c Index: clang/test/Driver/mfentry.c === --- clang/test/Driver/mfentry.c +++ clang/test/Driver/mfentry.c @@ -1,9 +1,19 @@ // RUN: %clang -target s390x -c -### %s -mfentry 2>&1 | FileCheck %s // RUN: %clang -target i386 -c -### %s -mfentry 2>&1 | FileCheck %s // RUN: %clang -target x86_64 -c -### %s -mfentry 2>&1 | FileCheck %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O0 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O2 -fno-omit-frame-pointer -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O2 -### -E %s 2>&1 | FileCheck -check-prefix=NOFP %s +// RUN: %clang -target x86_64 -pg -mfentry -O0 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64 -pg -mfentry -O2 -fno-omit-frame-pointer -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64 -pg -mfentry -O2 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s // CHECK: "-mfentry" // RUN: %clang -target powerpc64le -c -### %s -mfentry 2>&1 | FileCheck --check-prefix=ERR %s // ERR: error: unsupported option '-mfentry' for target 'powerpc64le' + +// FP: "-mframe-pointer=all" +// NOFP: "-mframe-pointer=none" +void foo(void) {} Index: clang/lib/Driver/ToolChains/Clang.cpp === --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -526,7 +526,7 @@ static bool useFramePointerForTargetByDefault(const ArgList , const llvm::Triple ) { - if (Args.hasArg(options::OPT_pg)) + if (Args.hasArg(options::OPT_pg) && !Args.hasArg(options::OPT_mfentry)) return true; switch (Triple.getArch()) { @@ -6150,7 +6150,8 @@ } if (Arg *A = Args.getLastArg(options::OPT_pg)) -if (FPKeepKind == CodeGenOptions::FramePointerKind::None) +if (FPKeepKind == CodeGenOptions::FramePointerKind::None && +!Args.hasArg(options::OPT_mfentry)) D.Diag(diag::err_drv_argument_not_allowed_with) << "-fomit-frame-pointer" << A->getAsString(Args); Index: clang/test/Driver/mfentry.c === --- clang/test/Driver/mfentry.c +++ clang/test/Driver/mfentry.c @@ -1,9 +1,19 @@ // RUN: %clang -target s390x -c -### %s -mfentry 2>&1 | FileCheck %s // RUN: %clang -target i386 -c -### %s -mfentry 2>&1 | FileCheck %s // RUN: %clang -target x86_64 -c -### %s -mfentry 2>&1 | FileCheck %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O0 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O2 -fno-omit-frame-pointer -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O2 -### -E %s 2>&1 | FileCheck -check-prefix=NOFP %s +// RUN: %clang -target x86_64 -pg -mfentry -O0 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64 -pg -mfentry -O2 -fno-omit-frame-pointer -### -E %s 2>&1 | FileCheck -check-prefix=FP %s +// RUN: %clang -target x86_64 -pg -mfentry -O2 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s // CHECK: "-mfentry" // RUN: %clang -target powerpc64le -c -### %s -mfentry 2>&1 | FileCheck --check-prefix=ERR %s // ERR: error: unsupported option '-mfentry' for target 'powerpc64le' + +// FP: "-mframe-pointer=all" +// NOFP: "-mframe-pointer=none" +void foo(void) {} Index: clang/lib/Driver/ToolChains/Clang.cpp === --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -526,7 +526,7 @@ static bool useFramePointerForTargetByDefault(const ArgList , const llvm::Triple ) { - if (Args.hasArg(options::OPT_pg)) + if (Args.hasArg(options::OPT_pg) && !Args.hasArg(options::OPT_mfentry)) return true; switch (Triple.getArch()) { @@ -6150,7 +6150,8 @@ } if (Arg *A = Args.getLastArg(options::OPT_pg)) -if (FPKeepKind == CodeGenOptions::FramePointerKind::None) +if (FPKeepKind == CodeGenOptions::FramePointerKind::None && +!Args.hasArg(options::OPT_mfentry)) D.Diag(diag::err_drv_argument_not_allowed_with) << "-fomit-frame-pointer" << A->getAsString(Args); ___ cfe-commits mailing list cfe-commits@lists.llvm.org
[PATCH] D74698: [Driver] -pg -mfentry should respect target specific decisions for -mframe-pointer=all
nickdesaulniers marked an inline comment as done. nickdesaulniers added inline comments. Comment at: clang/lib/Driver/ToolChains/Clang.cpp:592 + if (Args.hasArg(options::OPT_pg) && Args.hasArg(options::OPT_mfentry)) +return false; This hunk does nothing and can be removed. I'll retitle the diff with a better explanation. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74698/new/ https://reviews.llvm.org/D74698 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits