@@ -110,6 +110,76 @@ define amdgpu_cs void @test_buffer_load_sgpr_plus_imm_offset(<4 x i32> inreg %ba
110
110
ret void
111
111
}
112
112
113
+ ; GCN-LABEL: name: test_buffer_load_sgpr_plus_imm_offset_nuw
114
+ ; SDAG-DAG: %[[BASE0:.*]]:sgpr_32 = COPY $sgpr0
115
+ ; SDAG-DAG: %[[BASE1:.*]]:sgpr_32 = COPY $sgpr1
116
+ ; SDAG-DAG: %[[BASE2:.*]]:sgpr_32 = COPY $sgpr2
117
+ ; SDAG-DAG: %[[BASE3:.*]]:sgpr_32 = COPY $sgpr3
118
+ ; SDAG-DAG: %[[OFFSET:.*]]:sgpr_32 = COPY $sgpr4
119
+ ; SDAG-DAG: %[[BASE:.*]]:sgpr_128 = REG_SEQUENCE %[[BASE0]], %subreg.sub0, %[[BASE1]], %subreg.sub1, %[[BASE2]], %subreg.sub2, %[[BASE3]], %subreg.sub3
120
+ ; SDAG: S_BUFFER_LOAD_DWORD_SGPR_IMM killed %[[BASE]], %[[OFFSET]], 77,
121
+ ; GISEL-DAG: %[[BASE0:.*]]:sreg_32 = COPY $sgpr0
122
+ ; GISEL-DAG: %[[BASE1:.*]]:sreg_32 = COPY $sgpr1
123
+ ; GISEL-DAG: %[[BASE2:.*]]:sreg_32 = COPY $sgpr2
124
+ ; GISEL-DAG: %[[BASE3:.*]]:sreg_32 = COPY $sgpr3
125
+ ; GISEL-DAG: %[[OFFSET:.*]]:sreg_32 = COPY $sgpr4
126
+ ; GISEL-DAG: %[[BASE:.*]]:sgpr_128 = REG_SEQUENCE %[[BASE0]], %subreg.sub0, %[[BASE1]], %subreg.sub1, %[[BASE2]], %subreg.sub2, %[[BASE3]], %subreg.sub3
127
+ ; GISEL: S_BUFFER_LOAD_DWORD_SGPR_IMM %[[BASE]], %[[OFFSET]], 77,
128
+ define amdgpu_cs void @test_buffer_load_sgpr_plus_imm_offset_nuw (<4 x i32 > inreg %base , i32 inreg %i , ptr addrspace (1 ) inreg %out ) #0 {
129
+ %off = add nuw i32 %i , 77
130
+ %v = call i32 @llvm.amdgcn.s.buffer.load.i32 (<4 x i32 > %base , i32 %off , i32 0 )
131
+ store i32 %v , ptr addrspace (1 ) %out , align 4
132
+ ret void
133
+ }
134
+
135
+ ; GCN-LABEL: name: test_buffer_load_sgpr_plus_imm_offset_nsw
136
+ ; SDAG-DAG: %[[BASE0:.*]]:sgpr_32 = COPY $sgpr0
137
+ ; SDAG-DAG: %[[BASE1:.*]]:sgpr_32 = COPY $sgpr1
138
+ ; SDAG-DAG: %[[BASE2:.*]]:sgpr_32 = COPY $sgpr2
139
+ ; SDAG-DAG: %[[BASE3:.*]]:sgpr_32 = COPY $sgpr3
140
+ ; SDAG-DAG: %[[OFFSET:.*]]:sgpr_32 = COPY $sgpr4
141
+ ; SDAG-DAG: %[[BASE:.*]]:sgpr_128 = REG_SEQUENCE %[[BASE0]], %subreg.sub0, %[[BASE1]], %subreg.sub1, %[[BASE2]], %subreg.sub2, %[[BASE3]], %subreg.sub3
142
+ ; SDAG-DAG: %[[ADD:.*]]:sreg_32 = nsw S_ADD_I32 %4, killed %11, implicit-def dead $scc
143
+ ; SDAG: S_BUFFER_LOAD_DWORD_SGPR_IMM killed %[[BASE]], killed %[[ADD]], 0,
144
+ ; GISEL-DAG: %[[BASE0:.*]]:sreg_32 = COPY $sgpr0
145
+ ; GISEL-DAG: %[[BASE1:.*]]:sreg_32 = COPY $sgpr1
146
+ ; GISEL-DAG: %[[BASE2:.*]]:sreg_32 = COPY $sgpr2
147
+ ; GISEL-DAG: %[[BASE3:.*]]:sreg_32 = COPY $sgpr3
148
+ ; GISEL-DAG: %[[OFFSET:.*]]:sreg_32 = COPY $sgpr4
149
+ ; GISEL-DAG: %[[BASE:.*]]:sgpr_128 = REG_SEQUENCE %[[BASE0]], %subreg.sub0, %[[BASE1]], %subreg.sub1, %[[BASE2]], %subreg.sub2, %[[BASE3]], %subreg.sub3
150
+ ; GISEL-DAG: %[[ADD:.*]]:sreg_32 = nsw S_ADD_I32 %1, %10, implicit-def dead $scc
151
+ ; GISEL: S_BUFFER_LOAD_DWORD_SGPR_IMM %[[BASE]], %[[ADD]], 0,
152
+ define amdgpu_cs void @test_buffer_load_sgpr_plus_imm_offset_nsw (<4 x i32 > inreg %base , i32 inreg %i , ptr addrspace (1 ) inreg %out ) #0 {
153
+ %off = add nsw i32 %i , 77
154
+ %v = call i32 @llvm.amdgcn.s.buffer.load.i32 (<4 x i32 > %base , i32 %off , i32 0 )
155
+ store i32 %v , ptr addrspace (1 ) %out , align 4
156
+ ret void
157
+ }
158
+
159
+ ; GCN-LABEL: name: test_buffer_load_sgpr_plus_imm_offset_noflags
160
+ ; SDAG-DAG: %[[BASE0:.*]]:sgpr_32 = COPY $sgpr0
161
+ ; SDAG-DAG: %[[BASE1:.*]]:sgpr_32 = COPY $sgpr1
162
+ ; SDAG-DAG: %[[BASE2:.*]]:sgpr_32 = COPY $sgpr2
163
+ ; SDAG-DAG: %[[BASE3:.*]]:sgpr_32 = COPY $sgpr3
164
+ ; SDAG-DAG: %[[OFFSET:.*]]:sgpr_32 = COPY $sgpr4
165
+ ; SDAG-DAG: %[[BASE:.*]]:sgpr_128 = REG_SEQUENCE %[[BASE0]], %subreg.sub0, %[[BASE1]], %subreg.sub1, %[[BASE2]], %subreg.sub2, %[[BASE3]], %subreg.sub3
166
+ ; SDAG-DAG: %[[ADD:.*]]:sreg_32 = S_ADD_I32 %4, killed %11, implicit-def dead $scc
167
+ ; SDAG: S_BUFFER_LOAD_DWORD_SGPR_IMM killed %[[BASE]], killed %[[ADD]], 0,
168
+ ; GISEL-DAG: %[[BASE0:.*]]:sreg_32 = COPY $sgpr0
169
+ ; GISEL-DAG: %[[BASE1:.*]]:sreg_32 = COPY $sgpr1
170
+ ; GISEL-DAG: %[[BASE2:.*]]:sreg_32 = COPY $sgpr2
171
+ ; GISEL-DAG: %[[BASE3:.*]]:sreg_32 = COPY $sgpr3
172
+ ; GISEL-DAG: %[[OFFSET:.*]]:sreg_32 = COPY $sgpr4
173
+ ; GISEL-DAG: %[[BASE:.*]]:sgpr_128 = REG_SEQUENCE %[[BASE0]], %subreg.sub0, %[[BASE1]], %subreg.sub1, %[[BASE2]], %subreg.sub2, %[[BASE3]], %subreg.sub3
174
+ ; GISEL-DAG: %[[ADD:.*]]:sreg_32 = S_ADD_I32 %1, %10, implicit-def dead $scc
175
+ ; GISEL: S_BUFFER_LOAD_DWORD_SGPR_IMM %[[BASE]], %[[ADD]], 0,
176
+ define amdgpu_cs void @test_buffer_load_sgpr_plus_imm_offset_noflags (<4 x i32 > inreg %base , i32 inreg %i , ptr addrspace (1 ) inreg %out ) #0 {
177
+ %off = add i32 %i , 77
178
+ %v = call i32 @llvm.amdgcn.s.buffer.load.i32 (<4 x i32 > %base , i32 %off , i32 0 )
179
+ store i32 %v , ptr addrspace (1 ) %out , align 4
180
+ ret void
181
+ }
182
+
113
183
; GCN-LABEL: name: test_buffer_load_sgpr_or_imm_offset
114
184
; SDAG-DAG: %[[BASE0:.*]]:sgpr_32 = COPY $sgpr0
115
185
; SDAG-DAG: %[[BASE1:.*]]:sgpr_32 = COPY $sgpr1
0 commit comments