Skip to content
  1. Apr 16, 2006
  2. Apr 13, 2006
  3. Apr 12, 2006
    • Chris Lattner's avatar
      Add a new way to match vector constants, which make it easier to bang bits of · 147e50e1
      Chris Lattner authored
      different types.
      
      Codegen spltw(0x7FFFFFFF) and spltw(0x80000000) without a constant pool load,
      implementing PowerPC/vec_constants.ll:test1.  This compiles:
      
      typedef float vf __attribute__ ((vector_size (16)));
      typedef int vi __attribute__ ((vector_size (16)));
      void test(vi *P1, vi *P2, vf *P3) {
        *P1 &= (vi){0x80000000,0x80000000,0x80000000,0x80000000};
        *P2 &= (vi){0x7FFFFFFF,0x7FFFFFFF,0x7FFFFFFF,0x7FFFFFFF};
        *P3 = vec_abs((vector float)*P3);
      }
      
      to:
      
      _test:
              mfspr r2, 256
              oris r6, r2, 49152
              mtspr 256, r6
              vspltisw v0, -1
              vslw v0, v0, v0
              lvx v1, 0, r3
              vand v1, v1, v0
              stvx v1, 0, r3
              lvx v1, 0, r4
              vandc v1, v1, v0
              stvx v1, 0, r4
              lvx v1, 0, r5
              vandc v0, v1, v0
              stvx v0, 0, r5
              mtspr 256, r2
              blr
      
      instead of (with two constant pool entries):
      
      _test:
              mfspr r2, 256
              oris r6, r2, 49152
              mtspr 256, r6
              li r6, lo16(LCPI1_0)
              lis r7, ha16(LCPI1_0)
              li r8, lo16(LCPI1_1)
              lis r9, ha16(LCPI1_1)
              lvx v0, r7, r6
              lvx v1, 0, r3
              vand v0, v1, v0
              stvx v0, 0, r3
              lvx v0, r9, r8
              lvx v1, 0, r4
              vand v1, v1, v0
              stvx v1, 0, r4
              lvx v1, 0, r5
              vand v0, v1, v0
              stvx v0, 0, r5
              mtspr 256, r2
              blr
      
      GCC produces (with 2 cp entries):
      
      _test:
              mfspr r0,256
              stw r0,-4(r1)
              oris r0,r0,0xc00c
              mtspr 256,r0
              lis r2,ha16(LC0)
              lis r9,ha16(LC1)
              la r2,lo16(LC0)(r2)
              lvx v0,0,r3
              lvx v1,0,r5
              la r9,lo16(LC1)(r9)
              lwz r12,-4(r1)
              lvx v12,0,r2
              lvx v13,0,r9
              vand v0,v0,v12
              stvx v0,0,r3
              vspltisw v0,-1
              vslw v12,v0,v0
              vandc v1,v1,v12
              stvx v1,0,r5
              lvx v0,0,r4
              vand v0,v0,v13
              stvx v0,0,r4
              mtspr 256,r12
              blr
      
      llvm-svn: 27624
      147e50e1
  4. Apr 11, 2006
  5. Apr 07, 2006
  6. Apr 06, 2006
  7. Apr 05, 2006
  8. Apr 02, 2006
  9. Mar 31, 2006
    • Chris Lattner's avatar
      add a note · 40ff17dc
      Chris Lattner authored
      llvm-svn: 27302
      40ff17dc
    • Chris Lattner's avatar
      Implement an item from the readme, folding vcmp/vcmp. instructions with · d4058a59
      Chris Lattner authored
      identical instructions into a single instruction.  For example, for:
      
      void test(vector float *x, vector float *y, int *P) {
        int v = vec_any_out(*x, *y);
        *x = (vector float)vec_cmpb(*x, *y);
        *P = v;
      }
      
      we now generate:
      
      _test:
              mfspr r2, 256
              oris r6, r2, 49152
              mtspr 256, r6
              lvx v0, 0, r4
              lvx v1, 0, r3
              vcmpbfp. v0, v1, v0
              mfcr r4, 2
              stvx v0, 0, r3
              rlwinm r3, r4, 27, 31, 31
              xori r3, r3, 1
              stw r3, 0(r5)
              mtspr 256, r2
              blr
      
      instead of:
      
      _test:
              mfspr r2, 256
              oris r6, r2, 57344
              mtspr 256, r6
              lvx v0, 0, r4
              lvx v1, 0, r3
              vcmpbfp. v2, v1, v0
              mfcr r4, 2
      ***     vcmpbfp v0, v1, v0
              rlwinm r4, r4, 27, 31, 31
              stvx v0, 0, r3
              xori r3, r4, 1
              stw r3, 0(r5)
              mtspr 256, r2
              blr
      
      Testcase here: CodeGen/PowerPC/vcmp-fold.ll
      
      llvm-svn: 27290
      d4058a59
    • Chris Lattner's avatar
      These are done · e5a6c4f8
      Chris Lattner authored
      llvm-svn: 27284
      e5a6c4f8
  10. Mar 29, 2006
  11. Mar 28, 2006
  12. Mar 27, 2006
Loading