Skip to content
  1. Apr 05, 2013
  2. Apr 04, 2013
  3. Apr 03, 2013
  4. Apr 02, 2013
  5. Apr 01, 2013
    • Arnold Schwaighofer's avatar
      Merge load/store sequences with adresses: base + index + offset · 6752366e
      Arnold Schwaighofer authored
      We would also like to merge sequences that involve a variable index like in the
      example below.
      
          int index = *idx++
          int i0 = c[index+0];
          int i1 = c[index+1];
          b[0] = i0;
          b[1] = i1;
      
      By extending the parsing of the base pointer to handle dags that contain a
      base, index, and offset we can handle examples like the one above.
      
      The dag for the code above will look something like:
      
       (load (i64 add (i64 copyfromreg %c)
                      (i64 signextend (i8 load %index))))
      
       (load (i64 add (i64 copyfromreg %c)
                      (i64 signextend (i32 add (i32 signextend (i8 load %index))
                                               (i32 1)))))
      
      The code that parses the tree ignores the intermediate sign extensions. However,
      if there is a sign extension it needs to be on all indexes.
      
       (load (i64 add (i64 copyfromreg %c)
                      (i64 signextend (add (i8 load %index)
                                           (i8 1))))
       vs
      
       (load (i64 add (i64 copyfromreg %c)
                      (i64 signextend (i32 add (i32 signextend (i8 load %index))
                                               (i32 1)))))
      radar://13536387
      
      llvm-svn: 178483
      6752366e
  6. Mar 30, 2013
  7. Mar 29, 2013
  8. 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
  9. 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
  10. Mar 25, 2013
  11. 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
  12. Mar 22, 2013
  13. Mar 21, 2013
  14. Mar 20, 2013
  15. Mar 19, 2013
Loading