1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=gfx900 -amdgpu-enable-flat-scratch -run-pass=si-fold-operands -verify-machineinstrs -o - %s | FileCheck -check-prefix=GCN %s
3
4---
5name:            test_fold_fi_scratch_load_vgpr
6stack:
7  - { id: 0, name: '', type: spill-slot, offset: 0, size: 4, alignment: 4 }
8body:             |
9  bb.0.entry:
10    ; GCN-LABEL: name: test_fold_fi_scratch_load_vgpr
11    ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
12    ; GCN: [[SCRATCH_LOAD_DWORD_SADDR:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD_SADDR %stack.0, 4, 0, implicit $exec, implicit $flat_scr :: (load 4 from %stack.0, addrspace 5)
13    ; GCN: S_ENDPGM 0
14    %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
15    %1:vgpr_32 = SCRATCH_LOAD_DWORD %0:vgpr_32, 4, 0, implicit $exec, implicit $flat_scr :: (load 4 from %stack.0, addrspace 5)
16    S_ENDPGM 0
17
18...
19
20---
21name:            test_fold_fi_scratch_load_sgpr
22stack:
23  - { id: 0, name: '', type: spill-slot, offset: 0, size: 4, alignment: 4 }
24body:             |
25  bb.0.entry:
26    ; GCN-LABEL: name: test_fold_fi_scratch_load_sgpr
27    ; GCN: [[S_MOV_B32_:%[0-9]+]]:sgpr_32 = S_MOV_B32 %stack.0
28    ; GCN: [[SCRATCH_LOAD_DWORD_SADDR:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD_SADDR %stack.0, 4, 0, implicit $exec, implicit $flat_scr :: (load 4 from %stack.0, addrspace 5)
29    ; GCN: S_ENDPGM 0
30    %0:sgpr_32 = S_MOV_B32 %stack.0
31    %1:vgpr_32 = SCRATCH_LOAD_DWORD_SADDR %0:sgpr_32, 4, 0, implicit $exec, implicit $flat_scr :: (load 4 from %stack.0, addrspace 5)
32    S_ENDPGM 0
33
34...
35
36---
37name:            test_fold_fi_scratch_store_vgpr
38stack:
39  - { id: 0, name: '', type: spill-slot, offset: 0, size: 4, alignment: 4 }
40body:             |
41  bb.0.entry:
42    ; GCN-LABEL: name: test_fold_fi_scratch_store_vgpr
43    ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
44    ; GCN: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
45    ; GCN: SCRATCH_STORE_DWORD_SADDR [[DEF]], %stack.0, 4, 0, implicit $exec, implicit $flat_scr :: (store 4 into %stack.0, addrspace 5)
46    ; GCN: S_ENDPGM 0
47    %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
48    %1:vgpr_32 = IMPLICIT_DEF
49    SCRATCH_STORE_DWORD %1:vgpr_32, %0:vgpr_32, 4, 0, implicit $exec, implicit $flat_scr :: (store 4 into %stack.0, addrspace 5)
50    S_ENDPGM 0
51
52...
53
54---
55name:            test_no_fold_fi_scratch_store_vgpr
56stack:
57  - { id: 0, name: '', type: spill-slot, offset: 0, size: 4, alignment: 4 }
58body:             |
59  bb.0.entry:
60    ; GCN-LABEL: name: test_no_fold_fi_scratch_store_vgpr
61    ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
62    ; GCN: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
63    ; GCN: SCRATCH_STORE_DWORD [[V_MOV_B32_e32_]], [[DEF]], 4, 0, implicit $exec, implicit $flat_scr :: (store 4 into %stack.0, addrspace 5)
64    ; GCN: S_ENDPGM 0
65    %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
66    %1:vgpr_32 = IMPLICIT_DEF
67    SCRATCH_STORE_DWORD %0:vgpr_32, %1:vgpr_32, 4, 0, implicit $exec, implicit $flat_scr :: (store 4 into %stack.0, addrspace 5)
68    S_ENDPGM 0
69
70...
71
72---
73name:            test_fold_fi_scratch_store_sgpr
74stack:
75  - { id: 0, name: '', type: spill-slot, offset: 0, size: 4, alignment: 4 }
76body:             |
77  bb.0.entry:
78    ; GCN-LABEL: name: test_fold_fi_scratch_store_sgpr
79    ; GCN: [[S_MOV_B32_:%[0-9]+]]:sgpr_32 = S_MOV_B32 %stack.0
80    ; GCN: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
81    ; GCN: SCRATCH_STORE_DWORD_SADDR [[DEF]], %stack.0, 4, 0, implicit $exec, implicit $flat_scr :: (store 4 into %stack.0, addrspace 5)
82    ; GCN: S_ENDPGM 0
83    %0:sgpr_32 = S_MOV_B32 %stack.0
84    %1:vgpr_32 = IMPLICIT_DEF
85    SCRATCH_STORE_DWORD_SADDR %1:vgpr_32, %0:sgpr_32, 4, 0, implicit $exec, implicit $flat_scr :: (store 4 into %stack.0, addrspace 5)
86    S_ENDPGM 0
87
88...
89