OLD | NEW |
1 //===-- PPCFrameLowering.cpp - PPC Frame Information ----------------------===// | 1 //===-- PPCFrameLowering.cpp - PPC Frame Information ----------------------===// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // This file contains the PPC implementation of TargetFrameLowering class. | 10 // This file contains the PPC implementation of TargetFrameLowering class. |
(...skipping 1152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1163 } | 1163 } |
1164 | 1164 |
1165 // Insert the spill to the stack frame. | 1165 // Insert the spill to the stack frame. |
1166 if (IsCRField) { | 1166 if (IsCRField) { |
1167 PPCFunctionInfo *FuncInfo = MF->getInfo<PPCFunctionInfo>(); | 1167 PPCFunctionInfo *FuncInfo = MF->getInfo<PPCFunctionInfo>(); |
1168 if (Subtarget.isPPC64()) { | 1168 if (Subtarget.isPPC64()) { |
1169 // The actual spill will happen at the start of the prologue. | 1169 // The actual spill will happen at the start of the prologue. |
1170 FuncInfo->addMustSaveCR(Reg); | 1170 FuncInfo->addMustSaveCR(Reg); |
1171 } else { | 1171 } else { |
1172 CRSpilled = true; | 1172 CRSpilled = true; |
1173 FuncInfo->setSpillsCR(); | |
1174 | 1173 |
1175 // 32-bit: FP-relative. Note that we made sure CR2-CR4 all have | 1174 // 32-bit: FP-relative. Note that we made sure CR2-CR4 all have |
1176 // the same frame index in PPCRegisterInfo::hasReservedSpillSlot. | 1175 // the same frame index in PPCRegisterInfo::hasReservedSpillSlot. |
1177 CRMIB = BuildMI(*MF, DL, TII.get(PPC::MFCR), PPC::R12) | 1176 CRMIB = BuildMI(*MF, DL, TII.get(PPC::MFCR), PPC::R12) |
1178 .addReg(Reg, RegState::ImplicitKill); | 1177 .addReg(Reg, RegState::ImplicitKill); |
1179 | 1178 |
1180 MBB.insert(MI, CRMIB); | 1179 MBB.insert(MI, CRMIB); |
1181 MBB.insert(MI, addFrameReference(BuildMI(*MF, DL, TII.get(PPC::STW)) | 1180 MBB.insert(MI, addFrameReference(BuildMI(*MF, DL, TII.get(PPC::STW)) |
1182 .addReg(PPC::R12, | 1181 .addReg(PPC::R12, |
1183 getKillRegState(true)), | 1182 getKillRegState(true)), |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1344 // If we haven't yet spilled the CRs, do so now. | 1343 // If we haven't yet spilled the CRs, do so now. |
1345 if (CR2Spilled || CR3Spilled || CR4Spilled) { | 1344 if (CR2Spilled || CR3Spilled || CR4Spilled) { |
1346 bool is31 = needsFP(*MF); | 1345 bool is31 = needsFP(*MF); |
1347 restoreCRs(Subtarget.isPPC64(), is31, CR2Spilled, CR3Spilled, CR4Spilled, | 1346 restoreCRs(Subtarget.isPPC64(), is31, CR2Spilled, CR3Spilled, CR4Spilled, |
1348 MBB, I, CSI, CSIIndex); | 1347 MBB, I, CSI, CSIIndex); |
1349 } | 1348 } |
1350 | 1349 |
1351 return true; | 1350 return true; |
1352 } | 1351 } |
1353 | 1352 |
OLD | NEW |