Skip to content
  1. Feb 19, 2014
    • Rafael Espindola's avatar
      move getNameWithPrefix and getSymbol to TargetMachine. · a3ad4e69
      Rafael Espindola authored
      TargetLoweringBase is implemented in CodeGen, so before this patch we had
      a dependency fom Target to CodeGen. This would show up as a link failure of
      llvm-stress when building with -DBUILD_SHARED_LIBS=ON.
      
      This fixes pr18900.
      
      llvm-svn: 201711
      a3ad4e69
    • Rafael Espindola's avatar
      Add back r201608, r201622, r201624 and r201625 · daeafb4c
      Rafael Espindola authored
      r201608 made llvm corretly handle private globals with MachO. r201622 fixed
      a bug in it and r201624 and r201625 were changes for using private linkage,
      assuming that llvm would do the right thing.
      
      They all got reverted because r201608 introduced a crash in LTO. This patch
      includes a fix for that. The issue was that TargetLoweringObjectFile now has
      to be initialized before we can mangle names of private globals. This is
      trivially true during the normal codegen pipeline (the asm printer does it),
      but LTO has to do it manually.
      
      llvm-svn: 201700
      daeafb4c
    • Daniel Jasper's avatar
      Revert r201622 and r201608. · 7e198ad8
      Daniel Jasper authored
      This causes the LLVMgold plugin to segfault. More information on the
      replies to r201608.
      
      llvm-svn: 201669
      7e198ad8
  2. Feb 18, 2014
    • Rafael Espindola's avatar
      Fix PR18743. · 09dcc6a5
      Rafael Espindola authored
      The IR
      @foo = private constant i32 42
      
      is valid, but before this patch we would produce an invalid MachO from it. It
      was invalid because it would use an L label in a section where the liker needs
      the labels in order to atomize it.
      
      One way of fixing it would be to just reject this IR in the backend, but that
      would not be very front end friendly.
      
      What this patch does is use an 'l' prefix in sections that we know the linker
      requires symbols for atomizing them. This allows frontends to just use
      private and not worry about which sections they go to or how the linker handles
      them.
      
      One small issue with this strategy is that now a symbol name depends on the
      section, which is not available before codegen. This is not a problem in
      practice. The reason is that it only happens with private linkage, which will
      be ignored by the non codegen users (llvm-nm and llvm-ar).
      
      llvm-svn: 201608
      09dcc6a5
  3. Feb 11, 2014
    • Manman Ren's avatar
      LTO API: add lto_module_create_from_memory_with_path. · 03456a17
      Manman Ren authored
      This function adds an extra path argument to lto_module_create_from_memory.
      The path argument will be passed to makeBuffer to make sure the MemoryBuffer
      has a name and the created module has a module identifier.
      
      This is mainly for emitting warning messages from the linker. When we emit
      warning message on a module, we can use the module identifier.
      
      rdar://15985737
      
      llvm-svn: 201114
      03456a17
  4. Feb 07, 2014
  5. Jan 29, 2014
  6. Jan 26, 2014
  7. Jan 24, 2014
  8. Jan 23, 2014
    • Juergen Ributzka's avatar
      Add target analysis passes to the codegen pipeline for MCJIT. · 5fe955cb
      Juergen Ributzka authored
      This patch adds the target analysis passes (usually TargetTransformInfo) to the
      codgen pipeline. We also expose now the AddAnalysisPasses method through the C
      API, because the optimizer passes would also benefit from better target-specific
      cost models.
      
      Reviewed by Andrew Kaylor
      
      llvm-svn: 199926
      5fe955cb
  9. Jan 22, 2014
  10. Jan 21, 2014
  11. Jan 15, 2014
    • Quentin Colombet's avatar
      [LTO] Add a hook to map LLVM diagnostics into the clients of LTO. · 5fa1f6f5
      Quentin Colombet authored
      Add a hook in the C API of LTO so that clients of the code generator can set
      their own handler for the LLVM diagnostics.
      The handler is defined like this:
      typedef void (*lto_diagnostic_handler_t)(lto_codegen_diagnostic_severity_t
      severity, const char *diag, void *ctxt)
      - severity says how bad this is.
      - diag is a string that contains the diagnostic message.
      - ctxt is the registered context for this handler.
      
      This hook is more general than the lto_get_error_message, since this function
      keeps only the latest message and can only be queried when something went wrong
      (no warning for instance).
      
      <rdar://problem/15517596>
      
      llvm-svn: 199338
      5fa1f6f5
    • Rafael Espindola's avatar
      Return an error_code from materializeAllPermanently. · e9fab9b0
      Rafael Espindola authored
      llvm-svn: 199275
      e9fab9b0
  12. Jan 14, 2014
    • Duncan P. N. Exon Smith's avatar
      Reapply "LTO: add API to set strategy for -internalize" · 93be7c4f
      Duncan P. N. Exon Smith authored
      Reapply r199191, reverted in r199197 because it carelessly broke
      Other/link-opts.ll.  The problem was that calling
      createInternalizePass("main") would select
      createInternalizePass(bool("main")) instead of
      createInternalizePass(ArrayRef<const char *>("main")).  This commit
      fixes the bug.
      
      The original commit message follows.
      
      Add API to LTOCodeGenerator to specify a strategy for the -internalize
      pass.
      
      This is a new attempt at Bill's change in r185882, which he reverted in
      r188029 due to problems with the gold linker.  This puts the onus on the
      linker to decide whether (and what) to internalize.
      
      In particular, running internalize before outputting an object file may
      change a 'weak' symbol into an internal one, even though that symbol
      could be needed by an external object file --- e.g., with arclite.
      
      This patch enables three strategies:
      
      - LTO_INTERNALIZE_FULL: the default (and the old behaviour).
      - LTO_INTERNALIZE_NONE: skip -internalize.
      - LTO_INTERNALIZE_HIDDEN: only -internalize symbols with hidden
        visibility.
      
      LTO_INTERNALIZE_FULL should be used when linking an executable.
      
      Outputting an object file (e.g., via ld -r) is more complicated, and
      depends on whether hidden symbols should be internalized.  E.g., for
      ld -r, LTO_INTERNALIZE_NONE can be used when -keep_private_externs, and
      LTO_INTERNALIZE_HIDDEN can be used otherwise.  However,
      LTO_INTERNALIZE_FULL is inappropriate, since the output object file will
      eventually need to link with others.
      
      lto_codegen_set_internalize_strategy() sets the strategy for subsequent
      calls to lto_codegen_write_merged_modules() and lto_codegen_compile*().
      
      <rdar://problem/14334895>
      
      llvm-svn: 199244
      93be7c4f
    • NAKAMURA Takumi's avatar
      Revert r199191, "LTO: add API to set strategy for -internalize" · 23c0ab53
      NAKAMURA Takumi authored
      Please update also Other/link-opts.ll, in next time.
      
      llvm-svn: 199197
      23c0ab53
    • Duncan P. N. Exon Smith's avatar
      LTO: add API to set strategy for -internalize · 43ea3478
      Duncan P. N. Exon Smith authored
      Add API to LTOCodeGenerator to specify a strategy for the -internalize
      pass.
      
      This is a new attempt at Bill's change in r185882, which he reverted in
      r188029 due to problems with the gold linker.  This puts the onus on the
      linker to decide whether (and what) to internalize.
      
      In particular, running internalize before outputting an object file may
      change a 'weak' symbol into an internal one, even though that symbol
      could be needed by an external object file --- e.g., with arclite.
      
      This patch enables three strategies:
      
      - LTO_INTERNALIZE_FULL: the default (and the old behaviour).
      - LTO_INTERNALIZE_NONE: skip -internalize.
      - LTO_INTERNALIZE_HIDDEN: only -internalize symbols with hidden
        visibility.
      
      LTO_INTERNALIZE_FULL should be used when linking an executable.
      
      Outputting an object file (e.g., via ld -r) is more complicated, and
      depends on whether hidden symbols should be internalized.  E.g., for
      ld -r, LTO_INTERNALIZE_NONE can be used when -keep_private_externs, and
      LTO_INTERNALIZE_HIDDEN can be used otherwise.  However,
      LTO_INTERNALIZE_FULL is inappropriate, since the output object file will
      eventually need to link with others.
      
      lto_codegen_set_internalize_strategy() sets the strategy for subsequent
      calls to lto_codegen_write_merged_modules() and lto_codegen_compile*().
      
      <rdar://problem/14334895>
      
      llvm-svn: 199191
      43ea3478
  13. Jan 13, 2014
    • Rafael Espindola's avatar
      Update getLazyBitcodeModule to use ErrorOr for error handling. · 5b6c1e8e
      Rafael Espindola authored
      llvm-svn: 199125
      5b6c1e8e
    • Chandler Carruth's avatar
      [cleanup] Move the Dominators.h and Verifier.h headers into the IR · 5ad5f15c
      Chandler Carruth authored
      directory. These passes are already defined in the IR library, and it
      doesn't make any sense to have the headers in Analysis.
      
      Long term, I think there is going to be a much better way to divide
      these matters. The dominators code should be fully separated into the
      abstract graph algorithm and have that put in Support where it becomes
      obvious that evn Clang's CFGBlock's can use it. Then the verifier can
      manually construct dominance information from the Support-driven
      interface while the Analysis library can provide a pass which both
      caches, reconstructs, and supports a nice update API.
      
      But those are very long term, and so I don't want to leave the really
      confusing structure until that day arrives.
      
      llvm-svn: 199082
      5ad5f15c
  14. Jan 10, 2014
  15. Jan 07, 2014
  16. Jan 03, 2014
    • Rafael Espindola's avatar
      Make the llvm mangler depend only on DataLayout. · 58873566
      Rafael Espindola authored
      Before this patch any program that wanted to know the final symbol name of a
      GlobalValue had to link with Target.
      
      This patch implements a compromise solution where the mangler uses DataLayout.
      This way, any tool that already links with Target (llc, clang) gets the exact
      behavior as before and new IR files can be mangled without linking with Target.
      
      With this patch the mangler is constructed with just a DataLayout and DataLayout
      is extended to include the information the Mangler needs.
      
      llvm-svn: 198438
      58873566
  17. Dec 12, 2013
  18. Dec 11, 2013
  19. Dec 10, 2013
  20. Dec 09, 2013
  21. Dec 05, 2013
    • Rafael Espindola's avatar
      Remove the isImplicitlyPrivate argument of getNameWithPrefix. · 117b20c4
      Rafael Espindola authored
      getSymbolWithGlobalValueBase use is to create a name of a new symbol based
      on the name of an existing GV. Assert that and then remove the last call
      to pass true to isImplicitlyPrivate.
      
      This gives the mangler API a 1:1 mapping from GV to names, which is what we
      need to drop the mangler dependency on the target (and use an extended
      datalayout instead).
      
      llvm-svn: 196472
      117b20c4
  22. Nov 16, 2013
  23. Nov 12, 2013
    • Justin Bogner's avatar
      Protect user-supplied runtime library functions in LTO · b10a520c
      Justin Bogner authored
      Add user-supplied C runtime and compiler-rt library functions to
      llvm.compiler.used to protect them from premature optimization by
      passes like -globalopt and -ipsccp.  Calls to (seemingly unused)
      runtime library functions can be added by -instcombine and instruction
      lowering.
      
      Patch by Duncan Exon Smith, thanks!
      
      Fixes <rdar://problem/14740087>
      
      llvm-svn: 194514
      b10a520c
  24. Nov 01, 2013
    • Rafael Espindola's avatar
      Remove linkonce_odr_auto_hide. · 716e7405
      Rafael Espindola authored
      linkonce_odr_auto_hide was in incomplete attempt to implement a way
      for the linker to hide symbols that are known to be available in every
      TU and whose addresses are not relevant for a particular DSO.
      
      It was redundant in that it all its uses are equivalent to
      linkonce_odr+unnamed_addr. Unlike those, it has never been connected
      to clang or llvm's optimizers, so it was effectively dead.
      
      Given that nothing produces it, this patch just nukes it
      (other than the llvm-c enum value).
      
      llvm-svn: 193865
      716e7405
  25. Oct 31, 2013
    • Rafael Espindola's avatar
      Use LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN instead of the "dso list". · 282a4703
      Rafael Espindola authored
      There are two ways one could implement hiding of linkonce_odr symbols in LTO:
      * LLVM tells the linker which symbols can be hidden if not used from native
        files.
      * The linker tells LLVM which symbols are not used from other object files,
        but will be put in the dso symbol table if present.
      
      GOLD's API is the second option. It was implemented almost 1:1 in llvm by
      passing the list down to internalize.
      
      LLVM already had partial support for the first option. It is also very similar
      to how ld64 handles hiding these symbols when *not* doing LTO.
      
      This patch then
      * removes the APIs for the DSO list.
      * marks LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN all linkonce_odr unnamed_addr
        global values and other linkonce_odr whose address is not used.
      * makes the gold plugin responsible for handling the API mismatch.
      
      llvm-svn: 193800
      282a4703
  26. Oct 29, 2013
  27. Oct 16, 2013
  28. Oct 08, 2013
    • Rafael Espindola's avatar
      Add a MCTargetStreamer interface. · a17151ad
      Rafael Espindola authored
      This patch fixes an old FIXME by creating a MCTargetStreamer interface
      and moving the target specific functions for ARM, Mips and PPC to it.
      
      The ARM streamer is still declared in a common place because it is
      used from lib/CodeGen/ARMException.cpp, but the Mips and PPC are
      completely hidden in the corresponding Target directories.
      
      I will send an email to llvmdev with instructions on how to use this.
      
      llvm-svn: 192181
      a17151ad
  29. Oct 05, 2013
    • Rafael Espindola's avatar
      Remove some really nasty uses of hasRawTextSupport. · ac4ad25a
      Rafael Espindola authored
      When MC was first added, targets could use hasRawTextSupport to keep features
      working before they were added to the MC interface.
      
      The design goal of MC is to provide an uniform api for printing assembly and
      object files. Short of relaxations and other corner cases, a object file is
      just another representation of the assembly.
      
      It was never the intention that targets would keep doing things like
      
      if (hasRawTextSupport())
        Set flags in one way.
      else
        Set flags in another way.
      
      When they do that they create two code paths and the object file is no longer
      just another representation of the assembly. This also then requires testing
      with llc -filetype=obj, which is extremelly brittle.
      
      This patch removes some of these hacks by replacing them with smaller ones.
      The ARM flag setting is trivial, so I just moved it to the constructor. For
      Mips, the patch adds two temporary hack directives that allow the assembly
      to represent the same things as the object file was already able to.
      
      The hope is that the mips developers will replace the hack directives with
      the same ones that gas uses and drop the -print-hack-directives flag.
      
      I will also try to implement a target streamer interface, so that we can
      move this out of the common code.
      
      In summary, for any new work, two rules of the thumb are
        * Don't use "llc -filetype=obj" in tests.
        * Don't add calls to hasRawTextSupport.
      
      llvm-svn: 192035
      ac4ad25a
  30. Oct 03, 2013
    • Rafael Espindola's avatar
      Optimize linkonce_odr unnamed_addr functions during LTO. · cda2911c
      Rafael Espindola authored
      Generalize the API so we can distinguish symbols that are needed just for a DSO
      symbol table from those that are used from some native .o.
      
      The symbols that are only wanted for the dso symbol table can be dropped if
      llvm can prove every other dso has a copy (linkonce_odr) and the address is not
      important (unnamed_addr).
      
      llvm-svn: 191922
      cda2911c
Loading