|
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