Changeset 3265 in CLRX


Ignore:
Timestamp:
Aug 31, 2017, 11:13:54 AM (5 months ago)
Author:
matszpk
Message:

CLRadeonExtender: Rewrite VectorAdd? sample for GalliumCompute? with LLVM 4.0 or later.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/samples/VectorAdd.cpp

    r3164 r3265  
    264264vectorAdd:
    265265.if LLVM_VERSION>=40000
    266         # disassembled code from GalliumCompute
    267         .skip 256
    268          s_load_dword    s0, s[4:5], 0x1
    269          v_mov_b32       v1, s8
    270          s_load_dword    s1, s[6:7], 0x9
    271          s_mov_b32       s2, 0
    272          s_waitcnt       lgkmcnt(0)
    273          s_and_b32       s0, s0, 0xffff
    274          v_mul_hi_u32    v1, v1, s0
    275          s_mul_i32       s0, s0, s8
    276          v_mov_b32       v2, s0
    277          s_load_dword    s0, s[6:7], 0x0
    278          v_add_i32       v0, vcc, v0, v2
    279          v_addc_u32      v1, vcc, 0, v1, vcc
    280          v_add_i32       v0, vcc, s1, v0
    281          v_addc_u32      v1, vcc, 0, v1, vcc
    282          s_waitcnt       lgkmcnt(0)
    283          v_cmp_gt_u32    vcc, s0, v0
    284          s_and_saveexec_b64 s[0:1], vcc
    285          s_xor_b64       s[4:5], exec, s[0:1]
    286          s_cbranch_execz .L424_0
    287          s_load_dwordx2  s[8:9], s[6:7], 0x2
    288          s_load_dwordx2  s[12:13], s[6:7], 0x4
    289          v_lshl_b64      v[0:1], v[0:1], 2
    290          s_mov_b32       s3, 0xf000
    291          v_and_b32       v1, 3, v1
    292          s_mov_b64       s[14:15], s[2:3]
    293          s_mov_b64       s[10:11], s[2:3]
    294          s_waitcnt       lgkmcnt(0)
    295          buffer_load_dword v2, v[0:1], s[8:11], 0 addr64
    296          buffer_load_dword v3, v[0:1], s[12:15], 0 addr64
    297          s_load_dwordx2  s[0:1], s[6:7], 0x6
    298          s_waitcnt       vmcnt(0)
    299          v_add_f32       v2, v3, v2
    300          s_waitcnt       lgkmcnt(0)
    301          buffer_store_dword v2, v[0:1], s[0:3], 0 addr64
    302          s_waitcnt       vmcnt(0) & expcnt(0)
    303 .L424_0:
    304          s_or_b64        exec, exec, s[4:5]
     266                .skip 256
     267        s_load_dword s0, s[4:5], 1*SMUL        # s0 - local size X
     268        s_load_dword s1, s[6:7], 9*SMUL        # s1 - global offset
     269        s_load_dword s2, s[6:7], 0             # s2 - n
     270        s_waitcnt lgkmcnt(0)
     271        s_and_b32 s0, s0, 0xffff           # only local size X
     272        s_mul_i32 s0, s0, s8               # s0 - localSize*groupId
     273        s_add_i32 s0, s0, s1               # s0 - localSize*groupId + offset
     274        v_add_u32 v0, vcc, s0, v0          # v0 - localId + localSize*groupId + offset
     275        v_cmp_gt_u32 vcc, s2, v0           # compare n > id
     276        s_and_saveexec_b64 s[0:1], vcc
     277        s_cbranch_execz end             # end
     278        v_mov_b32 v1, 0
     279    .ifnarch GCN1.2
     280        s_load_dwordx2  s[0:1], s[6:7], 2*SMUL      # prepare Aptr buffer
     281        s_mov_b32       s2, 0
     282        s_mov_b32       s3, 0xf000
     283        s_load_dwordx2  s[8:9], s[6:7], 4*SMUL      # prepare Bptr buffer
     284        s_mov_b64 s[10:11], s[2:3]
     285        s_load_dwordx2  s[12:13], s[6:7], 6*SMUL    # prepare Cptr buffer
     286        s_mov_b64 s[14:15], s[2:3]
     287        v_lshl_b64 v[0:1], v[0:1], 2          # make vector offset
     288        s_waitcnt lgkmcnt(0)
     289        buffer_load_dword v2, v[0:1], s[0:3], 0 addr64      # load a value
     290        buffer_load_dword v3, v[0:1], s[8:11], 0 addr64     # load b value
     291        s_waitcnt vmcnt(0)
     292        v_add_f32 v2, v3, v2
     293        buffer_store_dword v2, v[0:1], s[12:15], 0 addr64
     294    .else
     295        s_load_dwordx4  s[0:3], s[6:7], 2*SMUL      # load Aptr and Bptr
     296        s_load_dwordx2  s[4:5], s[6:7], 6*SMUL      # load Cptr
     297        s_waitcnt lgkmcnt(0)
     298        v_lshlrev_b64 v[0:1], 2, v[0:1]     # make vector offset
     299        v_add_u32 v2, vcc, s0, v0           # Aptr + offset
     300        v_mov_b32 v3, s1
     301        v_addc_u32 v3, vcc, v3, v1, vcc
     302        v_add_u32 v4, vcc, s2, v0           # Bptr + offset
     303        v_mov_b32 v5, s3
     304        v_addc_u32 v5, vcc, v5, v1, vcc
     305        flat_load_dword v6, v[2:3]          # load A value
     306        flat_load_dword v7, v[2:3]          # load B value
     307        v_add_u32 v0, vcc, s4, v0           # Cptr + offset
     308        v_mov_b32 v6, s5
     309        v_addc_u32 v1, vcc, v6, v1, vcc
     310        s_waitcnt vmcnt(0)          # wait for values
     311        v_add_f32 v6, v7, v6            # add values
     312        flat_store_dword v[0:1], v6
     313    .endif
    305314.else
    306315        s_load_dword s2, s[0:1], 6*SMUL         # s2 - local_size(0)
Note: See TracChangeset for help on using the changeset viewer.