mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 21:24:00 +00:00
[Stackmap] Liveness Analysis Pass
This optional register liveness analysis pass can be enabled with either -enable-stackmap-liveness, -enable-patchpoint-liveness, or both. The pass traverses each basic block in a machine function. For each basic block the instructions are processed in reversed order and if a patchpoint or stackmap instruction is encountered the current live-out register set is encoded as a register mask and attached to the instruction. Later on during stackmap generation the live-out register mask is processed and also emitted as part of the stackmap. This information is optional and intended for optimization purposes only. This will enable a client of the stackmap to reason about the registers it can use and which registers need to be preserved. Reviewed by Andy git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197317 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -199,7 +199,8 @@ bool MachineOperand::isIdenticalTo(const MachineOperand &Other) const {
|
||||
case MachineOperand::MO_BlockAddress:
|
||||
return getBlockAddress() == Other.getBlockAddress() &&
|
||||
getOffset() == Other.getOffset();
|
||||
case MO_RegisterMask:
|
||||
case MachineOperand::MO_RegisterMask:
|
||||
case MachineOperand::MO_RegisterLiveOut:
|
||||
return getRegMask() == Other.getRegMask();
|
||||
case MachineOperand::MO_MCSymbol:
|
||||
return getMCSymbol() == Other.getMCSymbol();
|
||||
@ -241,6 +242,7 @@ hash_code llvm::hash_value(const MachineOperand &MO) {
|
||||
return hash_combine(MO.getType(), MO.getTargetFlags(),
|
||||
MO.getBlockAddress(), MO.getOffset());
|
||||
case MachineOperand::MO_RegisterMask:
|
||||
case MachineOperand::MO_RegisterLiveOut:
|
||||
return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getRegMask());
|
||||
case MachineOperand::MO_Metadata:
|
||||
return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getMetadata());
|
||||
@ -368,6 +370,9 @@ void MachineOperand::print(raw_ostream &OS, const TargetMachine *TM) const {
|
||||
case MachineOperand::MO_RegisterMask:
|
||||
OS << "<regmask>";
|
||||
break;
|
||||
case MachineOperand::MO_RegisterLiveOut:
|
||||
OS << "<regliveout>";
|
||||
break;
|
||||
case MachineOperand::MO_Metadata:
|
||||
OS << '<';
|
||||
WriteAsOperand(OS, getMetadata(), /*PrintType=*/false);
|
||||
|
Reference in New Issue
Block a user