-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[Target][RISCV] Add HwMode support to subregister index size/offset. #86368
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
c274574
e03bc15
63e6814
d184d30
d9bf855
14e58c5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -64,9 +64,14 @@ def sub_vrm1_6 : ComposedSubRegIndex<sub_vrm2_3, sub_vrm1_0>; | |
def sub_vrm1_7 : ComposedSubRegIndex<sub_vrm2_3, sub_vrm1_1>; | ||
|
||
// GPR sizes change with HwMode. | ||
// FIXME: Support HwMode in SubRegIndex? | ||
def sub_gpr_even : SubRegIndex<-1>; | ||
def sub_gpr_odd : SubRegIndex<-1, -1>; | ||
def sub_gpr_even : SubRegIndex<32> { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Leave these as -1 so we never accidentally use 32 for non-RV32? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Isn't 32 consistent with the size we pass to the non-HwMode part of this?
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I guess if we do that then it's fine |
||
let SubRegRanges = SubRegRangeByHwMode<[RV32, RV64], | ||
[SubRegRange<32>, SubRegRange<64>]>; | ||
} | ||
def sub_gpr_odd : SubRegIndex<32, 32> { | ||
let SubRegRanges = SubRegRangeByHwMode<[RV32, RV64], | ||
[SubRegRange<32, 32>, SubRegRange<64, 64>]>; | ||
} | ||
} // Namespace = "RISCV" | ||
|
||
// Integer registers | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
// 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 } |
Uh oh!
There was an error while loading. Please reload this page.