Skip to content
  1. Mar 29, 2013
  2. Mar 27, 2013
    • Hal Finkel's avatar
      Fix target-customized spilling in the register scavenger · 35dd5c59
      Hal Finkel authored
      This is a follow-up to r178073 (which should actually make target-customized
      spilling work again).
      
      I still don't have a regression test for this (but it would be good to have
      one; Thumb 1 and Mips16 use this callback as well).
      
      Patch by Richard Sandiford.
      
      llvm-svn: 178137
      35dd5c59
  3. Mar 26, 2013
    • Hal Finkel's avatar
      Fix the register scavenger for targets that provide custom spilling · 1fa2f945
      Hal Finkel authored
      As pointed out by Richard Sandiford, my recent updates to the register
      scavenger broke targets that use custom spilling (because the new code assumed
      that if there were no valid spill slots, than spilling would be impossible).
      
      I don't have a test case, but it should be possible to create one for Thumb 1,
      Mips 16, etc.
      
      llvm-svn: 178073
      1fa2f945
    • Hal Finkel's avatar
      Update PEI's virtual-register-based scavenging to support multiple simultaneous mappings · 4e05788c
      Hal Finkel authored
      The previous algorithm could not deal properly with scavenging multiple virtual
      registers because it kept only one live virtual -> physical mapping (and
      iterated through operands in order). Now we don't maintain a current mapping,
      but rather use replaceRegWith to completely remove the virtual register as
      soon as the mapping is established.
      
      In order to allow the register scavenger to return a physical register killed
      by an instruction for definition by that same instruction, we now call
      RS->forward(I) prior to eliminating virtual registers defined in I. This
      requires a minor update to forward to ignore virtual registers.
      
      These new features will be tested in forthcoming commits.
      
      llvm-svn: 178058
      4e05788c
    • Michael Liao's avatar
      Enhance folding of (extract_subvec (insert_subvec V1, V2, IIdx), EIdx) · bb05a1d7
      Michael Liao authored
      - Handle the case where the result of 'insert_subvect' is bitcasted
        before 'extract_subvec'. This removes the redundant insertf128/extractf128
        pair on unaligned 256-bit vector load/store on vectors of non 64-bit integer.
      
      llvm-svn: 177945
      bb05a1d7
  4. Mar 25, 2013
  5. Mar 23, 2013
    • Owen Anderson's avatar
      Remove the type legality check from the SelectionDAGBuilder when it lowers... · c81616b0
      Owen Anderson authored
      Remove the type legality check from the SelectionDAGBuilder when it lowers @llvm.fmuladd to ISD::FMA nodes.
      Performing this check unilaterally prevented us from generating FMAs when the incoming IR contained illegal vector types which would eventually be legalized to underlying types that *did* support FMA.
      For example, an @llvm.fmuladd on an OpenCL float16 should become a sequence of float4 FMAs, not float4 fmul+fadd's.
      
      NOTE: Because we still call the target-specific profitability hook, individual targets can reinstate the old behavior, if desired, by simply performing the legality check inside their callback hook.  They can also perform more sophisticated legality checks, if, for example, some illegal vector types can be productively implemented as FMAs, but not others.
      llvm-svn: 177820
      c81616b0
    • Hal Finkel's avatar
      Fix comparison of mixed signedness · 446122ed
      Hal Finkel authored
      177774 broke the lld-x86_64-darwin11 builder; error:
      error: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long')
        for (SI = 0; SI < Scavenged.size(); ++SI)
                     ~~ ^ ~~~~~~~~~~~~~~~~
      
      Fix this by making SI also unsigned.
      
      llvm-svn: 177780
      446122ed
    • Hal Finkel's avatar
      Allow the register scavenger to spill multiple registers · 9e331c2f
      Hal Finkel authored
      This patch lets the register scavenger make use of multiple spill slots in
      order to guarantee that it will be able to provide multiple registers
      simultaneously.
      
      To support this, the RS's API has changed slightly: setScavengingFrameIndex /
      getScavengingFrameIndex have been replaced by addScavengingFrameIndex /
      isScavengingFrameIndex / getScavengingFrameIndices.
      
      In forthcoming commits, the PowerPC backend will use this capability in order
      to implement the spilling of condition registers, and some special-purpose
      registers, without relying on r0 being reserved. In some cases, spilling these
      registers requires two GPRs: one for addressing and one to hold the value being
      transferred.
      
      llvm-svn: 177774
      9e331c2f
  6. Mar 22, 2013
  7. Mar 21, 2013
  8. Mar 20, 2013
  9. Mar 19, 2013
  10. Mar 18, 2013
  11. Mar 16, 2013
    • Andrew Trick's avatar
      Change the default latency for implicit defs. · 6057017c
      Andrew Trick authored
      Implicit defs are not currently positional and not modeled by the
      per-operand machine model. Unfortunately, we treat defs that are part
      of the architectural instruction description, like flags, the same as
      other implicit defs. Really, they should have a fixed MachineInstr
      layout and probably shouldn't be "implicit" at all.
      
      For now, we'll change the default latency to be the max operand
      latency. That will give flag setting operands full latency for x86
      folded loads. Other kinds of "fake" implicit defs don't occur prior to
      regalloc anyway, and we would like them to go away postRegAlloc as
      well.
      
      llvm-svn: 177227
      6057017c
  12. Mar 14, 2013
    • Hal Finkel's avatar
      Move estimateStackSize from ARM into MachineFrameInfo · 628ba128
      Hal Finkel authored
      This is a generic function (derived from PEI); moving it into
      MachineFrameInfo eliminates a current redundancy between the ARM and AArch64
      backends, and will allow it to be used by the PowerPC target code.
      
      No functionality change intended.
      
      llvm-svn: 177111
      628ba128
    • Hal Finkel's avatar
      Provide the register scavenger to processFunctionBeforeFrameFinalized · 5a765fdd
      Hal Finkel authored
      Add the current PEI register scavenger as a parameter to the
      processFunctionBeforeFrameFinalized callback.
      
      This change is necessary in order to allow the PowerPC target code to
      set the register scavenger frame index after the save-area offset
      adjustments performed by processFunctionBeforeFrameFinalized. Only
      after these adjustments have been made is it possible to estimate
      the size of the stack frame.
      
      llvm-svn: 177108
      5a765fdd
  13. Mar 13, 2013
  14. Mar 12, 2013
    • Manman Ren's avatar
      Debug Info: use DW_FORM_ref_addr instead of DW_FORM_ref4 if the referenced DIE · 14a029d9
      Manman Ren authored
      belongs to a different compile unit.
      
      DW_FORM_ref_addr should be used for cross compile-unit reference.
      
      When compiling a large application, we got a dwarfdump verification error where
      abstract_origin points to nowhere.
      
      This error can't be reproduced on any testing case in MultiSource.
      We may have other cases where we use DW_FORM_ref4 unconditionally.
      
      rdar://problem/13370501
      
      llvm-svn: 176882
      14a029d9
    • Richard Relph's avatar
      Avoid generating ISD::SELECT for vector operands to SIGN_EXTEND · 61046a97
      Richard Relph authored
      llvm-svn: 176881
      61046a97
    • David Blaikie's avatar
      Remove support for versioned debug info. · dc69ebb1
      David Blaikie authored
      Versioned debug info support has been a burden to maintain & also compromised
      current debug info verification by causing test cases testing old debug info to
      remain rather than being updated to the latest. It also makes it hard to add or
      change the metadata schema by requiring various backwards-compatibility in the
      DI* hierarchy.
      
      So it's being removed in preparation for new changes to the schema to tidy up
      old/unnecessary fields and add new fields needed for new debug info (well, new
      to LLVM at least).
      
      The more surprising part of this is the changes to DI*::Verify - this became
      necessary due to the changes to AsmWriter. AsmWriter was relying on the version
      test to decide which bits of metadata were actually debug info when printing
      the comment annotations. Without the version information the tag numbers were
      too common & it would print debug info on random metadata that happened to
      start with an integer that matched a tag number. Instead this change makes the
      Verify functions more precise (just adding "number of operands" checks - not
      type checking those operands yet) & relies on that to decide which metadata is
      debug info metadata.
      
      llvm-svn: 176838
      dc69ebb1
  15. Mar 11, 2013
  16. Mar 10, 2013
Loading