1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00
llvm-mirror/test/TableGen/RegisterInfoEmitter-regcost.td
Christudasan Devadasan e86b7c773c Support a list of CostPerUse values
This patch allows targets to define multiple cost
values for each register so that the cost model
can be more flexible and better used during the
register allocation as per the target requirements.

For AMDGPU the VGPR allocation will be more efficient
if the register cost can be associated dynamically
based on the calling convention.

Reviewed By: qcolombet

Differential Revision: https://reviews.llvm.org/D86836
2021-01-29 10:14:52 +05:30

37 lines
1.1 KiB
TableGen

// RUN: llvm-tblgen -gen-register-info -I %p/../../include -I %p/Common %s | FileCheck %s
// Checks the CostPerUse value for the registers.
include "llvm/Target/Target.td"
let Namespace = "MyTarget" in {
foreach Index = 0-3 in {
// Adds register cost value 1.
let CostPerUse = [1] in {
def S#Index : Register <"s"#Index>;
}
}
// CostPerUse by default to 0.
def D0 : Register<"d0">;
def D1 : Register<"d1">;
} // Namespace = "MyTarget"
def SRegs : RegisterClass<"MyTarget", [i32], 32, (sequence "S%u", 0, 3)>;
def DRegs : RegisterClass<"MyTarget", [i32], 32, (sequence "D%u", 0, 1)>;
def MyTarget : Target;
// CHECK: static const uint8_t CostPerUseTable[] = {
// CHECK-NEXT: 0, 0, 0, 1, 1, 1, 1, };
// CHECK: static const bool InAllocatableClassTable[] = {
// CHECK-NEXT: false, true, true, true, true, true, true, };
// CHECK: static const TargetRegisterInfoDesc MyTargetRegInfoDesc = { // Extra Descriptors
// CHECK-NEXT: CostPerUseTable, 1, InAllocatableClassTable};
// CHECK: TargetRegisterInfo(&MyTargetRegInfoDesc, RegisterClasses, RegisterClasses+2,