Skip to content
  • 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
Loading