diff options
Diffstat (limited to 'llvm/lib/Target/ARM')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMCodeEmitter.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMFrameLowering.cpp | 103 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/MLxExpansionPass.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/Thumb1FrameLowering.cpp | 63 |
5 files changed, 85 insertions, 88 deletions
diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp index 6a30c891c16..14cc1fdba10 100644 --- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp +++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp @@ -1543,7 +1543,7 @@ bool ARMBaseInstrInfo::isSchedulingBoundary(const MachineInstr *MI, return false; // Terminators and labels can't be scheduled around. - if (MI->isTerminator() || MI->isLabel()) + if (MI->isTerminator() || MI->isPosition()) return true; // Treat the start of the IT block as a scheduling boundary, but schedule diff --git a/llvm/lib/Target/ARM/ARMCodeEmitter.cpp b/llvm/lib/Target/ARM/ARMCodeEmitter.cpp index 568ca858c4d..3f81ab11587 100644 --- a/llvm/lib/Target/ARM/ARMCodeEmitter.cpp +++ b/llvm/lib/Target/ARM/ARMCodeEmitter.cpp @@ -866,7 +866,8 @@ void ARMCodeEmitter::emitPseudoInstruction(const MachineInstr &MI) { } break; } - case TargetOpcode::PROLOG_LABEL: + case TargetOpcode::CFI_INSTRUCTION: + break; case TargetOpcode::EH_LABEL: MCE.emitLabel(MI.getOperand(0).getMCSymbol()); break; diff --git a/llvm/lib/Target/ARM/ARMFrameLowering.cpp b/llvm/lib/Target/ARM/ARMFrameLowering.cpp index 274a125126a..c35cd23b91c 100644 --- a/llvm/lib/Target/ARM/ARMFrameLowering.cpp +++ b/llvm/lib/Target/ARM/ARMFrameLowering.cpp @@ -179,24 +179,22 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF) const { if (ArgRegsSaveSize) { emitSPUpdate(isARM, MBB, MBBI, dl, TII, -ArgRegsSaveSize, MachineInstr::FrameSetup); - MCSymbol *SPLabel = Context.CreateTempSymbol(); - BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); CFAOffset -= ArgRegsSaveSize; - MMI.addFrameInst( - MCCFIInstruction::createDefCfaOffset(SPLabel, CFAOffset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createDefCfaOffset(nullptr, CFAOffset)); + BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); } if (!AFI->hasStackFrame()) { if (NumBytes - ArgRegsSaveSize != 0) { emitSPUpdate(isARM, MBB, MBBI, dl, TII, -(NumBytes - ArgRegsSaveSize), MachineInstr::FrameSetup); - MCSymbol *SPLabel = Context.CreateTempSymbol(); - BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); CFAOffset -= NumBytes - ArgRegsSaveSize; - MMI.addFrameInst(MCCFIInstruction::createDefCfaOffset(SPLabel, - CFAOffset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createDefCfaOffset(nullptr, CFAOffset)); + BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); } return; } @@ -311,12 +309,12 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF) const { } if (adjustedGPRCS1Size > 0) { - MCSymbol *SPLabel = Context.CreateTempSymbol(); - BuildMI(MBB, ++GPRCS1Push, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); CFAOffset -= adjustedGPRCS1Size; - MMI.addFrameInst( - MCCFIInstruction::createDefCfaOffset(SPLabel, CFAOffset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createDefCfaOffset(nullptr, CFAOffset)); + MachineBasicBlock::iterator Pos = ++GPRCS1Push; + BuildMI(MBB, Pos, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); for (std::vector<CalleeSavedInfo>::const_iterator I = CSI.begin(), E = CSI.end(); I != E; ++I) { unsigned Reg = I->getReg(); @@ -339,9 +337,10 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF) const { case ARM::R6: case ARM::R7: case ARM::LR: - MMI.addFrameInst(MCCFIInstruction::createOffset(SPLabel, - MRI->getDwarfRegNum(Reg, true), - MFI->getObjectOffset(FI))); + CFIIndex = MMI.addFrameInst(MCCFIInstruction::createOffset( + nullptr, MRI->getDwarfRegNum(Reg, true), MFI->getObjectOffset(FI))); + BuildMI(MBB, Pos, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); break; } } @@ -357,28 +356,30 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF) const { emitRegPlusImmediate(!AFI->isThumbFunction(), MBB, GPRCS1Push, dl, TII, FramePtr, ARM::SP, FramePtrOffsetInPush, MachineInstr::FrameSetup); - MCSymbol *SPLabel = Context.CreateTempSymbol(); - BuildMI(MBB, GPRCS1Push, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); if (FramePtrOffsetInPush) { CFAOffset += FramePtrOffsetInPush; - MMI.addFrameInst( - MCCFIInstruction::createDefCfa(SPLabel, - MRI->getDwarfRegNum(FramePtr, true), CFAOffset)); - } else - MMI.addFrameInst( - MCCFIInstruction::createDefCfaRegister(SPLabel, - MRI->getDwarfRegNum(FramePtr, true))); + unsigned CFIIndex = MMI.addFrameInst(MCCFIInstruction::createDefCfa( + nullptr, MRI->getDwarfRegNum(FramePtr, true), CFAOffset)); + BuildMI(MBB, GPRCS1Push, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); + + } else { + unsigned CFIIndex = + MMI.addFrameInst(MCCFIInstruction::createDefCfaRegister( + nullptr, MRI->getDwarfRegNum(FramePtr, true))); + BuildMI(MBB, GPRCS1Push, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); + } } if (GPRCS2Size > 0) { - MCSymbol *SPLabel = Context.CreateTempSymbol(); - BuildMI(MBB, ++GPRCS2Push, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); + MachineBasicBlock::iterator Pos = ++GPRCS2Push; if (!HasFP) { CFAOffset -= GPRCS2Size; - MMI.addFrameInst( - MCCFIInstruction::createDefCfaOffset(SPLabel, CFAOffset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createDefCfaOffset(nullptr, CFAOffset)); + BuildMI(MBB, Pos, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); } for (std::vector<CalleeSavedInfo>::const_iterator I = CSI.begin(), E = CSI.end(); I != E; ++I) { @@ -393,8 +394,10 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF) const { if (STI.isTargetMachO()) { unsigned DwarfReg = MRI->getDwarfRegNum(Reg, true); unsigned Offset = MFI->getObjectOffset(FI); - MMI.addFrameInst( - MCCFIInstruction::createOffset(SPLabel, DwarfReg, Offset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createOffset(nullptr, DwarfReg, Offset)); + BuildMI(MBB, Pos, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); } break; } @@ -404,24 +407,17 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF) const { if (DPRCSSize > 0) { // Since vpush register list cannot have gaps, there may be multiple vpush // instructions in the prologue. - MCSymbol *SPLabel = NULL; do { MachineBasicBlock::iterator Push = DPRCSPush++; if (!HasFP) { - SPLabel = Context.CreateTempSymbol(); - BuildMI(MBB, DPRCSPush, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); CFAOffset -= sizeOfSPAdjustment(Push);; - MMI.addFrameInst( - MCCFIInstruction::createDefCfaOffset(SPLabel, CFAOffset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createDefCfaOffset(nullptr, CFAOffset)); + BuildMI(MBB, DPRCSPush, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); } } while (DPRCSPush->getOpcode() == ARM::VSTMDDB_UPD); - if (!SPLabel) { - SPLabel = Context.CreateTempSymbol(); - BuildMI(MBB, DPRCSPush, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); - } for (std::vector<CalleeSavedInfo>::const_iterator I = CSI.begin(), E = CSI.end(); I != E; ++I) { unsigned Reg = I->getReg(); @@ -430,20 +426,21 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF) const { (Reg < ARM::D8 || Reg >= ARM::D8 + AFI->getNumAlignedDPRCS2Regs())) { unsigned DwarfReg = MRI->getDwarfRegNum(Reg, true); unsigned Offset = MFI->getObjectOffset(FI); - MMI.addFrameInst(MCCFIInstruction::createOffset(SPLabel, DwarfReg, - Offset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createOffset(nullptr, DwarfReg, Offset)); + BuildMI(MBB, DPRCSPush, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); } } } if (NumBytes) { if (!HasFP) { - MCSymbol *SPLabel = Context.CreateTempSymbol(); - BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); CFAOffset -= NumBytes; - MMI.addFrameInst( - MCCFIInstruction::createDefCfaOffset(SPLabel, CFAOffset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createDefCfaOffset(nullptr, CFAOffset)); + BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); } } diff --git a/llvm/lib/Target/ARM/MLxExpansionPass.cpp b/llvm/lib/Target/ARM/MLxExpansionPass.cpp index fe59dc011e9..4e39105a5ba 100644 --- a/llvm/lib/Target/ARM/MLxExpansionPass.cpp +++ b/llvm/lib/Target/ARM/MLxExpansionPass.cpp @@ -335,7 +335,7 @@ bool MLxExpansion::ExpandFPMLxInstructions(MachineBasicBlock &MBB) { while (MII != E) { MachineInstr *MI = &*MII; - if (MI->isLabel() || MI->isImplicitDef() || MI->isCopy()) { + if (MI->isPosition() || MI->isImplicitDef() || MI->isCopy()) { ++MII; continue; } diff --git a/llvm/lib/Target/ARM/Thumb1FrameLowering.cpp b/llvm/lib/Target/ARM/Thumb1FrameLowering.cpp index 46ef889d0f2..2224652f222 100644 --- a/llvm/lib/Target/ARM/Thumb1FrameLowering.cpp +++ b/llvm/lib/Target/ARM/Thumb1FrameLowering.cpp @@ -114,24 +114,22 @@ void Thumb1FrameLowering::emitPrologue(MachineFunction &MF) const { if (ArgRegsSaveSize) { emitSPUpdate(MBB, MBBI, TII, dl, *RegInfo, -ArgRegsSaveSize, MachineInstr::FrameSetup); - MCSymbol *SPLabel = MMI.getContext().CreateTempSymbol(); - BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); CFAOffset -= ArgRegsSaveSize; - MMI.addFrameInst( - MCCFIInstruction::createDefCfaOffset(SPLabel, CFAOffset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createDefCfaOffset(nullptr, CFAOffset)); + BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); } if (!AFI->hasStackFrame()) { if (NumBytes - ArgRegsSaveSize != 0) { emitSPUpdate(MBB, MBBI, TII, dl, *RegInfo, -(NumBytes - ArgRegsSaveSize), MachineInstr::FrameSetup); - MCSymbol *SPLabel = MMI.getContext().CreateTempSymbol(); - BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); CFAOffset -= NumBytes - ArgRegsSaveSize; - MMI.addFrameInst( - MCCFIInstruction::createDefCfaOffset(SPLabel, CFAOffset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createDefCfaOffset(nullptr, CFAOffset)); + BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); } return; } @@ -190,12 +188,12 @@ void Thumb1FrameLowering::emitPrologue(MachineFunction &MF) const { NumBytes = 0; } - MCSymbol *SPLabel = MMI.getContext().CreateTempSymbol(); - BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::PROLOG_LABEL)).addSym(SPLabel); if (adjustedGPRCS1Size) { CFAOffset -= adjustedGPRCS1Size; - MMI.addFrameInst( - MCCFIInstruction::createDefCfaOffset(SPLabel, CFAOffset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createDefCfaOffset(nullptr, CFAOffset)); + BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); } for (std::vector<CalleeSavedInfo>::const_iterator I = CSI.begin(), E = CSI.end(); I != E; ++I) { @@ -219,9 +217,10 @@ void Thumb1FrameLowering::emitPrologue(MachineFunction &MF) const { case ARM::R6: case ARM::R7: case ARM::LR: - MMI.addFrameInst(MCCFIInstruction::createOffset(SPLabel, - MRI->getDwarfRegNum(Reg, true), - MFI->getObjectOffset(FI))); + unsigned CFIIndex = MMI.addFrameInst(MCCFIInstruction::createOffset( + nullptr, MRI->getDwarfRegNum(Reg, true), MFI->getObjectOffset(FI))); + BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); break; } } @@ -234,18 +233,19 @@ void Thumb1FrameLowering::emitPrologue(MachineFunction &MF) const { AddDefaultPred(BuildMI(MBB, MBBI, dl, TII.get(ARM::tADDrSPi), FramePtr) .addReg(ARM::SP).addImm(FramePtrOffsetInBlock / 4) .setMIFlags(MachineInstr::FrameSetup)); - MCSymbol *SPLabel = MMI.getContext().CreateTempSymbol(); - BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); if(FramePtrOffsetInBlock) { CFAOffset += FramePtrOffsetInBlock; - MMI.addFrameInst( - MCCFIInstruction::createDefCfa(SPLabel, - MRI->getDwarfRegNum(FramePtr, true), CFAOffset)); - } else - MMI.addFrameInst( - MCCFIInstruction::createDefCfaRegister(SPLabel, - MRI->getDwarfRegNum(FramePtr, true))); + unsigned CFIIndex = MMI.addFrameInst(MCCFIInstruction::createDefCfa( + nullptr, MRI->getDwarfRegNum(FramePtr, true), CFAOffset)); + BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); + } else { + unsigned CFIIndex = + MMI.addFrameInst(MCCFIInstruction::createDefCfaRegister( + nullptr, MRI->getDwarfRegNum(FramePtr, true))); + BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); + } if (NumBytes > 508) // If offset is > 508 then sp cannot be adjusted in a single instruction, // try restoring from fp instead. @@ -257,12 +257,11 @@ void Thumb1FrameLowering::emitPrologue(MachineFunction &MF) const { emitSPUpdate(MBB, MBBI, TII, dl, *RegInfo, -NumBytes, MachineInstr::FrameSetup); if (!HasFP) { - MCSymbol *SPLabel = MMI.getContext().CreateTempSymbol(); - BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::PROLOG_LABEL)) - .addSym(SPLabel); CFAOffset -= NumBytes; - MMI.addFrameInst( - MCCFIInstruction::createDefCfaOffset(SPLabel, CFAOffset)); + unsigned CFIIndex = MMI.addFrameInst( + MCCFIInstruction::createDefCfaOffset(nullptr, CFAOffset)); + BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); } } |

