1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=FUNC -check-prefix=SI -check-prefix=GCN %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=FUNC -check-prefix=VI -check-prefix=GCN %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}cluster_arg_loads: 5*9880d681SAndroid Build Coastguard Worker; FIXME: Due to changes in the load clustering heuristics. We no longer 6*9880d681SAndroid Build Coastguard Worker; cluster all argument loads together on SI. 7*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword s{{[0-9]+}}, s{{\[[0-9]+:[0-9]+\]}}, 0xd 8*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, 0x9 9*9880d681SAndroid Build Coastguard Worker; SI-NEXT: s_load_dwordx2 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, 0xb 10*9880d681SAndroid Build Coastguard Worker; SI-NEXT: s_load_dword s{{[0-9]+}}, s{{\[[0-9]+:[0-9]+\]}}, 0xe 11*9880d681SAndroid Build Coastguard Worker; VI: s_load_dword s{{[0-9]+}}, s{{\[[0-9]+:[0-9]+\]}}, 0x34 12*9880d681SAndroid Build Coastguard Worker; VI: s_load_dwordx2 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, 0x24 13*9880d681SAndroid Build Coastguard Worker; VI: s_load_dwordx2 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, 0x2c 14*9880d681SAndroid Build Coastguard Worker; VI: s_load_dword s{{[0-9]+}}, s{{\[[0-9]+:[0-9]+\]}}, 0x38 15*9880d681SAndroid Build Coastguard Workerdefine void @cluster_arg_loads(i32 addrspace(1)* %out0, i32 addrspace(1)* %out1, i32 %x, i32 %y) nounwind { 16*9880d681SAndroid Build Coastguard Worker store i32 %x, i32 addrspace(1)* %out0, align 4 17*9880d681SAndroid Build Coastguard Worker store i32 %y, i32 addrspace(1)* %out1, align 4 18*9880d681SAndroid Build Coastguard Worker ret void 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker; Test for a crash in SIInstrInfo::areLoadsFromSameBasePtr() when 22*9880d681SAndroid Build Coastguard Worker; s_load_dwordx2 has a register offset 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @same_base_ptr_crash 25*9880d681SAndroid Build Coastguard Worker; GCN: s_load_dwordx2 26*9880d681SAndroid Build Coastguard Worker; GCN: s_load_dwordx2 27*9880d681SAndroid Build Coastguard Worker; GCN: s_load_dwordx2 28*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm 29*9880d681SAndroid Build Coastguard Workerdefine void @same_base_ptr_crash(i64 addrspace(1)* %out, 30*9880d681SAndroid Build Coastguard Worker i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %arg5, i64 %arg6, i64 %arg7, 31*9880d681SAndroid Build Coastguard Worker i64 %arg8, i64 %arg9, i64 %arg10, i64 %arg11, i64 %arg12, i64 %arg13, i64 %arg14, i64 %arg15, 32*9880d681SAndroid Build Coastguard Worker i64 %arg16, i64 %arg17, i64 %arg18, i64 %arg19, i64 %arg20, i64 %arg21, i64 %arg22, i64 %arg23, 33*9880d681SAndroid Build Coastguard Worker i64 %arg24, i64 %arg25, i64 %arg26, i64 %arg27, i64 %arg28, i64 %arg29, i64 %arg30, i64 %arg31, 34*9880d681SAndroid Build Coastguard Worker i64 %arg32, i64 %arg33, i64 %arg34, i64 %arg35, i64 %arg36, i64 %arg37, i64 %arg38, i64 %arg39, 35*9880d681SAndroid Build Coastguard Worker i64 %arg40, i64 %arg41, i64 %arg42, i64 %arg43, i64 %arg44, i64 %arg45, i64 %arg46, i64 %arg47, 36*9880d681SAndroid Build Coastguard Worker i64 %arg48, i64 %arg49, i64 %arg50, i64 %arg51, i64 %arg52, i64 %arg53, i64 %arg54, i64 %arg55, 37*9880d681SAndroid Build Coastguard Worker i64 %arg56, i64 %arg57, i64 %arg58, i64 %arg59, i64 %arg60, i64 %arg61, i64 %arg62, i64 %arg63, 38*9880d681SAndroid Build Coastguard Worker i64 %arg64, i64 %arg65, i64 %arg66, i64 %arg67, i64 %arg68, i64 %arg69, i64 %arg70, i64 %arg71, 39*9880d681SAndroid Build Coastguard Worker i64 %arg72, i64 %arg73, i64 %arg74, i64 %arg75, i64 %arg76, i64 %arg77, i64 %arg78, i64 %arg79, 40*9880d681SAndroid Build Coastguard Worker i64 %arg80, i64 %arg81, i64 %arg82, i64 %arg83, i64 %arg84, i64 %arg85, i64 %arg86, i64 %arg87, 41*9880d681SAndroid Build Coastguard Worker i64 %arg88, i64 %arg89, i64 %arg90, i64 %arg91, i64 %arg92, i64 %arg93, i64 %arg94, i64 %arg95, 42*9880d681SAndroid Build Coastguard Worker i64 %arg96, i64 %arg97, i64 %arg98, i64 %arg99, i64 %arg100, i64 %arg101, i64 %arg102, i64 %arg103, 43*9880d681SAndroid Build Coastguard Worker i64 %arg104, i64 %arg105, i64 %arg106, i64 %arg107, i64 %arg108, i64 %arg109, i64 %arg110, i64 %arg111, 44*9880d681SAndroid Build Coastguard Worker i64 %arg112, i64 %arg113, i64 %arg114, i64 %arg115, i64 %arg116, i64 %arg117, i64 %arg118, i64 %arg119, 45*9880d681SAndroid Build Coastguard Worker i64 %arg120, i64 %arg121, i64 %arg122, i64 %arg123, i64 %arg124, i64 %arg125, i64 %arg126) { 46*9880d681SAndroid Build Coastguard Workerentry: 47*9880d681SAndroid Build Coastguard Worker %value = add i64 %arg125, %arg126 48*9880d681SAndroid Build Coastguard Worker store i64 %value, i64 addrspace(1)* %out, align 8 49*9880d681SAndroid Build Coastguard Worker ret void 50*9880d681SAndroid Build Coastguard Worker} 51