@@ -1126,6 +1126,110 @@ main_body:
11261126 ret void
11271127}
11281128
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+
11291233declare float @llvm.amdgcn.raw.ptr.buffer.load.f32 (ptr addrspace (8 ), i32 , i32 , i32 ) #0
11301234declare <2 x float > @llvm.amdgcn.raw.ptr.buffer.load.v2f32 (ptr addrspace (8 ), i32 , i32 , i32 ) #0
11311235declare <4 x float > @llvm.amdgcn.raw.ptr.buffer.load.v4f32 (ptr addrspace (8 ), i32 , i32 , i32 ) #0
0 commit comments