mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
Refactor a lot of patchpoint/stackmap related code to simplify and make it
target independent. Most of the x86 specific stackmap/patchpoint handling was necessitated by the use of the native address-mode format for frame index operands. PEI has now been modified to treat stackmap/patchpoint similarly to DEBUG_INFO, allowing us to use a simple, platform independent register/offset pair for frame indexes on stackmap/patchpoints. Notes: - Folding is now platform independent and automatically supported. - Emiting patchpoints with direct memory references now just involves calling the TargetLoweringBase::emitPatchPoint utility method from the target's XXXTargetLowering::EmitInstrWithCustomInserter method. (See X86TargetLowering for an example). - No more ugly platform-specific operand parsers. This patch shouldn't change the generated output for X86. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195944 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -92,19 +92,12 @@ public:
|
||||
: LocType(LocType), Size(Size), Reg(Reg), Offset(Offset) {}
|
||||
};
|
||||
|
||||
// Typedef a function pointer for functions that parse sequences of operands
|
||||
// and return a Location, plus a new "next" operand iterator.
|
||||
typedef std::pair<Location, MachineInstr::const_mop_iterator>
|
||||
(*OperandParser)(MachineInstr::const_mop_iterator,
|
||||
MachineInstr::const_mop_iterator, const TargetMachine&);
|
||||
|
||||
// OpTypes are used to encode information about the following logical
|
||||
// operand (which may consist of several MachineOperands) for the
|
||||
// OpParser.
|
||||
typedef enum { DirectMemRefOp, IndirectMemRefOp, ConstantOp } OpType;
|
||||
|
||||
StackMaps(AsmPrinter &AP, OperandParser OpParser)
|
||||
: AP(AP), OpParser(OpParser) {}
|
||||
StackMaps(AsmPrinter &AP) : AP(AP) {}
|
||||
|
||||
/// \brief Generate a stackmap record for a stackmap instruction.
|
||||
///
|
||||
@@ -155,10 +148,15 @@ private:
|
||||
};
|
||||
|
||||
AsmPrinter &AP;
|
||||
OperandParser OpParser;
|
||||
CallsiteInfoList CSInfos;
|
||||
ConstantPool ConstPool;
|
||||
|
||||
/// Parse
|
||||
std::pair<Location, MachineInstr::const_mop_iterator>
|
||||
parseOperand(MachineInstr::const_mop_iterator MOI,
|
||||
MachineInstr::const_mop_iterator MOE);
|
||||
|
||||
|
||||
/// 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
|
||||
|
Reference in New Issue
Block a user