diff options
author | Igor Laevsky <igmyrj@gmail.com> | 2015-03-05 14:11:21 +0000 |
---|---|---|
committer | Igor Laevsky <igmyrj@gmail.com> | 2015-03-05 14:11:21 +0000 |
commit | 1725997f142ba456ee374c7b87a2d07cfdc9f1a8 (patch) | |
tree | a80cb765247ee5e5aae23b357953173c58f15021 /llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h | |
parent | ed07a255da4e5131439cb465cee750c3dc9d13a6 (diff) | |
download | bcm5719-llvm-1725997f142ba456ee374c7b87a2d07cfdc9f1a8.tar.gz bcm5719-llvm-1725997f142ba456ee374c7b87a2d07cfdc9f1a8.zip |
Teach lowering to correctly handle invoke statepoint and gc results tied to them. Note that we still can not lower gc.relocates for invoke statepoints.
Also it extracts getCopyFromRegs helper function in SelectionDAGBuilder as we need to be able to customize type of the register exported from basic block during lowering of the gc.result.
llvm-svn: 231366
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h index 719af410245..faf227467da 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h @@ -606,6 +606,10 @@ public: void visit(unsigned Opcode, const User &I); + /// getCopyFromRegs - If there was virtual register allocated for the value V + /// emit CopyFromReg of the specified type Ty. Return empty SDValue() otherwise. + SDValue getCopyFromRegs(const Value *V, Type *Ty); + // resolveDanglingDebugInfo - if we saw an earlier dbg_value referring to V, // generate the debug data structures now that we've seen its definition. void resolveDanglingDebugInfo(const Value *V, SDValue Val); @@ -661,7 +665,9 @@ public: void UpdateSplitBlock(MachineBasicBlock *First, MachineBasicBlock *Last); // This function is responsible for the whole statepoint lowering process. - void LowerStatepoint(ImmutableStatepoint Statepoint); + // It uniformly handles invoke and call statepoints. + void LowerStatepoint(ImmutableStatepoint Statepoint, + MachineBasicBlock *LandingPad = nullptr); private: std::pair<SDValue, SDValue> lowerInvokable( TargetLowering::CallLoweringInfo &CLI, |