diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-09-03 17:25:44 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-09-03 17:25:44 +0000 |
| commit | ac42ba8633dd4938facb5cdc664f8382ec6a203e (patch) | |
| tree | 61a75ad95d5b3b53d171c94c900894bc731198b0 /llvm/lib/Target/AMDGPU | |
| parent | 5ffe3e1d935494011b60601137c46c20aded8b97 (diff) | |
| download | bcm5719-llvm-ac42ba8633dd4938facb5cdc664f8382ec6a203e.tar.gz bcm5719-llvm-ac42ba8633dd4938facb5cdc664f8382ec6a203e.zip | |
AMDGPU: Set sizes of spill pseudos
llvm-svn: 280595
Diffstat (limited to 'llvm/lib/Target/AMDGPU')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIInstrInfo.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIInstructions.td | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIRegisterInfo.td | 7 |
3 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp index ae688f04017..56daea6e57e 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -3151,11 +3151,9 @@ unsigned SIInstrInfo::getInstSizeInBytes(const MachineInstr &MI) const { // If we have a definitive size, we can use it. Otherwise we need to inspect // the operands to know the size. - if (DescSize == 8 || DescSize == 4) + if (DescSize != 0) return DescSize; - assert(DescSize == 0); - // 4-byte instructions may have a 32-bit literal encoded after them. Check // operands that coud ever be literals. if (isVALU(MI) || isSALU(MI)) { diff --git a/llvm/lib/Target/AMDGPU/SIInstructions.td b/llvm/lib/Target/AMDGPU/SIInstructions.td index 60a571d51bf..6e4f3f13b9e 100644 --- a/llvm/lib/Target/AMDGPU/SIInstructions.td +++ b/llvm/lib/Target/AMDGPU/SIInstructions.td @@ -1371,6 +1371,8 @@ multiclass SI_SPILL_VGPR <RegisterClass vgpr_class> { SReg_32:$scratch_offset, i32imm:$offset)> { let mayStore = 1; let mayLoad = 0; + // (2 * 4) + (8 * num_subregs) bytes maximum + let Size = !add(!shl(!srl(vgpr_class.Size, 5), 3), 8); } def _RESTORE : VPseudoInstSI < @@ -1379,6 +1381,9 @@ multiclass SI_SPILL_VGPR <RegisterClass vgpr_class> { i32imm:$offset)> { let mayStore = 0; let mayLoad = 1; + + // (2 * 4) + (8 * num_subregs) bytes maximum + let Size = !add(!shl(!srl(vgpr_class.Size, 5), 3), 8); } } // End UseNamedOperandTable = 1, VGPRSpill = 1 } diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.td b/llvm/lib/Target/AMDGPU/SIRegisterInfo.td index ac2609dd127..adce99bbc28 100644 --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.td +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.td @@ -193,6 +193,7 @@ def TTMP_128Regs : RegisterTuples<[sub0, sub1, sub2, sub3], def VGPR_32 : RegisterClass<"AMDGPU", [i32, f32], 32, (add (sequence "VGPR%u", 0, 255))> { let AllocationPriority = 1; + let Size = 32; } // VGPR 64-bit registers @@ -306,6 +307,8 @@ def SReg_512 : RegisterClass<"AMDGPU", [v64i8, v16i32], 32, (add SGPR_512)> { // Register class for all vector registers (VGPRs + Interploation Registers) def VReg_64 : RegisterClass<"AMDGPU", [i64, f64, v2i32, v2f32], 32, (add VGPR_64)> { + let Size = 64; + // Requires 2 v_mov_b32 to copy let CopyCost = 2; let AllocationPriority = 2; @@ -320,17 +323,21 @@ def VReg_96 : RegisterClass<"AMDGPU", [untyped], 32, (add VGPR_96)> { } def VReg_128 : RegisterClass<"AMDGPU", [v4i32, v4f32, v2i64, v2f64], 32, (add VGPR_128)> { + let Size = 128; + // Requires 4 v_mov_b32 to copy let CopyCost = 4; let AllocationPriority = 4; } def VReg_256 : RegisterClass<"AMDGPU", [v8i32, v8f32], 32, (add VGPR_256)> { + let Size = 256; let CopyCost = 8; let AllocationPriority = 5; } def VReg_512 : RegisterClass<"AMDGPU", [v16i32, v16f32], 32, (add VGPR_512)> { + let Size = 512; let CopyCost = 16; let AllocationPriority = 6; } |

