r251385 - Create undef reference to profile hook symbol
Justin Bogner via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 28 11:03:50 PDT 2015
Xinliang David Li via cfe-commits <cfe-commits at lists.llvm.org> writes:
> Author: davidxl
> Date: Tue Oct 27 00:15:35 2015
> New Revision: 251385
>
> URL: http://llvm.org/viewvc/llvm-project?rev=251385&view=rev
> Log:
> Create undef reference to profile hook symbol
>
> Create undef reference to profile hook symbol when
> PGO instrumentation is turned on. This allows
> LLVM to omit emission of hook variable use method
> for every single module instrumented.
Nick: This approach should work for ld64 as well, right?
David: This seems like a good idea, but it's buggy as implemented.
Details below.
>
> Modified:
> cfe/trunk/lib/Driver/ToolChains.cpp
> cfe/trunk/lib/Driver/ToolChains.h
>
> Modified: cfe/trunk/lib/Driver/ToolChains.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=251385&r1=251384&r2=251385&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Driver/ToolChains.cpp (original)
> +++ cfe/trunk/lib/Driver/ToolChains.cpp Tue Oct 27 00:15:35 2015
> @@ -25,6 +25,7 @@
> #include "llvm/Option/ArgList.h"
> #include "llvm/Option/OptTable.h"
> #include "llvm/Option/Option.h"
> +#include "llvm/ProfileData/InstrProf.h"
> #include "llvm/Support/ErrorHandling.h"
> #include "llvm/Support/FileSystem.h"
> #include "llvm/Support/MemoryBuffer.h"
> @@ -3811,6 +3812,18 @@ SanitizerMask Linux::getSupportedSanitiz
> return Res;
> }
>
> +void Linux::addProfileRTLibs(const llvm::opt::ArgList &Args,
> + llvm::opt::ArgStringList &CmdArgs) const {
> + if (!needsProfileRT(Args)) return;
> +
> + // Add linker option -u__llvm_runtime_variable to cause runtime
> + // initialization module to be linked in.
> + if (!Args.hasArg(options::OPT_coverage))
This check isn't right. What about the other gcov-style flags like
-fprofile-args? What if both kinds of coverage are on for some strange
reason? It's also a maintenance burden, since the logic needs to be
duplicated from needsProfileRT. I think we need finer grained helpers -
maybe something like needsGCOVRT and needsInstrProfRT, either of which
will pull in the profileRTLibs.
> + CmdArgs.push_back(Args.MakeArgString(
> + Twine("-u", llvm::getInstrProfRuntimeHookVarName())));
> + ToolChain::addProfileRTLibs(Args, CmdArgs);
> +}
> +
> /// DragonFly - DragonFly tool chain which can call as(1) and ld(1) directly.
>
> DragonFly::DragonFly(const Driver &D, const llvm::Triple &Triple,
>
> Modified: cfe/trunk/lib/Driver/ToolChains.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=251385&r1=251384&r2=251385&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Driver/ToolChains.h (original)
> +++ cfe/trunk/lib/Driver/ToolChains.h Tue Oct 27 00:15:35 2015
> @@ -744,6 +744,8 @@ public:
> llvm::opt::ArgStringList &CC1Args) const override;
> bool isPIEDefault() const override;
> SanitizerMask getSupportedSanitizers() const override;
> + void addProfileRTLibs(const llvm::opt::ArgList &Args,
> + llvm::opt::ArgStringList &CmdArgs) const override;
>
> std::string Linker;
> std::vector<std::string> ExtraOpts;
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list