Skip to content
  1. Feb 03, 2006
    • Chris Lattner's avatar
    • Chris Lattner's avatar
      Simplify some code · 774d4a19
      Chris Lattner authored
      llvm-svn: 25924
      774d4a19
    • Chris Lattner's avatar
      Add code that checks for noop copies, which triggers when either: · 1ef239af
      Chris Lattner authored
      1. a target doesn't know how to fold load/stores into copies, or
      2. the spiller rewrites the input to a copy to the same register as the dest
         instead of to the reloaded reg.
      
      This will be moved/improved in the near future, but allows elimination of
      some ancient x86 hacks.  This eliminates 92 copies from SMG2000 on X86 and
      163 copies from 252.eon.
      
      llvm-svn: 25922
      1ef239af
    • Evan Cheng's avatar
      Added case HANDLENODE to getOperationName(). · 02b5b9cd
      Evan Cheng authored
      llvm-svn: 25920
      02b5b9cd
    • Chris Lattner's avatar
      Physregs may hold multiple stack slot values at the same time. Keep track · b7f24de4
      Chris Lattner authored
      of this, and use it to our advantage (bwahahah).  This allows us to eliminate another
      60 instructions from smg2000 on PPC (probably significantly more on X86).  A common
      old-new diff looks like this:
      
              stw r2, 3304(r1)
      -       lwz r2, 3192(r1)
              stw r2, 3300(r1)
      -       lwz r2, 3192(r1)
              stw r2, 3296(r1)
      -       lwz r2, 3192(r1)
              stw r2, 3200(r1)
      -       lwz r2, 3192(r1)
              stw r2, 3196(r1)
      -       lwz r2, 3192(r1)
      +       or r2, r2, r2
              stw r2, 3188(r1)
      
      and
      
      -       lwz r31, 604(r1)
      -       lwz r13, 604(r1)
      -       lwz r14, 604(r1)
      -       lwz r15, 604(r1)
      -       lwz r16, 604(r1)
      -       lwz r30, 604(r1)
      +       or r31, r30, r30
      +       or r13, r30, r30
      +       or r14, r30, r30
      +       or r15, r30, r30
      +       or r16, r30, r30
      +       or r30, r30, r30
      
      Removal of the R = R copies is coming next...
      
      llvm-svn: 25919
      b7f24de4
    • Chris Lattner's avatar
      Fix a deficiency in the spiller that Evan noticed. In particular, consider · f3aef1b0
      Chris Lattner authored
      this code:
      
        store [stack slot #0],  R10
          = add R14, [stack slot #0]
      
      The spiller didn't know that the store made the value of [stackslot#0] available
      in R10 *IF* the store came from a copy instruction with the store folded into it.
      
      This patch teaches VirtRegMap to look at these stores and recognize the values
      they make available.  In one case Evan provided, this code:
      
              divsd %XMM0, %XMM1
              movsd %XMM1, QWORD PTR [%ESP + 40]
      1)      movsd QWORD PTR [%ESP + 48], %XMM1
      2)      movsd %XMM1, QWORD PTR [%ESP + 48]
              addsd %XMM1, %XMM0
      3)      movsd QWORD PTR [%ESP + 48], %XMM1
              movsd QWORD PTR [%ESP + 4], %XMM0
      
      turns into:
      
              divsd %XMM0, %XMM1
              movsd %XMM1, QWORD PTR [%ESP + 40]
              addsd %XMM1, %XMM0
      3)      movsd QWORD PTR [%ESP + 48], %XMM1
              movsd QWORD PTR [%ESP + 4], %XMM0
      
      In this case, instruction #2 was removed because of the value made
      available by #1, and inst #1 was later deleted because it is now
      never used before the stack slot is redefined by #3.
      
      This occurs here and there in a lot of code with high spilling, on PPC
      most of the removed loads/stores are LSU-reject-causing loads, which is
      nice.
      
      On X86, things are much better (because it spills more), where we nuke
      about 1% of the instructions from SMG2000 and several hundred from eon.
      
      More improvements to come...
      
      llvm-svn: 25917
      f3aef1b0
  2. Feb 02, 2006
    • Chris Lattner's avatar
      Move isLoadFrom/StoreToStackSlot from MRegisterInfo to TargetInstrInfo,a far... · bb53acd0
      Chris Lattner authored
      Move isLoadFrom/StoreToStackSlot from MRegisterInfo to TargetInstrInfo,a far more logical place.  Other methods should also be moved if anyoneis interested. :)
      
      llvm-svn: 25913
      bb53acd0
    • Chris Lattner's avatar
      Turn any_extend nodes into zero_extend nodes when it allows us to remove an · 49beaf40
      Chris Lattner authored
      and instruction.  This allows us to compile stuff like this:
      
      bool %X(int %X) {
              %Y = add int %X, 14
              %Z = setne int %Y, 12345
              ret bool %Z
      }
      
      to this:
      
      _X:
              cmpl $12331, 4(%esp)
              setne %al
              movzbl %al, %eax
              ret
      
      instead of this:
      
      _X:
              cmpl $12331, 4(%esp)
              setne %al
              movzbl %al, %eax
              andl $1, %eax
              ret
      
      This occurs quite a bit with the X86 backend.  For example, 25 times in
      lambda, 30 times in 177.mesa, 14 times in galgel,  70 times in fma3d,
      25 times in vpr, several hundred times in gcc, ~45 times in crafty,
      ~60 times in parser, ~140 times in eon, 110 times in perlbmk, 55 on gap,
      16 times on bzip2, 14 times on twolf, and 1-2 times in many other SPEC2K
      programs.
      
      llvm-svn: 25901
      49beaf40
    • Chris Lattner's avatar
      add two dag combines: · 49ce3554
      Chris Lattner authored
      (C1-X) == C2 --> X == C1-C2
      (X+C1) == C2 --> X == C2-C1
      
      This allows us to compile this:
      
      bool %X(int %X) {
              %Y = add int %X, 14
              %Z = setne int %Y, 12345
              ret bool %Z
      }
      
      into this:
      
      _X:
              cmpl $12331, 4(%esp)
              setne %al
              movzbl %al, %eax
              andl $1, %eax
              ret
      
      not this:
      
      _X:
              movl $14, %eax
              addl 4(%esp), %eax
              cmpl $12345, %eax
              setne %al
              movzbl %al, %eax
              andl $1, %eax
              ret
      
      Testcase here: Regression/CodeGen/X86/compare-add.ll
      
      nukage of the and coming up next.
      
      llvm-svn: 25898
      49ce3554
    • Chris Lattner's avatar
      make -debug output less newliney · 0bd74558
      Chris Lattner authored
      llvm-svn: 25895
      0bd74558
    • Chris Lattner's avatar
      Implement matching constraints. We can now say things like this: · 7f5880b1
      Chris Lattner authored
      %C = call int asm "xyz $0, $1, $2, $3", "=r,r,r,0"(int %A, int %B, int 4)
      
      and get:
      
      xyz r2, r3, r4, r2
      
      note that the r2's are pinned together.  Yaay for 2-address instructions.
      
      2342 ----------------------------------------------------------------------
      
      llvm-svn: 25893
      7f5880b1
  3. Feb 01, 2006
  4. Jan 31, 2006
  5. Jan 30, 2006
  6. Jan 29, 2006
  7. Jan 28, 2006
Loading