From bc8de8a8da704c748cfcb1ad5a348cb234a4fcb8 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Mon, 16 Sep 2019 00:54:07 +0000 Subject: [PATCH] AMDGPU/GlobalISel: Select SMRD loads for more types llvm-svn: 371954 --- llvm/lib/Target/AMDGPU/SMInstructions.td | 15 +- .../GlobalISel/inst-select-load-constant.mir | 1007 ++++++++++++++++++++ 2 files changed, 1019 insertions(+), 3 deletions(-) create mode 100644 llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-constant.mir diff --git a/llvm/lib/Target/AMDGPU/SMInstructions.td b/llvm/lib/Target/AMDGPU/SMInstructions.td index 1b410b6..1a74ebb 100644 --- a/llvm/lib/Target/AMDGPU/SMInstructions.td +++ b/llvm/lib/Target/AMDGPU/SMInstructions.td @@ -793,9 +793,18 @@ multiclass SMLoad_Pattern { // selector to prefer those. let AddedComplexity = 100 in { -defm : SMRD_Pattern <"S_LOAD_DWORD", i32>; -defm : SMRD_Pattern <"S_LOAD_DWORDX2", v2i32>; -defm : SMRD_Pattern <"S_LOAD_DWORDX4", v4i32>; +foreach vt = Reg32Types.types in { +defm : SMRD_Pattern <"S_LOAD_DWORD", vt>; +} + +foreach vt = SReg_64.RegTypes in { +defm : SMRD_Pattern <"S_LOAD_DWORDX2", vt>; +} + +foreach vt = SReg_128.RegTypes in { +defm : SMRD_Pattern <"S_LOAD_DWORDX4", vt>; +} + defm : SMRD_Pattern <"S_LOAD_DWORDX8", v8i32>; defm : SMRD_Pattern <"S_LOAD_DWORDX16", v16i32>; diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-constant.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-constant.mir new file mode 100644 index 0000000..9c09ac4 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-constant.mir @@ -0,0 +1,1007 @@ +# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py +# RUN: llc -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s +# RUN: llc -march=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s +# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX8 %s +# RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s + +--- + +name: load_constant_s32_from_4 +legalized: true +regBankSelected: true +tracksRegLiveness: true + + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_s32_from_4 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX6: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX7-LABEL: name: load_constant_s32_from_4 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX7: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX8-LABEL: name: load_constant_s32_from_4 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX8: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX10-LABEL: name: load_constant_s32_from_4 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX10: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(s32) = G_LOAD %0 :: (load 4, align 4, addrspace 4) + $sgpr0 = COPY %1 + +... + +--- + +name: load_constant_v2s16_from_4 +legalized: true +regBankSelected: true +tracksRegLiveness: true + + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v2s16_from_4 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX6: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX7-LABEL: name: load_constant_v2s16_from_4 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX7: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX8-LABEL: name: load_constant_v2s16_from_4 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX8: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX10-LABEL: name: load_constant_v2s16_from_4 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX10: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<2 x s16>) = G_LOAD %0 :: (load 4, align 4, addrspace 4) + $sgpr0 = COPY %1 + +... + + +--- +name: load_constant_v2s32 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v2s32 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX6: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX7-LABEL: name: load_constant_v2s32 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX7: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX8-LABEL: name: load_constant_v2s32 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX8: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX10-LABEL: name: load_constant_v2s32 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX10: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<2 x s32>) = G_LOAD %0 :: (load 8, align 8, addrspace 4) + $sgpr0_sgpr1 = COPY %1 + +... + +--- +name: load_constant_v2s32_align4 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v2s32_align4 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX6: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX7-LABEL: name: load_constant_v2s32_align4 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX7: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX8-LABEL: name: load_constant_v2s32_align4 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX8: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX10-LABEL: name: load_constant_v2s32_align4 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX10: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<2 x s32>) = G_LOAD %0 :: (load 8, align 4, addrspace 4) + $sgpr0_sgpr1 = COPY %1 + +... + +--- +name: load_constant_v4s16_align4 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v4s16_align4 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX6: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX7-LABEL: name: load_constant_v4s16_align4 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX7: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX8-LABEL: name: load_constant_v4s16_align4 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX8: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX10-LABEL: name: load_constant_v4s16_align4 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX10: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<4 x s16>) = G_LOAD %0 :: (load 8, align 4, addrspace 4) + $sgpr0_sgpr1 = COPY %1 + +... + +--- + +name: load_constant_v3s32 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v3s32 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX6: [[LOAD:%[0-9]+]]:sreg_96(<3 x s32>) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX6: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](<3 x s32>) + ; GFX7-LABEL: name: load_constant_v3s32 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX7: [[LOAD:%[0-9]+]]:sreg_96(<3 x s32>) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX7: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](<3 x s32>) + ; GFX8-LABEL: name: load_constant_v3s32 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX8: [[LOAD:%[0-9]+]]:sreg_96(<3 x s32>) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX8: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](<3 x s32>) + ; GFX10-LABEL: name: load_constant_v3s32 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX10: [[LOAD:%[0-9]+]]:sreg_96(<3 x s32>) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX10: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](<3 x s32>) + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<3 x s32>) = G_LOAD %0 :: (load 12, align 4, addrspace 4) + $sgpr0_sgpr1_sgpr2 = COPY %1 + +... + +--- + +name: load_constant_v4s32_align4 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v4s32_align4 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sreg_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0, 0 :: (load 16, align 4, addrspace 4) + ; GFX6: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]] + ; GFX7-LABEL: name: load_constant_v4s32_align4 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sreg_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0, 0 :: (load 16, align 4, addrspace 4) + ; GFX7: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]] + ; GFX8-LABEL: name: load_constant_v4s32_align4 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sreg_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0, 0 :: (load 16, align 4, addrspace 4) + ; GFX8: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]] + ; GFX10-LABEL: name: load_constant_v4s32_align4 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sreg_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0, 0 :: (load 16, align 4, addrspace 4) + ; GFX10: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<4 x s32>) = G_LOAD %0 :: (load 16, align 4, addrspace 4) + $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1 + +... + +--- + +name: load_constant_s64 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_s64 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX6: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX7-LABEL: name: load_constant_s64 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX7: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX8-LABEL: name: load_constant_s64 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX8: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX10-LABEL: name: load_constant_s64 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX10: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(s64) = G_LOAD %0 :: (load 8, align 8, addrspace 4) + $sgpr0_sgpr1 = COPY %1 + +... + +--- + +name: load_constant_s64_align4 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_s64_align4 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX6: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX7-LABEL: name: load_constant_s64_align4 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX7: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX8-LABEL: name: load_constant_s64_align4 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX8: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX10-LABEL: name: load_constant_s64_align4 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, align 4, addrspace 4) + ; GFX10: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(s64) = G_LOAD %0 :: (load 8, align 4, addrspace 4) + $sgpr0_sgpr1 = COPY %1 + +... + +--- + +name: load_constant_v2s64 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v2s64 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sreg_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0, 0 :: (load 16, align 4, addrspace 4) + ; GFX6: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]] + ; GFX7-LABEL: name: load_constant_v2s64 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sreg_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0, 0 :: (load 16, align 4, addrspace 4) + ; GFX7: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]] + ; GFX8-LABEL: name: load_constant_v2s64 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sreg_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0, 0 :: (load 16, align 4, addrspace 4) + ; GFX8: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]] + ; GFX10-LABEL: name: load_constant_v2s64 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sreg_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0, 0 :: (load 16, align 4, addrspace 4) + ; GFX10: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<2 x s64>) = G_LOAD %0 :: (load 16, align 4, addrspace 4) + $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1 + +... + +--- + +name: load_constant_v2p1 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v2p1 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX6: [[LOAD:%[0-9]+]]:sreg_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX6: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>) + ; GFX7-LABEL: name: load_constant_v2p1 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX7: [[LOAD:%[0-9]+]]:sreg_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX7: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>) + ; GFX8-LABEL: name: load_constant_v2p1 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX8: [[LOAD:%[0-9]+]]:sreg_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX8: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>) + ; GFX10-LABEL: name: load_constant_v2p1 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX10: [[LOAD:%[0-9]+]]:sreg_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX10: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>) + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<2 x p1>) = G_LOAD %0 :: (load 16, align 4, addrspace 4) + $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1 + +... + +--- + +name: load_constant_s96 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_s96 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX6: [[LOAD:%[0-9]+]]:sgpr(s96) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX6: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](s96) + ; GFX7-LABEL: name: load_constant_s96 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX7: [[LOAD:%[0-9]+]]:sreg_96(s96) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX7: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](s96) + ; GFX8-LABEL: name: load_constant_s96 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX8: [[LOAD:%[0-9]+]]:sreg_96(s96) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX8: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](s96) + ; GFX10-LABEL: name: load_constant_s96 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX10: [[LOAD:%[0-9]+]]:sreg_96(s96) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX10: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](s96) + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(s96) = G_LOAD %0 :: (load 12, align 4, addrspace 4) + $sgpr0_sgpr1_sgpr2 = COPY %1 + +... + +--- + +name: load_constant_s128_align4 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_s128_align4 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX6: [[LOAD:%[0-9]+]]:sreg_128(s128) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX6: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128) + ; GFX7-LABEL: name: load_constant_s128_align4 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX7: [[LOAD:%[0-9]+]]:sreg_128(s128) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX7: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128) + ; GFX8-LABEL: name: load_constant_s128_align4 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX8: [[LOAD:%[0-9]+]]:sreg_128(s128) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX8: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128) + ; GFX10-LABEL: name: load_constant_s128_align4 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX10: [[LOAD:%[0-9]+]]:sreg_128(s128) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX10: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128) + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(s128) = G_LOAD %0 :: (load 16, align 4, addrspace 4) + $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1 + +... + +--- + +name: load_constant_p3_from_4 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_p3_from_4 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX6: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX7-LABEL: name: load_constant_p3_from_4 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX7: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX8-LABEL: name: load_constant_p3_from_4 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX8: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX10-LABEL: name: load_constant_p3_from_4 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX10: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(p3) = G_LOAD %0 :: (load 4, align 4, addrspace 4) + $sgpr0 = COPY %1 + +... + +--- + +name: load_constant_p1_from_8 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_p1_from_8 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX6: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX7-LABEL: name: load_constant_p1_from_8 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX7: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX8-LABEL: name: load_constant_p1_from_8 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX8: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX10-LABEL: name: load_constant_p1_from_8 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX10: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(p4) = G_LOAD %0 :: (load 8, align 8, addrspace 4) + $sgpr0_sgpr1 = COPY %1 + +... + +--- + +name: load_constant_p999_from_8 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_p999_from_8 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX6: [[LOAD:%[0-9]+]]:sreg_64_xexec(p999) = G_LOAD [[COPY]](p4) :: (load 8, addrspace 4) + ; GFX6: $sgpr0_sgpr1 = COPY [[LOAD]](p999) + ; GFX7-LABEL: name: load_constant_p999_from_8 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX7: [[LOAD:%[0-9]+]]:sreg_64_xexec(p999) = G_LOAD [[COPY]](p4) :: (load 8, addrspace 4) + ; GFX7: $sgpr0_sgpr1 = COPY [[LOAD]](p999) + ; GFX8-LABEL: name: load_constant_p999_from_8 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX8: [[LOAD:%[0-9]+]]:sreg_64_xexec(p999) = G_LOAD [[COPY]](p4) :: (load 8, addrspace 4) + ; GFX8: $sgpr0_sgpr1 = COPY [[LOAD]](p999) + ; GFX10-LABEL: name: load_constant_p999_from_8 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX10: [[LOAD:%[0-9]+]]:sreg_64_xexec(p999) = G_LOAD [[COPY]](p4) :: (load 8, addrspace 4) + ; GFX10: $sgpr0_sgpr1 = COPY [[LOAD]](p999) + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(p999) = G_LOAD %0 :: (load 8, align 8, addrspace 4) + $sgpr0_sgpr1 = COPY %1 + +... + +--- + +name: load_constant_v2p3 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v2p3 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX6: [[LOAD:%[0-9]+]]:sreg_64_xexec(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load 8, addrspace 4) + ; GFX6: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>) + ; GFX7-LABEL: name: load_constant_v2p3 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX7: [[LOAD:%[0-9]+]]:sreg_64_xexec(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load 8, addrspace 4) + ; GFX7: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>) + ; GFX8-LABEL: name: load_constant_v2p3 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX8: [[LOAD:%[0-9]+]]:sreg_64_xexec(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load 8, addrspace 4) + ; GFX8: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>) + ; GFX10-LABEL: name: load_constant_v2p3 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX10: [[LOAD:%[0-9]+]]:sreg_64_xexec(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load 8, addrspace 4) + ; GFX10: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>) + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<2 x p3>) = G_LOAD %0 :: (load 8, align 8, addrspace 4) + $sgpr0_sgpr1 = COPY %1 + +... + +--- + +name: load_constant_v2s16 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v2s16 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX6: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX7-LABEL: name: load_constant_v2s16 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX7: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX8-LABEL: name: load_constant_v2s16 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX8: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX10-LABEL: name: load_constant_v2s16 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0, 0 :: (load 4, addrspace 4) + ; GFX10: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<2 x s16>) = G_LOAD %0 :: (load 4, align 4, addrspace 4) + $sgpr0 = COPY %1 + +... + +--- + +name: load_constant_v4s16 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v4s16 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX6: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX7-LABEL: name: load_constant_v4s16 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX7: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX8-LABEL: name: load_constant_v4s16 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX8: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + ; GFX10-LABEL: name: load_constant_v4s16 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0, 0 :: (load 8, addrspace 4) + ; GFX10: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<4 x s16>) = G_LOAD %0 :: (load 8, align 8, addrspace 4) + $sgpr0_sgpr1 = COPY %1 + +... + +--- + +name: load_constant_v6s16 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v6s16 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX6: [[LOAD:%[0-9]+]]:sgpr(<6 x s16>) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX6: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](<6 x s16>) + ; GFX7-LABEL: name: load_constant_v6s16 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX7: [[LOAD:%[0-9]+]]:sreg_96(<6 x s16>) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX7: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](<6 x s16>) + ; GFX8-LABEL: name: load_constant_v6s16 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX8: [[LOAD:%[0-9]+]]:sreg_96(<6 x s16>) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX8: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](<6 x s16>) + ; GFX10-LABEL: name: load_constant_v6s16 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX10: [[LOAD:%[0-9]+]]:sreg_96(<6 x s16>) = G_LOAD [[COPY]](p4) :: (load 12, align 4, addrspace 4) + ; GFX10: $sgpr0_sgpr1_sgpr2 = COPY [[LOAD]](<6 x s16>) + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<6 x s16>) = G_LOAD %0 :: (load 12, align 4, addrspace 4) + $sgpr0_sgpr1_sgpr2 = COPY %1 + +... + +--- + +name: load_constant_v8s16 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_v8s16 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX6: [[LOAD:%[0-9]+]]:sreg_128(<8 x s16>) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX6: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<8 x s16>) + ; GFX7-LABEL: name: load_constant_v8s16 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX7: [[LOAD:%[0-9]+]]:sreg_128(<8 x s16>) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX7: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<8 x s16>) + ; GFX8-LABEL: name: load_constant_v8s16 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX8: [[LOAD:%[0-9]+]]:sreg_128(<8 x s16>) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX8: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<8 x s16>) + ; GFX10-LABEL: name: load_constant_v8s16 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 + ; GFX10: [[LOAD:%[0-9]+]]:sreg_128(<8 x s16>) = G_LOAD [[COPY]](p4) :: (load 16, align 4, addrspace 4) + ; GFX10: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<8 x s16>) + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(<8 x s16>) = G_LOAD %0 :: (load 16, align 4, addrspace 4) + $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1 + +... + +################################################################################ +### Stress addressing modes +################################################################################ + +--- + +name: load_constant_s32_from_4_gep_1020 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1020 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 255, 0, 0 :: (load 4, addrspace 4) + ; GFX6: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1020 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 255, 0, 0 :: (load 4, addrspace 4) + ; GFX7: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1020 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1020, 0, 0 :: (load 4, addrspace 4) + ; GFX8: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1020 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1020, 0, 0 :: (load 4, addrspace 4) + ; GFX10: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(s64) = G_CONSTANT i64 1020 + %2:sgpr(p4) = G_GEP %0, %1 + %3:sgpr(s32) = G_LOAD %2 :: (load 4, align 4, addrspace 4) + $sgpr0 = COPY %3 + +... + +--- + +name: load_constant_s32_from_4_gep_1024 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1024 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1024 + ; GFX6: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load 4, addrspace 4) + ; GFX6: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]] + ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1024 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORD_IMM_ci:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci [[COPY]], 256, 0, 0 :: (load 4, addrspace 4) + ; GFX7: $sgpr0 = COPY [[S_LOAD_DWORD_IMM_ci]] + ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1024 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1024, 0, 0 :: (load 4, addrspace 4) + ; GFX8: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1024 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1024, 0, 0 :: (load 4, addrspace 4) + ; GFX10: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(s64) = G_CONSTANT i64 1024 + %2:sgpr(p4) = G_GEP %0, %1 + %3:sgpr(s32) = G_LOAD %2 :: (load 4, align 4, addrspace 4) + $sgpr0 = COPY %3 + +... + +--- + +name: load_constant_s32_from_4_gep_1048575 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1048575 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1048575 + ; GFX6: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load 4, addrspace 4) + ; GFX6: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]] + ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1048575 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORD_IMM_ci:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci [[COPY]], 262143, 0, 0 :: (load 4, addrspace 4) + ; GFX7: $sgpr0 = COPY [[S_LOAD_DWORD_IMM_ci]] + ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1048575 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1048575, 0, 0 :: (load 4, addrspace 4) + ; GFX8: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1048575 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1048575, 0, 0 :: (load 4, addrspace 4) + ; GFX10: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(s64) = G_CONSTANT i64 1048575 + %2:sgpr(p4) = G_GEP %0, %1 + %3:sgpr(s32) = G_LOAD %2 :: (load 4, align 4, addrspace 4) + $sgpr0 = COPY %3 + +... + +--- + +name: load_constant_s32_from_4_gep_1048576 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1048576 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1048576 + ; GFX6: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load 4, addrspace 4) + ; GFX6: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]] + ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1048576 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORD_IMM_ci:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci [[COPY]], 262144, 0, 0 :: (load 4, addrspace 4) + ; GFX7: $sgpr0 = COPY [[S_LOAD_DWORD_IMM_ci]] + ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1048576 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1048576 + ; GFX8: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load 4, addrspace 4) + ; GFX8: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]] + ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1048576 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1048576 + ; GFX10: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load 4, addrspace 4) + ; GFX10: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(s64) = G_CONSTANT i64 1048576 + %2:sgpr(p4) = G_GEP %0, %1 + %3:sgpr(s32) = G_LOAD %2 :: (load 4, align 4, addrspace 4) + $sgpr0 = COPY %3 + +... + +--- + +name: load_constant_s32_from_4_gep_1073741823 +legalized: true +regBankSelected: true +tracksRegLiveness: true + +body: | + bb.0: + liveins: $sgpr0_sgpr1 + + ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1073741823 + ; GFX6: liveins: $sgpr0_sgpr1 + ; GFX6: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX6: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1073741823 + ; GFX6: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load 4, addrspace 4) + ; GFX6: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]] + ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1073741823 + ; GFX7: liveins: $sgpr0_sgpr1 + ; GFX7: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX7: [[S_LOAD_DWORD_IMM_ci:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci [[COPY]], 268435455, 0, 0 :: (load 4, addrspace 4) + ; GFX7: $sgpr0 = COPY [[S_LOAD_DWORD_IMM_ci]] + ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1073741823 + ; GFX8: liveins: $sgpr0_sgpr1 + ; GFX8: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX8: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1073741823 + ; GFX8: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load 4, addrspace 4) + ; GFX8: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]] + ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1073741823 + ; GFX10: liveins: $sgpr0_sgpr1 + ; GFX10: $vcc_hi = IMPLICIT_DEF + ; GFX10: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 + ; GFX10: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1073741823 + ; GFX10: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load 4, addrspace 4) + ; GFX10: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]] + %0:sgpr(p4) = COPY $sgpr0_sgpr1 + %1:sgpr(s64) = G_CONSTANT i64 1073741823 + %2:sgpr(p4) = G_GEP %0, %1 + %3:sgpr(s32) = G_LOAD %2 :: (load 4, align 4, addrspace 4) + $sgpr0 = COPY %3 + +... -- 2.7.4