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