Skip to content
  1. Aug 04, 2015
  2. Aug 03, 2015
    • Tim Northover's avatar
      ARM: prefer allocating VFP regs at stride 4 on Darwin. · 910dde7a
      Tim Northover authored
      This is necessary for WatchOS support, where the compact unwind format assumes
      this kind of layout. For now we only want this on Swift-like CPUs though, where
      it's been the Xcode behaviour for ages. Also, since it can expand the prologue
      we don't want it at -Oz.
      
      llvm-svn: 243884
      910dde7a
  3. Jul 29, 2015
  4. Jul 21, 2015
  5. Jul 18, 2015
    • Matthias Braun's avatar
      ARM: Enable MachineScheduler and disable PostRAScheduler for swift. · 9e859806
      Matthias Braun authored
      Reapply r242500 now that the swift schedmodel includes LDRLIT.
      
      This is mostly done to disable the PostRAScheduler which optimizes for
      instruction latencies which isn't a good fit for out-of-order
      architectures. This also allows to leave out the itinerary table in
      swift in favor of the SchedModel ones.
      
      This change leads to performance improvements/regressions by as much as
      10% in some benchmarks, in fact we loose 0.4% performance over the
      llvm-testsuite for reasons that appear to be unknown or out of the
      compilers control. rdar://20803802 documents the investigation of
      these effects.
      
      While it is probably a good idea to perform the same switch for the
      other ARM out-of-order CPUs, I limited this change to swift as I cannot
      perform the benchmark verification on the other CPUs.
      
      Differential Revision: http://reviews.llvm.org/D10513
      
      llvm-svn: 242588
      9e859806
  6. Jul 17, 2015
    • Adam Nemet's avatar
      Revert "ARM: Enable MachineScheduler and disable PostRAScheduler for swift." · 5a6d5bc1
      Adam Nemet authored
      This reverts commit r242500.
      
      It broke some internal tests and Matthias asked me to revert it while he
      is investigating.
      
      llvm-svn: 242553
      5a6d5bc1
    • Matthias Braun's avatar
      ARM: Enable MachineScheduler and disable PostRAScheduler for swift. · 2d8315f8
      Matthias Braun authored
      This is mostly done to disable the PostRAScheduler which optimizes for
      instruction latencies which isn't a good fit for out-of-order
      architectures. This also allows to leave out the itinerary table in
      swift in favor of the SchedModel ones.
      
      This change leads to performance improvements/regressions by as much as
      10% in some benchmarks, in fact we loose 0.4% performance over the
      llvm-testsuite for reasons that appear to be unknown or out of the
      compilers control. rdar://20803802 documents the investigation of
      these effects.
      
      While it is probably a good idea to perform the same switch for the
      other ARM out-of-order CPUs, I limited this change to swift as I cannot
      perform the benchmark verification on the other CPUs.
      
      Differential Revision: http://reviews.llvm.org/D10513
      
      llvm-svn: 242500
      2d8315f8
  7. Jul 16, 2015
  8. Jul 09, 2015
  9. Jul 07, 2015
  10. Jul 05, 2015
    • Peter Collingbourne's avatar
      IR: Do not consider available_externally linkage to be linker-weak. · 6a9d1774
      Peter Collingbourne authored
      From the linker's perspective, an available_externally global is equivalent
      to an external declaration (per isDeclarationForLinker()), so it is incorrect
      to consider it to be a weak definition.
      
      Also clean up some logic in the dead argument elimination pass and clarify
      its comments to better explain how its behavior depends on linkage,
      introduce GlobalValue::isStrongDefinitionForLinker() and start using
      it throughout the optimizers and backend.
      
      Differential Revision: http://reviews.llvm.org/D10941
      
      llvm-svn: 241413
      6a9d1774
  11. Jun 13, 2015
  12. Jun 10, 2015
  13. May 26, 2015
    • Michael Kuperstein's avatar
      Use std::bitset for SubtargetFeatures. · db0712f9
      Michael Kuperstein authored
      Previously, subtarget features were a bitfield with the underlying type being uint64_t. 
      Since several targets (X86 and ARM, in particular) have hit or were very close to hitting this bound, switching the features to use a bitset.
      No functional change.
      
      The first several times this was committed (e.g. r229831, r233055), it caused several buildbot failures.
      Apparently the reason for most failures was both clang and gcc's inability to deal with large numbers (> 10K) of bitset constructor calls in tablegen-generated initializers of instruction info tables. 
      This should now be fixed.
      
      llvm-svn: 238192
      db0712f9
  14. May 23, 2015
    • Akira Hatanaka's avatar
      Stop resetting NoFramePointerElim in TargetMachine::resetTargetOptions. · ddf76aa3
      Akira Hatanaka authored
      This is part of the work to remove TargetMachine::resetTargetOptions.
      
      In this patch, instead of updating global variable NoFramePointerElim in
      resetTargetOptions, its use in DisableFramePointerElim is replaced with a call
      to TargetFrameLowering::noFramePointerElim. This function determines on a
      per-function basis if frame pointer elimination should be disabled.
      
      There is no change in functionality except that cl:opt option "disable-fp-elim"
      can now override function attribute "no-frame-pointer-elim". 
      
      llvm-svn: 238080
      ddf76aa3
  15. May 13, 2015
    • Michael Kuperstein's avatar
      Reverting r237234, "Use std::bitset for SubtargetFeatures" · c3434b39
      Michael Kuperstein authored
      The buildbots are still not satisfied.
      MIPS and ARM are failing (even though at least MIPS was expected to pass).
      
      llvm-svn: 237245
      c3434b39
    • Michael Kuperstein's avatar
      Use std::bitset for SubtargetFeatures · aba4a34e
      Michael Kuperstein authored
      Previously, subtarget features were a bitfield with the underlying type being uint64_t. 
      Since several targets (X86 and ARM, in particular) have hit or were very close to hitting this bound, switching the features to use a bitset.
      No functional change.
      
      The first two times this was committed (r229831, r233055), it caused several buildbot failures. 
      At least some of the ARM and MIPS ones were due to gcc/binutils issues, and should now be fixed.
      
      llvm-svn: 237234
      aba4a34e
  16. May 12, 2015
    • Eric Christopher's avatar
      Migrate existing backends that care about software floating point · 824f42f2
      Eric Christopher authored
      to use the information in the module rather than TargetOptions.
      
      We've had and clang has used the use-soft-float attribute for some
      time now so have the backends set a subtarget feature based on
      a particular function now that subtargets are created based on
      functions and function attributes.
      
      For the one middle end soft float check go ahead and create
      an overloadable TargetLowering::useSoftFloat function that
      just checks the TargetSubtargetInfo in all cases.
      
      Also remove the command line option that hard codes whether or
      not soft-float is set by using the attribute for all of the
      target specific test cases - for the generic just go ahead and
      add the attribute in the one case that showed up.
      
      llvm-svn: 237079
      824f42f2
  17. Apr 14, 2015
  18. Apr 01, 2015
  19. Mar 30, 2015
  20. Mar 26, 2015
  21. Mar 24, 2015
    • Michael Kuperstein's avatar
      Revert "Use std::bitset for SubtargetFeatures" · 29704e7f
      Michael Kuperstein authored
      This reverts commit r233055.
      
      It still causes buildbot failures (gcc running out of memory on several platforms, and a self-host failure on arm), although less than the previous time.
      
      llvm-svn: 233068
      29704e7f
    • Michael Kuperstein's avatar
      Use std::bitset for SubtargetFeatures · 774b441b
      Michael Kuperstein authored
      Previously, subtarget features were a bitfield with the underlying type being uint64_t. 
      Since several targets (X86 and ARM, in particular) have hit or were very close to hitting this bound, switching the features to use a bitset.
      No functional change.
      
      The first time this was committed (r229831), it caused several buildbot failures. 
      At least some of the ARM ones were due to gcc/binutils issues, and should now be fixed.
      
      Differential Revision: http://reviews.llvm.org/D8542
      
      llvm-svn: 233055
      774b441b
  22. Mar 17, 2015
    • Renato Golin's avatar
      [ARM] Add support for ARMV6K subtarget (LLVM) · 12350607
      Renato Golin authored
      ARMv6K is another layer between ARMV6 and ARMV6T2. This is the LLVM
      side of the changes.
      
      ARMV6 family LLVM implementation.
      
      +-------------------------------------+
      | ARMV6                               |
      +----------------+--------------------+
      | ARMV6M (thumb) | ARMV6K (arm,thumb) | <- From ARMV6K and ARMV6M processors
      +----------------+--------------------+    have support for hint instructions
      | ARMV6T2 (arm,thumb,thumb2)          |    (SEV/WFE/WFI/NOP/YIELD). They can
      +-------------------------------------+    be either real or default to NOP.
      | ARMV7 (arm,thumb,thumb2)            |    The two processors also use
      +-------------------------------------+    different encoding for them.
      
      Patch by Vinicius Tinti.
      
      llvm-svn: 232468
      12350607
  23. Feb 19, 2015
  24. Feb 14, 2015
    • Duncan P. N. Exon Smith's avatar
      ARM: Canonicalize access to function attributes, NFC · 2cff9e19
      Duncan P. N. Exon Smith authored
      Canonicalize access to function attributes to use the simpler API.
      
      getAttributes().getAttribute(AttributeSet::FunctionIndex, Kind)
        => getFnAttribute(Kind)
      
      getAttributes().hasAttribute(AttributeSet::FunctionIndex, Kind)
        => hasFnAttribute(Kind)
      
      llvm-svn: 229220
      2cff9e19
  25. Jan 29, 2015
  26. Jan 26, 2015
    • Eric Christopher's avatar
      Move DataLayout back to the TargetMachine from TargetSubtargetInfo · 8b770651
      Eric Christopher authored
      derived classes.
      
      Since global data alignment, layout, and mangling is often based on the
      DataLayout, move it to the TargetMachine. This ensures that global
      data is going to be layed out and mangled consistently if the subtarget
      changes on a per function basis. Prior to this all targets(*) have
      had subtarget dependent code moved out and onto the TargetMachine.
      
      *One target hasn't been migrated as part of this change: R600. The
      R600 port has, as a subtarget feature, the size of pointers and
      this affects global data layout. I've currently hacked in a FIXME
      to enable progress, but the port needs to be updated to either pass
      the 64-bitness to the TargetMachine, or fix the DataLayout to
      avoid subtarget dependent features.
      
      llvm-svn: 227113
      8b770651
  27. Jan 14, 2015
    • Chandler Carruth's avatar
      [cleanup] Re-sort all the #include lines in LLVM using · d9903888
      Chandler Carruth authored
      utils/sort_includes.py.
      
      I clearly haven't done this in a while, so more changed than usual. This
      even uncovered a missing include from the InstrProf library that I've
      added. No functionality changed here, just mechanical cleanup of the
      include order.
      
      llvm-svn: 225974
      d9903888
  28. Dec 18, 2014
    • Eric Christopher's avatar
      Add a new string member to the TargetOptions struct for the name · 661f2d1c
      Eric Christopher authored
      of the abi we should be using. For targets that don't use the
      option there's no change, otherwise this allows external users
      to set the ABI via string and avoid some of the -backend-option
      pain in clang.
      
      Use this option to move the ABI for the ARM port from the
      Subtarget to the TargetMachine and update the testcases
      accordingly since it's no longer valid to set via -mattr.
      
      llvm-svn: 224492
      661f2d1c
    • Eric Christopher's avatar
      Model ARM backend ABI selection after the front end code doing the · 1971c350
      Eric Christopher authored
      same. This will change the "bare metal" ABI from APCS to AAPCS.
      
      The only difference between the front and back end code is that
      the code for Triple::GNU was added for environment. That will migrate
      to the front end shortly.
      
      Tests updated with the ABI they were originally testing in the case
      of bare metal (e.g. -mtriple armv7) or with a -gnu for arm-linux
      triples.
      
      llvm-svn: 224489
      1971c350
  29. Dec 11, 2014
    • Tim Northover's avatar
      ARM: convert isTargetIOS checks to isTargetDarwin. · e2c33715
      Tim Northover authored
      The distinction is mostly useful in the front-end. By the time we get here,
      there are very few situations where we actually want different behaviour for
      Darwin and IOS (in fact Darwin mostly just exists in a few tests). So this
      should reduce any surprising weirdness for anyone using it.
      
      No functional change on anything anyone actually cares about.
      
      llvm-svn: 224035
      e2c33715
  30. Nov 01, 2014
    • Rafael Espindola's avatar
      Remove redundant calls to isMaterializable. · 246c4fb5
      Rafael Espindola authored
      This removes calls to isMaterializable in the following cases:
      
      * It was redundant with a call to isDeclaration now that isDeclaration returns
        the correct answer for materializable functions.
      * It was followed by a call to Materialize. Just call Materialize and check EC.
      
      llvm-svn: 221050
      246c4fb5
  31. Oct 15, 2014
    • Tim Northover's avatar
      ARM: drop check for triple that's no longer used. · e9ff4c29
      Tim Northover authored
      Early attempts to support AAPCS bare metal MachO targets based the decision on
      the CPU being compiled for. This was not a particularly great idea and we've
      got a better option now, but this check remained.
      
      No functional change for any target we care about.
      
      llvm-svn: 219767
      e9ff4c29
    • Tim Northover's avatar
      ARM: remove ARM/Thumb distinction for preferred alignment. · cf6ce0c8
      Tim Northover authored
      Thumb1 has legitimate reasons for preferring 32-bit alignment of types
      i1/i8/i16, since the 16-bit encoding of "add rD, sp, #imm" requires #imm to be
      a multiple of 4. However, this is a trade-off betweem code size and RAM usage;
      the DataLayout string is not the best place to represent it even if desired.
      
      So this patch removes the extra Thumb requirements, hopefully making ARM and
      Thumb completely compatible in this respect.
      
      llvm-svn: 219734
      cf6ce0c8
  32. Oct 14, 2014
    • Tim Northover's avatar
      ARM: set preferred aggregate alignment to 32 universally. · aa09ac6e
      Tim Northover authored
      Before, ARM and Thumb mode code had different preferred alignments, which could
      lead to some rather unexpected results. There's justification for reducing it
      from the default 64-bits (wasted space), but I don't think there is for going
      below 32-bits.
      
      There's no actual ABI change here, just to reassure people.
      
      llvm-svn: 219719
      aa09ac6e
Loading