summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2016-09-03 17:25:44 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2016-09-03 17:25:44 +0000
commitac42ba8633dd4938facb5cdc664f8382ec6a203e (patch)
tree61a75ad95d5b3b53d171c94c900894bc731198b0 /llvm/lib/Target/AMDGPU
parent5ffe3e1d935494011b60601137c46c20aded8b97 (diff)
downloadbcm5719-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.cpp4
-rw-r--r--llvm/lib/Target/AMDGPU/SIInstructions.td5
-rw-r--r--llvm/lib/Target/AMDGPU/SIRegisterInfo.td7
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;
}
OpenPOWER on IntegriCloud