Skip to content

Commit d584cea

Browse files
authored
[RISCV] Use TypeSize instead of uint64_t in getMachineMemOperand interface (#133274)
The primary reason is that if you pass a TypeSize without explicitly converting to LocationSize, you otherwise implicit convert to uint64_t to call the respective LocationSize constructor. This means that any scalable value becomes a runtime assertion failure. By replacing uint64_t with TypeSize in this API, we avoid the implicit conversion for TypeSize. uint64_t callers implicit convert to LocationSize (via the raw constructor) which should have unchanged behavior.
1 parent aa207c3 commit d584cea

File tree

2 files changed

+5
-9
lines changed

2 files changed

+5
-9
lines changed

llvm/include/llvm/CodeGen/MachineFunction.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,7 +1073,7 @@ class LLVM_ABI MachineFunction {
10731073
AtomicOrdering Ordering = AtomicOrdering::NotAtomic,
10741074
AtomicOrdering FailureOrdering = AtomicOrdering::NotAtomic);
10751075
MachineMemOperand *getMachineMemOperand(
1076-
MachinePointerInfo PtrInfo, MachineMemOperand::Flags F, uint64_t Size,
1076+
MachinePointerInfo PtrInfo, MachineMemOperand::Flags F, TypeSize Size,
10771077
Align BaseAlignment, const AAMDNodes &AAInfo = AAMDNodes(),
10781078
const MDNode *Ranges = nullptr, SyncScope::ID SSID = SyncScope::System,
10791079
AtomicOrdering Ordering = AtomicOrdering::NotAtomic,
@@ -1099,7 +1099,7 @@ class LLVM_ABI MachineFunction {
10991099
: LLT::scalar(8 * Size.getValue().getKnownMinValue()));
11001100
}
11011101
MachineMemOperand *getMachineMemOperand(const MachineMemOperand *MMO,
1102-
int64_t Offset, uint64_t Size) {
1102+
int64_t Offset, TypeSize Size) {
11031103
return getMachineMemOperand(MMO, Offset, LocationSize::precise(Size));
11041104
}
11051105

@@ -1115,7 +1115,7 @@ class LLVM_ABI MachineFunction {
11151115
LLT Ty);
11161116
MachineMemOperand *getMachineMemOperand(const MachineMemOperand *MMO,
11171117
const MachinePointerInfo &PtrInfo,
1118-
uint64_t Size) {
1118+
TypeSize Size) {
11191119
return getMachineMemOperand(MMO, PtrInfo, LocationSize::precise(Size));
11201120
}
11211121

llvm/lib/Target/RISCV/RISCVInstrInfo.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -705,11 +705,9 @@ void RISCVInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
705705
llvm_unreachable("Can't store this register to stack slot");
706706

707707
if (IsScalableVector) {
708-
LocationSize LocSize =
709-
LocationSize::precise(TypeSize::getScalable(MFI.getObjectSize(FI)));
710708
MachineMemOperand *MMO = MF->getMachineMemOperand(
711709
MachinePointerInfo::getFixedStack(*MF, FI), MachineMemOperand::MOStore,
712-
LocSize, MFI.getObjectAlign(FI));
710+
TypeSize::getScalable(MFI.getObjectSize(FI)), MFI.getObjectAlign(FI));
713711

714712
MFI.setStackID(FI, TargetStackID::ScalableVector);
715713
BuildMI(MBB, I, DebugLoc(), get(Opcode))
@@ -799,11 +797,9 @@ void RISCVInstrInfo::loadRegFromStackSlot(
799797
llvm_unreachable("Can't load this register from stack slot");
800798

801799
if (IsScalableVector) {
802-
LocationSize LocSize =
803-
LocationSize::precise(TypeSize::getScalable(MFI.getObjectSize(FI)));
804800
MachineMemOperand *MMO = MF->getMachineMemOperand(
805801
MachinePointerInfo::getFixedStack(*MF, FI), MachineMemOperand::MOLoad,
806-
LocSize, MFI.getObjectAlign(FI));
802+
TypeSize::getScalable(MFI.getObjectSize(FI)), MFI.getObjectAlign(FI));
807803

808804
MFI.setStackID(FI, TargetStackID::ScalableVector);
809805
BuildMI(MBB, I, DL, get(Opcode), DstReg)

0 commit comments

Comments
 (0)