llvm.org GIT mirror llvm / 5e50885
[StackMaps] Allow the target to pre-process the live-out mask Some targets, PowerPC for example, have pseudo-registers (such as that used to represent the rounding mode), that don't have DWARF register numbers or a register class. These are used only for internal dependency tracking, and should not appear in the recorded live-outs. This adds a callback allowing the target to pre-process the live-out mask in order to remove these kinds of registers so that the StackMaps code does not complain about them and/or attempt to include them in the output. This will be used by the PowerPC target in a future commit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225805 91177308-0d34-0410-b5e6-96231b3b80d8 Hal Finkel 5 years ago
2 changed file(s) with 7 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
454454 /// and should be considered unavailable at all times, e.g. SP, RA. This is
455455 /// used by register scavenger to determine what registers are free.
456456 virtual BitVector getReservedRegs(const MachineFunction &MF) const = 0;
457
458 /// Prior to adding the live-out mask to a stackmap or patchpoint
459 /// instruction, provide the target the opportunity to adjust it (mainly to
460 /// remove pseudo-registers that should be ignored).
461 virtual void adjustStackMapLiveOutMask(uint32_t *Mask) const { }
457462
458463 /// getMatchingSuperReg - Return a super-register of the specified register
459464 /// Reg so its sub-register of index SubIdx is Reg.
122122 for (LivePhysRegs::const_iterator RI = LiveRegs.begin(), RE = LiveRegs.end();
123123 RI != RE; ++RI)
124124 Mask[*RI / 32] |= 1U << (*RI % 32);
125
126 TRI->adjustStackMapLiveOutMask(Mask);
125127 return Mask;
126128 }