[PATCH] D28001: [X86] Teach Clang about -mfentry flag
This revision was automatically updated to reflect the committed changes. Closed by commit rL293649: [X86] Teach Clang about -mfentry flag (authored by niravd). Changed prior to commit: https://reviews.llvm.org/D28001?vs=83850&id=86442#toc Repository: rL LLVM https://reviews.llvm.org/D28001 Files: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/include/clang/Frontend/CodeGenOptions.def cfe/trunk/lib/CodeGen/CodeGenFunction.cpp cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp cfe/trunk/test/CodeGen/fentry.c Index: cfe/trunk/test/CodeGen/fentry.c === --- cfe/trunk/test/CodeGen/fentry.c +++ cfe/trunk/test/CodeGen/fentry.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -pg -mfentry -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -pg -mfentry -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -mfentry -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck -check-prefix=NOPG %s +// RUN: %clang_cc1 -mfentry -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck -check-prefix=NOPG %s + +int foo(void) { + return 0; +} + +//CHECK: attributes #{{[0-9]+}} = { {{.*}}"fentry-call"="true"{{.*}} } +//NOPG-NOT: attributes #{{[0-9]+}} = { {{.*}}"fentry-call"{{.*}} } Index: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp === --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp @@ -860,8 +860,12 @@ // inlining, we just add an attribute to insert a mcount call in backend. // The attribute "counting-function" is set to mcount function name which is // architecture dependent. - if (CGM.getCodeGenOpts().InstrumentForProfiling) -Fn->addFnAttr("counting-function", getTarget().getMCountName()); + if (CGM.getCodeGenOpts().InstrumentForProfiling) { +if (CGM.getCodeGenOpts().CallFEntry) + Fn->addFnAttr("fentry-call", "true"); +else + Fn->addFnAttr("counting-function", getTarget().getMCountName()); + } if (RetTy->isVoidType()) { // Void type; nothing to return. Index: cfe/trunk/lib/Driver/Tools.cpp === --- cfe/trunk/lib/Driver/Tools.cpp +++ cfe/trunk/lib/Driver/Tools.cpp @@ -5483,6 +5483,9 @@ if (getToolChain().SupportsProfiling()) Args.AddLastArg(CmdArgs, options::OPT_pg); + if (getToolChain().SupportsProfiling()) +Args.AddLastArg(CmdArgs, options::OPT_mfentry); + // -flax-vector-conversions is default. if (!Args.hasFlag(options::OPT_flax_vector_conversions, options::OPT_fno_lax_vector_conversions)) Index: cfe/trunk/lib/Frontend/CompilerInvocation.cpp === --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp @@ -717,6 +717,7 @@ Opts.XRayInstructionThreshold = getLastArgIntValue(Args, OPT_fxray_instruction_threshold_, 200, Diags); Opts.InstrumentForProfiling = Args.hasArg(OPT_pg); + Opts.CallFEntry = Args.hasArg(OPT_mfentry); Opts.EmitOpenCLArgMetadata = Args.hasArg(OPT_cl_kernel_arg_info); Opts.CompressDebugSections = Args.hasArg(OPT_compress_debug_sections); Opts.RelaxELFRelocations = Args.hasArg(OPT_mrelax_relocations); Index: cfe/trunk/include/clang/Frontend/CodeGenOptions.def === --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def @@ -83,6 +83,7 @@ VALUE_CODEGENOPT(XRayInstructionThreshold , 32, 200) CODEGENOPT(InstrumentForProfiling , 1, 0) ///< Set when -pg is enabled. +CODEGENOPT(CallFEntry , 1, 0) ///< Set when -mfentry is enabled. CODEGENOPT(LessPreciseFPMAD , 1, 0) ///< Enable less precise MAD instructions to ///< be generated. CODEGENOPT(PrepareForLTO , 1, 0) ///< Set when -flto is enabled on the Index: cfe/trunk/include/clang/Driver/Options.td === --- cfe/trunk/include/clang/Driver/Options.td +++ cfe/trunk/include/clang/Driver/Options.td @@ -1858,6 +1858,8 @@ Flags<[CC1Option]>, HelpText<"Use copy relocations support for PIE builds">; def mno_pie_copy_relocations : Flag<["-"], "mno-pie-copy-relocations">, Group; +def mfentry : Flag<["-"], "mfentry">, HelpText<"insert calls to fentry at function entry (x86 only)">, + Flags<[CC1Option]>, Group; def mx87 : Flag<["-"], "mx87">, Group; def m80387 : Flag<["-"], "m80387">, Alias; def msse2 : Flag<["-"], "msse2">, Group; Index: cfe/trunk/test/CodeGen/fentry.c === --- cfe/trunk/test/CodeGen/fentry.c +++ cfe/trunk/test/CodeGen/fentry.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -pg -mfentry -triple i386-unknow
[PATCH] D28001: [X86] Teach Clang about -mfentry flag
dberris accepted this revision. dberris added a comment. This revision is now accepted and ready to land. LGTM https://reviews.llvm.org/D28001 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D28001: [X86] Teach Clang about -mfentry flag
niravd added inline comments. Comment at: include/clang/Driver/Options.td:1731 def mno_pie_copy_relocations : Flag<["-"], "mno-pie-copy-relocations">, Group; +def mfentry : Flag<["-"], "mfentry">, HelpText<"insert calls to fentry at function entry">, Flags<[CC1Option]>, Group; def mx87 : Flag<["-"], "mx87">, Group; mcrosier wrote: > Should this not be in the m_x86_Features_Group since this is an x86 specific > flag? Done. -mfentry should eventually defined for at least aarch64 but until that point we should have the flag match clang's actual capabilities. Comment at: test/CodeGen/fentry.c:1 +// RUN: %clang_cc1 -pg -mfentry -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck -check-prefix=HAS %s +// RUN: %clang_cc1 -pg -mfentry -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck -check-prefix=HAS %s mcrosier wrote: > I want to say this test should be in test/Frontend directory since you're > testing a new CC1 option. That seems reasonable, but I wanted to match with the mcount test. https://reviews.llvm.org/D28001 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D28001: [X86] Teach Clang about -mfentry flag
niravd updated this revision to Diff 83850. niravd marked 2 inline comments as done. niravd added a comment. Address comments https://reviews.llvm.org/D28001 Files: include/clang/Driver/Options.td include/clang/Frontend/CodeGenOptions.def lib/CodeGen/CodeGenFunction.cpp lib/Driver/Tools.cpp lib/Frontend/CompilerInvocation.cpp test/CodeGen/fentry.c Index: test/CodeGen/fentry.c === --- /dev/null +++ test/CodeGen/fentry.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -pg -mfentry -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -pg -mfentry -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -mfentry -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck -check-prefix=NOPG %s +// RUN: %clang_cc1 -mfentry -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck -check-prefix=NOPG %s + +int foo(void) { + return 0; +} + +//CHECK: attributes #{{[0-9]+}} = { {{.*}}"fentry-call"="true"{{.*}} } +//NOPG-NOT: attributes #{{[0-9]+}} = { {{.*}}"fentry-call"{{.*}} } Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -714,6 +714,7 @@ Opts.XRayInstructionThreshold = getLastArgIntValue(Args, OPT_fxray_instruction_threshold_, 200, Diags); Opts.InstrumentForProfiling = Args.hasArg(OPT_pg); + Opts.CallFEntry = Args.hasArg(OPT_mfentry); Opts.EmitOpenCLArgMetadata = Args.hasArg(OPT_cl_kernel_arg_info); Opts.CompressDebugSections = Args.hasArg(OPT_compress_debug_sections); Opts.RelaxELFRelocations = Args.hasArg(OPT_mrelax_relocations); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -5423,6 +5423,9 @@ if (getToolChain().SupportsProfiling()) Args.AddLastArg(CmdArgs, options::OPT_pg); + if (getToolChain().SupportsProfiling()) +Args.AddLastArg(CmdArgs, options::OPT_mfentry); + // -flax-vector-conversions is default. if (!Args.hasFlag(options::OPT_flax_vector_conversions, options::OPT_fno_lax_vector_conversions)) Index: lib/CodeGen/CodeGenFunction.cpp === --- lib/CodeGen/CodeGenFunction.cpp +++ lib/CodeGen/CodeGenFunction.cpp @@ -852,8 +852,12 @@ // inlining, we just add an attribute to insert a mcount call in backend. // The attribute "counting-function" is set to mcount function name which is // architecture dependent. - if (CGM.getCodeGenOpts().InstrumentForProfiling) -Fn->addFnAttr("counting-function", getTarget().getMCountName()); + if (CGM.getCodeGenOpts().InstrumentForProfiling) { +if (CGM.getCodeGenOpts().CallFEntry) + Fn->addFnAttr("fentry-call", "true"); +else + Fn->addFnAttr("counting-function", getTarget().getMCountName()); + } if (RetTy->isVoidType()) { // Void type; nothing to return. Index: include/clang/Frontend/CodeGenOptions.def === --- include/clang/Frontend/CodeGenOptions.def +++ include/clang/Frontend/CodeGenOptions.def @@ -83,6 +83,7 @@ VALUE_CODEGENOPT(XRayInstructionThreshold , 32, 200) CODEGENOPT(InstrumentForProfiling , 1, 0) ///< Set when -pg is enabled. +CODEGENOPT(CallFEntry , 1, 0) ///< Set when -mfentry is enabled. CODEGENOPT(LessPreciseFPMAD , 1, 0) ///< Enable less precise MAD instructions to ///< be generated. CODEGENOPT(PrepareForLTO , 1, 0) ///< Set when -flto is enabled on the Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1746,6 +1746,8 @@ Flags<[CC1Option]>, HelpText<"Use copy relocations support for PIE builds">; def mno_pie_copy_relocations : Flag<["-"], "mno-pie-copy-relocations">, Group; +def mfentry : Flag<["-"], "mfentry">, HelpText<"insert calls to fentry at function entry">, + Flags<[CC1Option]>, Group; def mx87 : Flag<["-"], "mx87">, Group; def m80387 : Flag<["-"], "m80387">, Alias; def msse2 : Flag<["-"], "msse2">, Group; Index: test/CodeGen/fentry.c === --- /dev/null +++ test/CodeGen/fentry.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -pg -mfentry -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -pg -mfentry -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -mfentry -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck -check-prefix=NOPG %s +// RUN: %clang_cc1 -mfentry -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck -check-prefix=NOPG %s + +int foo(void) { + return 0; +} + +//CHECK: attributes #{{[0-9]+}} = {
[PATCH] D28001: [X86] Teach Clang about -mfentry flag
mcrosier added inline comments. Comment at: test/CodeGen/fentry.c:11 + +//HAS: attributes #{{[0-9]+}} = { {{.*}}"fentry-call"="true"{{.*}} } +//NOHAS-NOT: attributes #{{[0-9]+}} = { {{.*}}"fentry-call"{{.*}} } mcrosier wrote: > I'd prefer we stick with the default CHECK and CHECK-NOT prefixes. Specifically, for the first two RUN commands please use CHECK and for the latter two use something like NOPG-NOT. https://reviews.llvm.org/D28001 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D28001: [X86] Teach Clang about -mfentry flag
mcrosier added inline comments. Comment at: include/clang/Driver/Options.td:1731 def mno_pie_copy_relocations : Flag<["-"], "mno-pie-copy-relocations">, Group; +def mfentry : Flag<["-"], "mfentry">, HelpText<"insert calls to fentry at function entry">, Flags<[CC1Option]>, Group; def mx87 : Flag<["-"], "mx87">, Group; Should this not be in the m_x86_Features_Group since this is an x86 specific flag? Comment at: test/CodeGen/fentry.c:1 +// RUN: %clang_cc1 -pg -mfentry -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck -check-prefix=HAS %s +// RUN: %clang_cc1 -pg -mfentry -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck -check-prefix=HAS %s I want to say this test should be in test/Frontend directory since you're testing a new CC1 option. Comment at: test/CodeGen/fentry.c:11 + +//HAS: attributes #{{[0-9]+}} = { {{.*}}"fentry-call"="true"{{.*}} } +//NOHAS-NOT: attributes #{{[0-9]+}} = { {{.*}}"fentry-call"{{.*}} } I'd prefer we stick with the default CHECK and CHECK-NOT prefixes. https://reviews.llvm.org/D28001 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits