From 157efd84abf812c1689ba6a9ecb4da2b87dde756 Mon Sep 17 00:00:00 2001 From: Serguei Katkov Date: Tue, 12 Jan 2021 11:52:48 +0700 Subject: [PATCH] [Statepoint Lowering] Add an option to allow use gc values in regs for landing pad Default value is not changed, so it is NFC actually. The option allows to use gc values on registers in landing pads. Reviewers: reames, dantrushin Reviewed By: reames, dantrushin Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D94469 --- .../SelectionDAG/StatepointLowering.cpp | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp index 5638feaf1540..0172646c22ec 100644 --- a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp @@ -64,6 +64,10 @@ cl::opt UseRegistersForDeoptValues( "use-registers-for-deopt-values", cl::Hidden, cl::init(false), cl::desc("Allow using registers for non pointer deopt args")); +cl::opt UseRegistersForGCPointersInLandingPad( + "use-registers-for-gc-values-in-landing-pad", cl::Hidden, cl::init(false), + cl::desc("Allow using registers for gc pointer in landing pad")); + cl::opt MaxRegistersForGCPointers( "max-registers-for-gc-values", cl::Hidden, cl::init(0), cl::desc("Max number of VRegs allowed to pass GC pointer meta args in")); @@ -549,14 +553,15 @@ lowerStatepointMetaArgs(SmallVectorImpl &Ops, // Pointers used on exceptional path of invoke statepoint. // We cannot assing them to VRegs. SmallSet LPadPointers; - if (auto *StInvoke = dyn_cast_or_null(SI.StatepointInstr)) { - LandingPadInst *LPI = StInvoke->getLandingPadInst(); - for (auto *Relocate : SI.GCRelocates) - if (Relocate->getOperand(0) == LPI) { - LPadPointers.insert(Builder.getValue(Relocate->getBasePtr())); - LPadPointers.insert(Builder.getValue(Relocate->getDerivedPtr())); - } - } + if (!UseRegistersForGCPointersInLandingPad) + if (auto *StInvoke = dyn_cast_or_null(SI.StatepointInstr)) { + LandingPadInst *LPI = StInvoke->getLandingPadInst(); + for (auto *Relocate : SI.GCRelocates) + if (Relocate->getOperand(0) == LPI) { + LPadPointers.insert(Builder.getValue(Relocate->getBasePtr())); + LPadPointers.insert(Builder.getValue(Relocate->getDerivedPtr())); + } + } LLVM_DEBUG(dbgs() << "Deciding how to lower GC Pointers:\n");