@@ -1126,6 +1126,110 @@ main_body:
1126
1126
ret void
1127
1127
}
1128
1128
1129
+ define double @buffer_load_f64__voffset_add (ptr addrspace (8 ) inreg %rsrc , i32 %voffset ) {
1130
+ ; PREGFX10-LABEL: buffer_load_f64__voffset_add:
1131
+ ; PREGFX10: ; %bb.0:
1132
+ ; PREGFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1133
+ ; PREGFX10-NEXT: buffer_load_dwordx2 v[0:1], v0, s[4:7], 0 offen offset:60
1134
+ ; PREGFX10-NEXT: s_waitcnt vmcnt(0)
1135
+ ; PREGFX10-NEXT: s_setpc_b64 s[30:31]
1136
+ ;
1137
+ ; GFX10-LABEL: buffer_load_f64__voffset_add:
1138
+ ; GFX10: ; %bb.0:
1139
+ ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1140
+ ; GFX10-NEXT: buffer_load_dwordx2 v[0:1], v0, s[4:7], 0 offen offset:60
1141
+ ; GFX10-NEXT: s_waitcnt vmcnt(0)
1142
+ ; GFX10-NEXT: s_setpc_b64 s[30:31]
1143
+ ;
1144
+ ; GFX11-LABEL: buffer_load_f64__voffset_add:
1145
+ ; GFX11: ; %bb.0:
1146
+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1147
+ ; GFX11-NEXT: buffer_load_b64 v[0:1], v0, s[0:3], 0 offen offset:60
1148
+ ; GFX11-NEXT: s_waitcnt vmcnt(0)
1149
+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
1150
+ %voffset.add = add i32 %voffset , 60
1151
+ %data = call double @llvm.amdgcn.raw.ptr.buffer.load.f64 (ptr addrspace (8 ) %rsrc , i32 %voffset.add , i32 0 , i32 0 )
1152
+ ret double %data
1153
+ }
1154
+
1155
+ define <2 x double > @buffer_load_v2f64__voffset_add (ptr addrspace (8 ) inreg %rsrc , i32 %voffset ) {
1156
+ ; PREGFX10-LABEL: buffer_load_v2f64__voffset_add:
1157
+ ; PREGFX10: ; %bb.0:
1158
+ ; PREGFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1159
+ ; PREGFX10-NEXT: buffer_load_dwordx4 v[0:3], v0, s[4:7], 0 offen offset:60
1160
+ ; PREGFX10-NEXT: s_waitcnt vmcnt(0)
1161
+ ; PREGFX10-NEXT: s_setpc_b64 s[30:31]
1162
+ ;
1163
+ ; GFX10-LABEL: buffer_load_v2f64__voffset_add:
1164
+ ; GFX10: ; %bb.0:
1165
+ ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1166
+ ; GFX10-NEXT: buffer_load_dwordx4 v[0:3], v0, s[4:7], 0 offen offset:60
1167
+ ; GFX10-NEXT: s_waitcnt vmcnt(0)
1168
+ ; GFX10-NEXT: s_setpc_b64 s[30:31]
1169
+ ;
1170
+ ; GFX11-LABEL: buffer_load_v2f64__voffset_add:
1171
+ ; GFX11: ; %bb.0:
1172
+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1173
+ ; GFX11-NEXT: buffer_load_b128 v[0:3], v0, s[0:3], 0 offen offset:60
1174
+ ; GFX11-NEXT: s_waitcnt vmcnt(0)
1175
+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
1176
+ %voffset.add = add i32 %voffset , 60
1177
+ %data = call <2 x double > @llvm.amdgcn.raw.ptr.buffer.load.v2f64 (ptr addrspace (8 ) %rsrc , i32 %voffset.add , i32 0 , i32 0 )
1178
+ ret <2 x double > %data
1179
+ }
1180
+
1181
+ define i64 @buffer_load_i64__voffset_add (ptr addrspace (8 ) inreg %rsrc , i32 %voffset ) {
1182
+ ; PREGFX10-LABEL: buffer_load_i64__voffset_add:
1183
+ ; PREGFX10: ; %bb.0:
1184
+ ; PREGFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1185
+ ; PREGFX10-NEXT: buffer_load_dwordx2 v[0:1], v0, s[4:7], 0 offen offset:60
1186
+ ; PREGFX10-NEXT: s_waitcnt vmcnt(0)
1187
+ ; PREGFX10-NEXT: s_setpc_b64 s[30:31]
1188
+ ;
1189
+ ; GFX10-LABEL: buffer_load_i64__voffset_add:
1190
+ ; GFX10: ; %bb.0:
1191
+ ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1192
+ ; GFX10-NEXT: buffer_load_dwordx2 v[0:1], v0, s[4:7], 0 offen offset:60
1193
+ ; GFX10-NEXT: s_waitcnt vmcnt(0)
1194
+ ; GFX10-NEXT: s_setpc_b64 s[30:31]
1195
+ ;
1196
+ ; GFX11-LABEL: buffer_load_i64__voffset_add:
1197
+ ; GFX11: ; %bb.0:
1198
+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1199
+ ; GFX11-NEXT: buffer_load_b64 v[0:1], v0, s[0:3], 0 offen offset:60
1200
+ ; GFX11-NEXT: s_waitcnt vmcnt(0)
1201
+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
1202
+ %voffset.add = add i32 %voffset , 60
1203
+ %data = call i64 @llvm.amdgcn.raw.ptr.buffer.load.i64 (ptr addrspace (8 ) %rsrc , i32 %voffset.add , i32 0 , i32 0 )
1204
+ ret i64 %data
1205
+ }
1206
+
1207
+ define <2 x i64 > @buffer_load_v2i64__voffset_add (ptr addrspace (8 ) inreg %rsrc , i32 %voffset ) {
1208
+ ; PREGFX10-LABEL: buffer_load_v2i64__voffset_add:
1209
+ ; PREGFX10: ; %bb.0:
1210
+ ; PREGFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1211
+ ; PREGFX10-NEXT: buffer_load_dwordx4 v[0:3], v0, s[4:7], 0 offen offset:60
1212
+ ; PREGFX10-NEXT: s_waitcnt vmcnt(0)
1213
+ ; PREGFX10-NEXT: s_setpc_b64 s[30:31]
1214
+ ;
1215
+ ; GFX10-LABEL: buffer_load_v2i64__voffset_add:
1216
+ ; GFX10: ; %bb.0:
1217
+ ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1218
+ ; GFX10-NEXT: buffer_load_dwordx4 v[0:3], v0, s[4:7], 0 offen offset:60
1219
+ ; GFX10-NEXT: s_waitcnt vmcnt(0)
1220
+ ; GFX10-NEXT: s_setpc_b64 s[30:31]
1221
+ ;
1222
+ ; GFX11-LABEL: buffer_load_v2i64__voffset_add:
1223
+ ; GFX11: ; %bb.0:
1224
+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1225
+ ; GFX11-NEXT: buffer_load_b128 v[0:3], v0, s[0:3], 0 offen offset:60
1226
+ ; GFX11-NEXT: s_waitcnt vmcnt(0)
1227
+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
1228
+ %voffset.add = add i32 %voffset , 60
1229
+ %data = call <2 x i64 > @llvm.amdgcn.raw.ptr.buffer.load.v2i64 (ptr addrspace (8 ) %rsrc , i32 %voffset.add , i32 0 , i32 0 )
1230
+ ret <2 x i64 > %data
1231
+ }
1232
+
1129
1233
declare float @llvm.amdgcn.raw.ptr.buffer.load.f32 (ptr addrspace (8 ), i32 , i32 , i32 ) #0
1130
1234
declare <2 x float > @llvm.amdgcn.raw.ptr.buffer.load.v2f32 (ptr addrspace (8 ), i32 , i32 , i32 ) #0
1131
1235
declare <4 x float > @llvm.amdgcn.raw.ptr.buffer.load.v4f32 (ptr addrspace (8 ), i32 , i32 , i32 ) #0
0 commit comments