Home | History | Annotate | Download | only in AMDGPU
      1 # RUN: llc -march=amdgcn -verify-machineinstrs -run-pass si-shrink-instructions -o - %s | FileCheck -check-prefix=GCN %s
      2 --- |
      3 
      4   define amdgpu_kernel void @fold_fi_vgpr() {
      5     %alloca = alloca [4 x i32], addrspace(5)
      6     ret void
      7   }
      8 
      9   define amdgpu_kernel void @fold_vgpr_fi() {
     10     %alloca = alloca [4 x i32], addrspace(5)
     11     ret void
     12   }
     13 
     14   define amdgpu_kernel void @fold_sgpr_fi() {
     15     %alloca = alloca [4 x i32], addrspace(5)
     16     ret void
     17   }
     18 
     19   define amdgpu_kernel void @fold_fi_sgpr() {
     20     %alloca = alloca [4 x i32], addrspace(5)
     21     ret void
     22   }
     23 
     24   define amdgpu_kernel void @fold_fi_imm() {
     25     %alloca = alloca [4 x i32], addrspace(5)
     26     ret void
     27   }
     28 
     29   define amdgpu_kernel void @fold_imm_fi() {
     30     %alloca = alloca [4 x i32], addrspace(5)
     31     ret void
     32   }
     33 
     34 ...
     35 # GCN-LABEL: name: fold_fi_vgpr{{$}}
     36 # GCN: %1:vgpr_32 = IMPLICIT_DEF
     37 
     38 # GCN: %2:vgpr_32 = V_ADD_I32_e32 %stack.0.alloca, %1, implicit-def $vcc, implicit $exec
     39 name: fold_fi_vgpr
     40 tracksRegLiveness: true
     41 registers:
     42   - { id: 0, class: vgpr_32 }
     43   - { id: 1, class: vgpr_32 }
     44   - { id: 2, class: vgpr_32 }
     45 stack:
     46   - { id: 0, name: alloca, type: default, offset: 0, size: 128, alignment: 8,
     47       callee-saved-register: '', local-offset: 0, debug-info-variable: '',
     48       debug-info-expression: '', debug-info-location: '' }
     49 body:             |
     50   bb.0:
     51     %0 = V_MOV_B32_e32 %stack.0.alloca, implicit $exec
     52     %1 = IMPLICIT_DEF
     53     %2, $vcc = V_ADD_I32_e64 %0, %1, implicit $exec
     54     S_ENDPGM
     55 
     56 ...
     57 # GCN-LABEL: name: fold_vgpr_fi{{$}}
     58 # GCN: %1:vgpr_32 = IMPLICIT_DEF
     59 # GCN: %2:vgpr_32 = V_ADD_I32_e32 %stack.0.alloca, %1, implicit-def $vcc, implicit $exec
     60 name: fold_vgpr_fi
     61 tracksRegLiveness: true
     62 registers:
     63   - { id: 0, class: vgpr_32 }
     64   - { id: 1, class: vgpr_32 }
     65   - { id: 2, class: vgpr_32 }
     66 stack:
     67   - { id: 0, name: alloca, type: default, offset: 0, size: 128, alignment: 8,
     68       callee-saved-register: '', local-offset: 0, debug-info-variable: '',
     69       debug-info-expression: '', debug-info-location: '' }
     70 body:             |
     71   bb.0:
     72     %0 = V_MOV_B32_e32 %stack.0.alloca, implicit $exec
     73     %1 = IMPLICIT_DEF
     74     %2, $vcc = V_ADD_I32_e64 %1, %0, implicit $exec
     75     S_ENDPGM
     76 
     77 ...
     78 # GCN-LABEL: name: fold_sgpr_fi{{$}}
     79 # GCN: %0:vgpr_32 = V_MOV_B32_e32 %stack.0.alloca, implicit $exec
     80 # GCN: %1:sgpr_32 = IMPLICIT_DEF
     81 # GCN: %2:vgpr_32 = V_ADD_I32_e32 %1, %0, implicit-def $vcc, implicit $exec
     82 name: fold_sgpr_fi
     83 tracksRegLiveness: true
     84 registers:
     85   - { id: 0, class: vgpr_32 }
     86   - { id: 1, class: sgpr_32 }
     87   - { id: 2, class: vgpr_32 }
     88 stack:
     89   - { id: 0, name: alloca, type: default, offset: 0, size: 128, alignment: 8,
     90       callee-saved-register: '', local-offset: 0, debug-info-variable: '',
     91       debug-info-expression: '', debug-info-location: '' }
     92 body:             |
     93   bb.0:
     94     %0 = V_MOV_B32_e32 %stack.0.alloca, implicit $exec
     95     %1 = IMPLICIT_DEF
     96     %2, $vcc = V_ADD_I32_e64 %1, %0, implicit $exec
     97     S_ENDPGM
     98 
     99 ...
    100 # GCN-LABEL: name: fold_fi_sgpr{{$}}
    101 # GCN: %0:vgpr_32 = V_MOV_B32_e32 %stack.0.alloca, implicit $exec
    102 # GCN: %1:sgpr_32 = IMPLICIT_DEF
    103 # GCN: %2:vgpr_32 = V_ADD_I32_e32 %1, %0, implicit-def $vcc, implicit $exec
    104 name: fold_fi_sgpr
    105 tracksRegLiveness: true
    106 registers:
    107   - { id: 0, class: vgpr_32 }
    108   - { id: 1, class: sgpr_32 }
    109   - { id: 2, class: vgpr_32 }
    110 stack:
    111   - { id: 0, name: alloca, type: default, offset: 0, size: 128, alignment: 8,
    112       callee-saved-register: '', local-offset: 0, debug-info-variable: '',
    113       debug-info-expression: '', debug-info-location: '' }
    114 body:             |
    115   bb.0:
    116     %0 = V_MOV_B32_e32 %stack.0.alloca, implicit $exec
    117     %1 = IMPLICIT_DEF
    118     %2, $vcc = V_ADD_I32_e64 %0, %1, implicit $exec
    119     S_ENDPGM
    120 ...
    121 # TODO: Should probably prefer folding immediate first
    122 # GCN-LABEL: name: fold_fi_imm{{$}}
    123 # GCN: %1:vgpr_32 = V_MOV_B32_e32 999, implicit $exec
    124 # GCN: %2:vgpr_32 = V_ADD_I32_e32 %stack.0.alloca, %1, implicit-def $vcc, implicit $exec
    125 name: fold_fi_imm
    126 tracksRegLiveness: true
    127 registers:
    128   - { id: 0, class: vgpr_32 }
    129   - { id: 1, class: vgpr_32 }
    130   - { id: 2, class: vgpr_32 }
    131 stack:
    132   - { id: 0, name: alloca, type: default, offset: 0, size: 128, alignment: 8,
    133       callee-saved-register: '', local-offset: 0, debug-info-variable: '',
    134       debug-info-expression: '', debug-info-location: '' }
    135 body:             |
    136   bb.0:
    137     %0 = V_MOV_B32_e32 %stack.0.alloca, implicit $exec
    138     %1 = V_MOV_B32_e32 999, implicit $exec
    139     %2, $vcc = V_ADD_I32_e64 %0, %1, implicit $exec
    140     S_ENDPGM
    141 
    142 ...
    143 # GCN-LABEL: name: fold_imm_fi{{$}}
    144 # GCN: %0:vgpr_32 = V_MOV_B32_e32 %stack.0.alloca, implicit $exec
    145 # GCN: %2:vgpr_32 = V_ADD_I32_e32 999, %0, implicit-def $vcc, implicit $exec
    146 name: fold_imm_fi
    147 tracksRegLiveness: true
    148 registers:
    149   - { id: 0, class: vgpr_32 }
    150   - { id: 1, class: vgpr_32 }
    151   - { id: 2, class: vgpr_32 }
    152 stack:
    153   - { id: 0, name: alloca, type: default, offset: 0, size: 128, alignment: 8,
    154       callee-saved-register: '', local-offset: 0, debug-info-variable: '',
    155       debug-info-expression: '', debug-info-location: '' }
    156 body:             |
    157   bb.0:
    158     %0 = V_MOV_B32_e32 %stack.0.alloca, implicit $exec
    159     %1 = V_MOV_B32_e32 999, implicit $exec
    160     %2, $vcc = V_ADD_I32_e64 %1, %0, implicit $exec
    161     S_ENDPGM
    162