[PATCH] D145471: [RISCV] Set how many bytes load from or store to stack slot
Jim Lin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 7 22:59:05 PST 2023
Jim updated this revision to Diff 503239.
Jim added a comment.
Add pre-commit test case
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D145471/new/
https://reviews.llvm.org/D145471
Files:
llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
llvm/lib/Target/RISCV/RISCVInstrInfo.h
llvm/test/CodeGen/RISCV/stack-slot-coloring.mir
Index: llvm/test/CodeGen/RISCV/stack-slot-coloring.mir
===================================================================
--- llvm/test/CodeGen/RISCV/stack-slot-coloring.mir
+++ llvm/test/CodeGen/RISCV/stack-slot-coloring.mir
@@ -94,10 +94,14 @@
; CHECK-NEXT: $x27 = LW %stack.0.a, 0 :: (volatile dereferenceable load (s32) from %ir.a)
; CHECK-NEXT: renamable $x1 = LW %stack.0.a, 0 :: (volatile dereferenceable load (s32) from %ir.a)
; CHECK-NEXT: SW killed renamable $x1, %stack.1, 0 :: (store (s32) into %stack.1)
+ ; CHECK-NEXT: renamable $x1 = LB %stack.0.a, 0 :: (volatile dereferenceable load (s8) from %ir.a)
+ ; CHECK-NEXT: SW killed renamable $x1, %stack.0.a, 0 :: (volatile store (s32) into %ir.a)
; CHECK-NEXT: renamable $x1 = LW %stack.1, 0 :: (load (s32) from %stack.1)
; CHECK-NEXT: SW killed renamable $x1, %stack.0.a, 0 :: (volatile store (s32) into %ir.a)
; CHECK-NEXT: renamable $x1 = LW %stack.0.a, 0 :: (volatile dereferenceable load (s32) from %ir.a)
; CHECK-NEXT: SW killed renamable $x1, %stack.1, 0 :: (store (s32) into %stack.1)
+ ; CHECK-NEXT: renamable $x1 = LB %stack.0.a, 0 :: (volatile dereferenceable load (s8) from %ir.a)
+ ; CHECK-NEXT: SW killed renamable $x1, %stack.0.a, 0 :: (volatile store (s32) into %ir.a)
; CHECK-NEXT: renamable $x1 = LW %stack.1, 0 :: (load (s32) from %stack.1)
; CHECK-NEXT: SW killed renamable $x1, %stack.0.a, 0 :: (volatile store (s32) into %ir.a)
; CHECK-NEXT: SW $x10, %stack.0.a, 0 :: (volatile store (s32) into %ir.a)
Index: llvm/lib/Target/RISCV/RISCVInstrInfo.h
===================================================================
--- llvm/lib/Target/RISCV/RISCVInstrInfo.h
+++ llvm/lib/Target/RISCV/RISCVInstrInfo.h
@@ -49,10 +49,10 @@
MCInst getNop() const override;
const MCInstrDesc &getBrCond(RISCVCC::CondCode CC) const;
- unsigned isLoadFromStackSlot(const MachineInstr &MI,
- int &FrameIndex) const override;
- unsigned isStoreToStackSlot(const MachineInstr &MI,
- int &FrameIndex) const override;
+ unsigned isLoadFromStackSlot(const MachineInstr &MI, int &FrameIndex,
+ unsigned &MemBytes) const override;
+ unsigned isStoreToStackSlot(const MachineInstr &MI, int &FrameIndex,
+ unsigned &MemBytes) const override;
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
const DebugLoc &DL, MCRegister DstReg, MCRegister SrcReg,
Index: llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
===================================================================
--- llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
+++ llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
@@ -78,20 +78,28 @@
}
unsigned RISCVInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
- int &FrameIndex) const {
+ int &FrameIndex,
+ unsigned &MemBytes) const {
switch (MI.getOpcode()) {
default:
return 0;
case RISCV::LB:
case RISCV::LBU:
+ MemBytes = 1;
+ break;
case RISCV::LH:
case RISCV::LHU:
case RISCV::FLH:
+ MemBytes = 2;
+ break;
case RISCV::LW:
case RISCV::FLW:
case RISCV::LWU:
+ MemBytes = 4;
+ break;
case RISCV::LD:
case RISCV::FLD:
+ MemBytes = 8;
break;
}
@@ -105,17 +113,25 @@
}
unsigned RISCVInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
- int &FrameIndex) const {
+ int &FrameIndex,
+ unsigned &MemBytes) const {
switch (MI.getOpcode()) {
default:
return 0;
case RISCV::SB:
+ MemBytes = 1;
+ break;
case RISCV::SH:
- case RISCV::SW:
case RISCV::FSH:
+ MemBytes = 2;
+ break;
+ case RISCV::SW:
case RISCV::FSW:
+ MemBytes = 4;
+ break;
case RISCV::SD:
case RISCV::FSD:
+ MemBytes = 8;
break;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D145471.503239.patch
Type: text/x-patch
Size: 4080 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230308/6730ad51/attachment.bin>
More information about the llvm-commits
mailing list