|
14 | 14 |
|
15 | 15 | #include "XtensaFrameLowering.h"
|
16 | 16 | #include "XtensaInstrInfo.h"
|
| 17 | +#include "XtensaMachineFunctionInfo.h" |
17 | 18 | #include "XtensaSubtarget.h"
|
18 | 19 | #include "llvm/CodeGen/MachineInstrBuilder.h"
|
19 | 20 | #include "llvm/CodeGen/MachineModuleInfo.h"
|
@@ -99,6 +100,7 @@ void XtensaFrameLowering::emitPrologue(MachineFunction &MF,
|
99 | 100 | unsigned FP = RegInfo->getFrameRegister(MF);
|
100 | 101 | MachineModuleInfo &MMI = MF.getMMI();
|
101 | 102 | const MCRegisterInfo *MRI = MMI.getContext().getRegisterInfo();
|
| 103 | + XtensaFunctionInfo *XtensaFI = MF.getInfo<XtensaFunctionInfo>(); |
102 | 104 |
|
103 | 105 | // First, compute final stack size.
|
104 | 106 | uint64_t StackSize = MFI.getStackSize();
|
@@ -130,9 +132,11 @@ void XtensaFrameLowering::emitPrologue(MachineFunction &MF,
|
130 | 132 |
|
131 | 133 | // Store FP register in A8, because FP may be used to pass function
|
132 | 134 | // arguments
|
133 |
| - BuildMI(MBB, MBBI, dl, TII.get(Xtensa::OR), Xtensa::A8) |
134 |
| - .addReg(FP) |
135 |
| - .addReg(FP); |
| 135 | + if (XtensaFI->isSaveFrameRegister()) { |
| 136 | + BuildMI(MBB, MBBI, dl, TII.get(Xtensa::OR), Xtensa::A8) |
| 137 | + .addReg(FP) |
| 138 | + .addReg(FP); |
| 139 | + } |
136 | 140 |
|
137 | 141 | // if framepointer enabled, set it to point to the stack pointer.
|
138 | 142 | if (hasFP(MF)) {
|
|
0 commit comments