| // RUN: llvm-tblgen -gen-register-info -register-info-debug -I %p/../../include %s -o /dev/null 2>&1 | FileCheck %s |
| include "llvm/Target/Target.td" |
| |
| def HasFeat : Predicate<"Subtarget->hasFeat()">; |
| |
| def TestMode : HwMode<"+feat1", [HasFeat]>; |
| |
| class MyReg<string n> |
| : Register<n> { |
| let Namespace = "Test"; |
| } |
| class MyClass<int size, list<ValueType> types, dag registers> |
| : RegisterClass<"Test", types, size, registers> { |
| let Size = size; |
| } |
| |
| def X0 : MyReg<"x0">; |
| def X1 : MyReg<"x1">; |
| def X2 : MyReg<"x2">; |
| def X3 : MyReg<"x3">; |
| def X4 : MyReg<"x4">; |
| def X5 : MyReg<"x5">; |
| def X6 : MyReg<"x6">; |
| def X7 : MyReg<"x7">; |
| def X8 : MyReg<"x8">; |
| def X9 : MyReg<"x9">; |
| def X10 : MyReg<"x10">; |
| def X11 : MyReg<"x11">; |
| def X12 : MyReg<"x12">; |
| def X13 : MyReg<"x13">; |
| def X14 : MyReg<"x14">; |
| def X15 : MyReg<"x15">; |
| |
| def ModeVT : ValueTypeByHwMode<[DefaultMode, TestMode], |
| [i32, i64]>; |
| let RegInfos = RegInfoByHwMode<[DefaultMode, TestMode], |
| [RegInfo<32,32,32>, RegInfo<64,64,64>]> in |
| def XRegs : MyClass<32, [ModeVT], (sequence "X%u", 0, 15)>; |
| |
| def sub_even : SubRegIndex<32> { |
| let SubRegRanges = SubRegRangeByHwMode<[DefaultMode, TestMode], |
| [SubRegRange<32>, SubRegRange<64>]>; |
| } |
| def sub_odd : SubRegIndex<32, 32> { |
| let SubRegRanges = SubRegRangeByHwMode<[DefaultMode, TestMode], |
| [SubRegRange<32, 32>, SubRegRange<64, 64>]>; |
| } |
| |
| def XPairs : RegisterTuples<[sub_even, sub_odd], |
| [(decimate (rotl XRegs, 0), 2), |
| (decimate (rotl XRegs, 1), 2)]>; |
| |
| let RegInfos = RegInfoByHwMode<[DefaultMode, TestMode], |
| [RegInfo<64,64,32>, RegInfo<128,128,64>]> in |
| def XPairsClass : MyClass<64, [untyped], (add XPairs)>; |
| |
| def TestTarget : Target; |
| |
| // CHECK-LABEL: RegisterClass XRegs: |
| // CHECK: SpillSize: { Default:32 TestMode:64 } |
| // CHECK: SpillAlignment: { Default:32 TestMode:64 } |
| // CHECK: Regs: X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 |
| |
| // CHECK-LABEL: RegisterClass XPairsClass: |
| // CHECK: SpillSize: { Default:64 TestMode:128 } |
| // CHECK: SpillAlignment: { Default:32 TestMode:64 } |
| // CHECK: CoveredBySubRegs: 1 |
| // CHECK: Regs: X0_X1 X2_X3 X4_X5 X6_X7 X8_X9 X10_X11 X12_X13 X14_X15 |
| |
| // CHECK-LABEL: SubRegIndex sub_even: |
| // CHECK: Offset: { Default:0 TestMode:0 } |
| // CHECK: Size: { Default:32 TestMode:64 } |
| // CHECK-LABEL: SubRegIndex sub_odd: |
| // CHECK: Offset: { Default:32 TestMode:64 } |
| // CHECK: Size: { Default:32 TestMode:64 } |