diff options
author | Eric Christopher <echristo@gmail.com> | 2019-12-19 12:52:06 -0800 |
---|---|---|
committer | Eric Christopher <echristo@gmail.com> | 2019-12-19 12:52:40 -0800 |
commit | add710eb23d5de385dff99d27e88f1660814b62b (patch) | |
tree | d7a4f558ee80efe9e1a880086bab2739d11d778b | |
parent | 3346cecd4c0c960377b441606b6382a684daf061 (diff) | |
download | bcm5719-llvm-add710eb23d5de385dff99d27e88f1660814b62b.tar.gz bcm5719-llvm-add710eb23d5de385dff99d27e88f1660814b62b.zip |
Temporarily Revert "[StackMaps] Be explicit about label formation [NFC]"
as it broke the aarch64 build.
This reverts commit bc7595d934b958ab481288d7b8e768fe5310be8f.
-rw-r--r-- | llvm/include/llvm/CodeGen/StackMaps.h | 24 | ||||
-rw-r--r-- | llvm/lib/CodeGen/StackMaps.cpp | 22 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86MCInstLower.cpp | 17 |
3 files changed, 23 insertions, 40 deletions
diff --git a/llvm/include/llvm/CodeGen/StackMaps.h b/llvm/include/llvm/CodeGen/StackMaps.h index 63547e5b7c3..d7d88de6f68 100644 --- a/llvm/include/llvm/CodeGen/StackMaps.h +++ b/llvm/include/llvm/CodeGen/StackMaps.h @@ -266,16 +266,13 @@ public: /// Generate a stackmap record for a stackmap instruction. /// /// MI must be a raw STACKMAP, not a PATCHPOINT. - void recordStackMap(const MCSymbol &L, - const MachineInstr &MI); + void recordStackMap(const MachineInstr &MI); /// Generate a stackmap record for a patchpoint instruction. - void recordPatchPoint(const MCSymbol &L, - const MachineInstr &MI); + void recordPatchPoint(const MachineInstr &MI); /// Generate a stackmap record for a statepoint instruction. - void recordStatepoint(const MCSymbol &L, - const MachineInstr &MI); + void recordStatepoint(const MachineInstr &MI); /// If there is any stack map data, create a stack map section and serialize /// the map info into it. This clears the stack map data structures @@ -309,15 +306,12 @@ private: /// registers that need to be recorded in the stackmap. LiveOutVec parseRegisterLiveOutMask(const uint32_t *Mask) const; - /// Record the locations of the operands of the provided instruction in a - /// record keyed by the provided label. For instructions w/AnyReg calling - /// convention the return register is also recorded if requested. For - /// STACKMAP, and PATCHPOINT the label is expected to immediately *preceed* - /// lowering of the MI to MCInsts. For STATEPOINT, it expected to - /// immediately *follow*. It's not clear this difference was intentional, - /// but it exists today. - void recordStackMapOpers(const MCSymbol &L, - const MachineInstr &MI, uint64_t ID, + /// This should be called by the MC lowering code _immediately_ before + /// lowering the MI to an MCInst. It records where the operands for the + /// instruction are stored, and outputs a label to record the offset of + /// the call from the start of the text section. In special cases (e.g. AnyReg + /// calling convention) the return register is also recorded if requested. + void recordStackMapOpers(const MachineInstr &MI, uint64_t ID, MachineInstr::const_mop_iterator MOI, MachineInstr::const_mop_iterator MOE, bool recordResult = false); diff --git a/llvm/lib/CodeGen/StackMaps.cpp b/llvm/lib/CodeGen/StackMaps.cpp index e16587c44a5..23a3cb7cc7f 100644 --- a/llvm/lib/CodeGen/StackMaps.cpp +++ b/llvm/lib/CodeGen/StackMaps.cpp @@ -294,13 +294,14 @@ StackMaps::parseRegisterLiveOutMask(const uint32_t *Mask) const { return LiveOuts; } -void StackMaps::recordStackMapOpers(const MCSymbol &MILabel, - const MachineInstr &MI, uint64_t ID, +void StackMaps::recordStackMapOpers(const MachineInstr &MI, uint64_t ID, MachineInstr::const_mop_iterator MOI, MachineInstr::const_mop_iterator MOE, bool recordResult) { MCContext &OutContext = AP.OutStreamer->getContext(); - + MCSymbol *MILabel = OutContext.createTempSymbol(); + AP.OutStreamer->EmitLabel(MILabel); + LocationVec Locations; LiveOutVec LiveOuts; @@ -339,7 +340,7 @@ void StackMaps::recordStackMapOpers(const MCSymbol &MILabel, // Create an expression to calculate the offset of the callsite from function // entry. const MCExpr *CSOffsetExpr = MCBinaryExpr::createSub( - MCSymbolRefExpr::create(&MILabel, OutContext), + MCSymbolRefExpr::create(MILabel, OutContext), MCSymbolRefExpr::create(AP.CurrentFnSymForSize, OutContext), OutContext); CSInfos.emplace_back(CSOffsetExpr, ID, std::move(Locations), @@ -359,23 +360,22 @@ void StackMaps::recordStackMapOpers(const MCSymbol &MILabel, FnInfos.insert(std::make_pair(AP.CurrentFnSym, FunctionInfo(FrameSize))); } -void StackMaps::recordStackMap(const MCSymbol &L, const MachineInstr &MI) { +void StackMaps::recordStackMap(const MachineInstr &MI) { assert(MI.getOpcode() == TargetOpcode::STACKMAP && "expected stackmap"); StackMapOpers opers(&MI); const int64_t ID = MI.getOperand(PatchPointOpers::IDPos).getImm(); - recordStackMapOpers(L, MI, ID, std::next(MI.operands_begin(), - opers.getVarIdx()), + recordStackMapOpers(MI, ID, std::next(MI.operands_begin(), opers.getVarIdx()), MI.operands_end()); } -void StackMaps::recordPatchPoint(const MCSymbol &L, const MachineInstr &MI) { +void StackMaps::recordPatchPoint(const MachineInstr &MI) { assert(MI.getOpcode() == TargetOpcode::PATCHPOINT && "expected patchpoint"); PatchPointOpers opers(&MI); const int64_t ID = opers.getID(); auto MOI = std::next(MI.operands_begin(), opers.getStackMapStartIdx()); - recordStackMapOpers(L, MI, ID, MOI, MI.operands_end(), + recordStackMapOpers(MI, ID, MOI, MI.operands_end(), opers.isAnyReg() && opers.hasDef()); #ifndef NDEBUG @@ -390,14 +390,14 @@ void StackMaps::recordPatchPoint(const MCSymbol &L, const MachineInstr &MI) { #endif } -void StackMaps::recordStatepoint(const MCSymbol &L, const MachineInstr &MI) { +void StackMaps::recordStatepoint(const MachineInstr &MI) { assert(MI.getOpcode() == TargetOpcode::STATEPOINT && "expected statepoint"); StatepointOpers opers(&MI); // Record all the deopt and gc operands (they're contiguous and run from the // initial index to the end of the operand list) const unsigned StartIdx = opers.getVarIdx(); - recordStackMapOpers(L, MI, opers.getID(), MI.operands_begin() + StartIdx, + recordStackMapOpers(MI, opers.getID(), MI.operands_begin() + StartIdx, MI.operands_end(), false); } diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp index 91001a3c4c6..4876df50766 100644 --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/lib/Target/X86/X86MCInstLower.cpp @@ -1194,10 +1194,7 @@ void X86AsmPrinter::LowerSTATEPOINT(const MachineInstr &MI, // Record our statepoint node in the same section used by STACKMAP // and PATCHPOINT - auto &Ctx = OutStreamer->getContext(); - MCSymbol *MILabel = Ctx.createTempSymbol(); - OutStreamer->EmitLabel(MILabel); - SM.recordStatepoint(*MILabel, MI); + SM.recordStatepoint(MI); } void X86AsmPrinter::LowerFAULTING_OP(const MachineInstr &FaultingMI, @@ -1289,12 +1286,7 @@ void X86AsmPrinter::LowerPATCHABLE_OP(const MachineInstr &MI, // <id>, <shadowBytes>, ... void X86AsmPrinter::LowerSTACKMAP(const MachineInstr &MI) { SMShadowTracker.emitShadowPadding(*OutStreamer, getSubtargetInfo()); - - auto &Ctx = OutStreamer->getContext(); - MCSymbol *MILabel = Ctx.createTempSymbol(); - OutStreamer->EmitLabel(MILabel); - - SM.recordStackMap(*MILabel, MI); + SM.recordStackMap(MI); unsigned NumShadowBytes = MI.getOperand(1).getImm(); SMShadowTracker.reset(NumShadowBytes); } @@ -1307,10 +1299,7 @@ void X86AsmPrinter::LowerPATCHPOINT(const MachineInstr &MI, SMShadowTracker.emitShadowPadding(*OutStreamer, getSubtargetInfo()); - auto &Ctx = OutStreamer->getContext(); - MCSymbol *MILabel = Ctx.createTempSymbol(); - OutStreamer->EmitLabel(MILabel); - SM.recordPatchPoint(*MILabel, MI); + SM.recordPatchPoint(MI); PatchPointOpers opers(&MI); unsigned ScratchIdx = opers.getNextScratchIdx(); |