[llvm-dev] TargetRegisterInfo::getCommonSubClass bug, perhaps.
Nancy via llvm-dev
llvm-dev at lists.llvm.org
Mon Aug 26 19:36:57 PDT 2019
Hi,
ABCRegister.td :
def SGPR32 : RegisterClass<"ABC", [i32], 16, (add
S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11,
S12, S13, S14, S15
)>;
def SFGPR32 : RegisterClass<"ABC", [f32], 16, (add
S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11,
S12, S13, S14, S15
)>;
===== Instruction selection ends:
...
t8: i32 = ADDrr t37, t32
...
Instruction Selection correct : i32 = ADDrr i32, i32
*** MachineFunction at end of ISel ***
# Machine code for function _Z11scalar_loopPsS_ss: IsSSA, TracksLiveness
...
%31:sfgpr32 = ADDrr killed %32:sgpr32, %27:sgpr32
...
Here should not select f32 sfgpr32 register, debugger point to
TargetRegisterInfo:: getCommonSubClass(const TargetRegisterClass *A,
const TargetRegisterClass *B,
const MVT::SimpleValueType SVT =
MVT::SimpleValueType::Any)
This function has been called 10+ in LLVM, only one place give
specific SVT parameter. Most of those places are hard to get the
MVT::SimpleValueType infos and use the default value. That's why
sfgpr32 comes out. LLVM defect?
-
Best Regards,
Yu Rong Tan
More information about the llvm-dev
mailing list