aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/StackMaps.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/CodeGen/StackMaps.cpp')
-rw-r--r--llvm/lib/CodeGen/StackMaps.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/StackMaps.cpp b/llvm/lib/CodeGen/StackMaps.cpp
index f9391d5..e5d8d772 100644
--- a/llvm/lib/CodeGen/StackMaps.cpp
+++ b/llvm/lib/CodeGen/StackMaps.cpp
@@ -146,6 +146,23 @@ unsigned StatepointOpers::getGCPointerMap(
return GCMapSize;
}
+bool StatepointOpers::isFoldableReg(Register Reg) const {
+ unsigned FoldableAreaStart = getVarIdx();
+ for (const MachineOperand &MO : MI->uses()) {
+ if (MI->getOperandNo(&MO) >= FoldableAreaStart)
+ break;
+ if (MO.isReg() && MO.getReg() == Reg)
+ return false;
+ }
+ return true;
+}
+
+bool StatepointOpers::isFoldableReg(const MachineInstr *MI, Register Reg) {
+ if (MI->getOpcode() != TargetOpcode::STATEPOINT)
+ return false;
+ return StatepointOpers(MI).isFoldableReg(Reg);
+}
+
StackMaps::StackMaps(AsmPrinter &AP) : AP(AP) {
if (StackMapVersion != 3)
llvm_unreachable("Unsupported stackmap version!");