Skip to content
  1. Mar 20, 2006
  2. Mar 19, 2006
  3. Mar 17, 2006
  4. Mar 16, 2006
  5. Mar 15, 2006
  6. Mar 13, 2006
    • Chris Lattner's avatar
      For functions that use vector registers, save VRSAVE, mark used · 02e2c18c
      Chris Lattner authored
      registers, and update it on entry to each function, then restore it on exit.
      
      This compiles:
      
      void func(vfloat *a, vfloat *b, vfloat *c) {
              *a = *b * *c + *c;
      }
      
      to this:
      
      _func:
              mfspr r2, 256
              oris r6, r2, 49152
              mtspr 256, r6
              lvx v0, 0, r5
              lvx v1, 0, r4
              vmaddfp v0, v1, v0, v0
              stvx v0, 0, r3
              mtspr 256, r2
              blr
      
      GCC produces this (which has additional stack accesses):
      
      _func:
              mfspr r0,256
              stw r0,-4(r1)
              oris r0,r0,0xc000
              mtspr 256,r0
              lvx v0,0,r5
              lvx v1,0,r4
              lwz r12,-4(r1)
              vmaddfp v0,v0,v1,v0
              stvx v0,0,r3
              mtspr 256,r12
              blr
      
      llvm-svn: 26733
      02e2c18c
    • Chris Lattner's avatar
      Mark instructions that are cracked by the PPC970 decoder as such. · 7579cfb1
      Chris Lattner authored
      llvm-svn: 26720
      7579cfb1
  7. Mar 12, 2006
    • Chris Lattner's avatar
      Several big changes: · 51348c5f
      Chris Lattner authored
      1. Use flags on the instructions in the .td file to indicate the PPC970 unit
         type instead of a table in the .cpp file.  Much cleaner.
      2. Change the hazard recognizer to build d-groups according to the actual
         algorithm used, not my flawed understanding of it.
      3. Model "must be in the first slot" and "must be the only instr in a group"
         accurately.
      
      llvm-svn: 26719
      51348c5f
  8. Mar 06, 2006
  9. Mar 01, 2006
    • Chris Lattner's avatar
      Compile this: · 27f5345b
      Chris Lattner authored
      void foo(float a, int *b) { *b = a; }
      
      to this:
      
      _foo:
              fctiwz f0, f1
              stfiwx f0, 0, r4
              blr
      
      instead of this:
      
      _foo:
              fctiwz f0, f1
              stfd f0, -8(r1)
              lwz r2, -4(r1)
              stw r2, 0(r4)
              blr
      
      This implements CodeGen/PowerPC/stfiwx.ll, and also incidentally does the
      right thing for GCC bugzilla 26505.
      
      llvm-svn: 26447
      27f5345b
  10. Feb 17, 2006
  11. Feb 12, 2006
  12. Jan 27, 2006
  13. Jan 12, 2006
  14. Jan 11, 2006
    • Nate Begeman's avatar
      Add bswap, rotl, and rotr nodes · 1b8121b2
      Nate Begeman authored
      Add dag combiner code to recognize rotl, rotr
      Add ppc code to match rotl
      
      Targets should add rotl/rotr patterns if they have them
      
      llvm-svn: 25222
      1b8121b2
  15. Jan 10, 2006
  16. Jan 09, 2006
  17. Jan 05, 2006
  18. Jan 04, 2006
  19. Dec 30, 2005
  20. Dec 26, 2005
    • Evan Cheng's avatar
      Added field noResults to Instruction. · 14c53b45
      Evan Cheng authored
      Currently tblgen cannot tell which operands in the operand list are results so
      it assumes the first one is a result. This is bad. Ideally we would fix this
      by separating results from inputs, e.g. (res R32:$dst),
      (ops R32:$src1, R32:$src2). But that's a more distruptive change. Adding
      'let noResults = 1' is the workaround to tell tblgen that the instruction does
      not produces a result. It works for now since tblgen does not support
      instructions which produce multiple results.
      
      llvm-svn: 25017
      14c53b45
  21. Dec 23, 2005
  22. Dec 20, 2005
  23. Dec 16, 2005
  24. Dec 14, 2005
    • Nate Begeman's avatar
      Use the new predicate support that Evan Cheng added to remove some code · e37cb604
      Nate Begeman authored
      from the DAGToDAG cpp file.  This adds pattern support for vector and
      scalar fma, which passes test/Regression/CodeGen/PowerPC/fma.ll, and
      does the right thing in the presence of -disable-excess-fp-precision.
      
      Allows us to match:
      void %foo(<4 x float> * %a) {
      entry:
        %tmp1 = load <4 x float> * %a;
        %tmp2 = mul <4 x float> %tmp1, %tmp1
        %tmp3 = add <4 x float> %tmp2, %tmp1
        store <4 x float> %tmp3, <4 x float> *%a
        ret void
      }
      
      As:
      
      _foo:
              li r2, 0
              lvx v0, r2, r3
              vmaddfp v0, v0, v0, v0
              stvx v0, r2, r3
              blr
      
      Or, with llc -disable-excess-fp-precision,
      
      _foo:
              li r2, 0
              lvx v0, r2, r3
              vxor v1, v1, v1
              vmaddfp v1, v0, v0, v1
              vaddfp v0, v1, v0
              stvx v0, r2, r3
              blr
      
      llvm-svn: 24719
      e37cb604
Loading