@@ -610,6 +610,25 @@ static MCCFIInstruction createDefCFAOffset(const TargetRegisterInfo &TRI,
610
610
Comment.str ());
611
611
}
612
612
613
+ void RISCVFrameLowering::allocateStack (MachineBasicBlock &MBB,
614
+ MachineBasicBlock::iterator MBBI,
615
+ StackOffset Offset, bool EmitCFI,
616
+ unsigned CFIIndex) const {
617
+ DebugLoc DL;
618
+ const RISCVRegisterInfo *RI = STI.getRegisterInfo ();
619
+ const RISCVInstrInfo *TII = STI.getInstrInfo ();
620
+
621
+ RI->adjustReg (MBB, MBBI, DL, SPReg, SPReg, Offset, MachineInstr::FrameSetup,
622
+ getStackAlign ());
623
+
624
+ if (EmitCFI) {
625
+ // Emit ".cfi_def_cfa_offset StackSize"
626
+ BuildMI (MBB, MBBI, DL, TII->get (TargetOpcode::CFI_INSTRUCTION))
627
+ .addCFIIndex (CFIIndex)
628
+ .setMIFlag (MachineInstr::FrameSetup);
629
+ }
630
+ }
631
+
613
632
void RISCVFrameLowering::emitPrologue (MachineFunction &MF,
614
633
MachineBasicBlock &MBB) const {
615
634
MachineFrameInfo &MFI = MF.getFrameInfo ();
@@ -726,16 +745,10 @@ void RISCVFrameLowering::emitPrologue(MachineFunction &MF,
726
745
727
746
if (StackSize != 0 ) {
728
747
// Allocate space on the stack if necessary.
729
- RI->adjustReg (MBB, MBBI, DL, SPReg, SPReg,
730
- StackOffset::getFixed (-StackSize), MachineInstr::FrameSetup,
731
- getStackAlign ());
732
-
733
- // Emit ".cfi_def_cfa_offset RealStackSize"
734
748
unsigned CFIIndex = MF.addFrameInst (
735
749
MCCFIInstruction::cfiDefCfaOffset (nullptr , RealStackSize));
736
- BuildMI (MBB, MBBI, DL, TII->get (TargetOpcode::CFI_INSTRUCTION))
737
- .addCFIIndex (CFIIndex)
738
- .setMIFlag (MachineInstr::FrameSetup);
750
+ allocateStack (MBB, MBBI, StackOffset::getFixed (-StackSize),
751
+ /* EmitCFI=*/ true , CFIIndex);
739
752
}
740
753
741
754
// The frame pointer is callee-saved, and code has been generated for us to
@@ -776,20 +789,13 @@ void RISCVFrameLowering::emitPrologue(MachineFunction &MF,
776
789
getStackSizeWithRVVPadding (MF) - FirstSPAdjustAmount;
777
790
assert (SecondSPAdjustAmount > 0 &&
778
791
" SecondSPAdjustAmount should be greater than zero" );
779
- RI->adjustReg (MBB, MBBI, DL, SPReg, SPReg,
780
- StackOffset::getFixed (-SecondSPAdjustAmount),
781
- MachineInstr::FrameSetup, getStackAlign ());
782
792
783
793
// If we are using a frame-pointer, and thus emitted ".cfi_def_cfa fp, 0",
784
794
// don't emit an sp-based .cfi_def_cfa_offset
785
- if (!hasFP (MF)) {
786
- // Emit ".cfi_def_cfa_offset StackSize"
787
- unsigned CFIIndex = MF.addFrameInst (MCCFIInstruction::cfiDefCfaOffset (
788
- nullptr , getStackSizeWithRVVPadding (MF)));
789
- BuildMI (MBB, MBBI, DL, TII->get (TargetOpcode::CFI_INSTRUCTION))
790
- .addCFIIndex (CFIIndex)
791
- .setMIFlag (MachineInstr::FrameSetup);
792
- }
795
+ unsigned CFIIndex = MF.addFrameInst (MCCFIInstruction::cfiDefCfaOffset (
796
+ nullptr , getStackSizeWithRVVPadding (MF)));
797
+ allocateStack (MBB, MBBI, StackOffset::getFixed (-SecondSPAdjustAmount),
798
+ !hasFP (MF), CFIIndex);
793
799
}
794
800
795
801
if (RVVStackSize) {
0 commit comments