Alex Susu via llvm-dev
2016-Oct-21 11:57 UTC
[llvm-dev] Accessing the associated LLVM IR Instruction for an SDNode used in instruction selection (back end)
Hello. I would like to access the LLVM IR Instruction from which an SDNode (from SelectionDAG) originates. For this I have modified: - llvm/lib/CodeGen/SelectionDAGISel.cpp, SelectionDAGISel::SelectBasicBlock(), namely I put SDB->clear() at the beginning of the method in order to avoid clearing NodeMap after creating the initial SelectionDAG from LLVM IR, since I want to access it after that; - llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h - added an accessor for the private NodeMap object relating LLVM IR Instructions to generated SDNodes: public: // Alex: added a getter for NodeMap DenseMap<const Value*, SDValue> &getNodeMap() { return NodeMap; } A small problem is that it seems that when I access the NodeMap in [Target]DAGToDAGISel::Select(SDNode *Node) method (part of subclass of SelectionDAGISel), the NodeMap contains quite a few SDNodes tagged as <<Deleted Node!>> (for the nodes that were already selected). But the current SDNode, given as parameter to Select() is valid and we can search for it in NodeMap in order to find the LLVM IR Instruction (llvm::Value, more exactly) that generated it. As a side question, is there a better modality to find the key associated to a value in a DenseMap object than to iterate through all of DenseMap's elements (I could not find anything better at http://llvm.org/docs/doxygen/html/classllvm_1_1DenseMapBase.html)? Could you please tell me if there is a better modality to retrieve the LLVM IR Instruction from which an SDNode originates? Thank you, Alex
Quentin Colombet via llvm-dev
2016-Oct-21 21:29 UTC
[llvm-dev] Accessing the associated LLVM IR Instruction for an SDNode used in instruction selection (back end)
Hi Alex, Out of curiosity, what is your use case for that? Generally speaking I would recommend against doing that. When the SDBuilder is done, I would expect the SDNodes to not query anything outside of the SD layer. We are not here now, though. Cheers, -Quentin> On Oct 21, 2016, at 4:57 AM, Alex Susu via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > Hello. > I would like to access the LLVM IR Instruction from which an SDNode (from SelectionDAG) originates. For this I have modified: > - llvm/lib/CodeGen/SelectionDAGISel.cpp, SelectionDAGISel::SelectBasicBlock(), namely I put SDB->clear() at the beginning of the method in order to avoid clearing NodeMap after creating the initial SelectionDAG from LLVM IR, since I want to access it after that; > - llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h - added an accessor for the private NodeMap object relating LLVM IR Instructions to generated SDNodes: > public: > // Alex: added a getter for NodeMap > DenseMap<const Value*, SDValue> &getNodeMap() { > return NodeMap; > } > > A small problem is that it seems that when I access the NodeMap in [Target]DAGToDAGISel::Select(SDNode *Node) method (part of subclass of SelectionDAGISel), the NodeMap contains quite a few SDNodes tagged as <<Deleted Node!>> (for the nodes that were already selected). > But the current SDNode, given as parameter to Select() is valid and we can search for it in NodeMap in order to find the LLVM IR Instruction (llvm::Value, more exactly) that generated it. > As a side question, is there a better modality to find the key associated to a value in a DenseMap object than to iterate through all of DenseMap's elements (I could not find anything better at http://llvm.org/docs/doxygen/html/classllvm_1_1DenseMapBase.html)? > > Could you please tell me if there is a better modality to retrieve the LLVM IR Instruction from which an SDNode originates? > > Thank you, > Alex > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Alex Susu via llvm-dev
2016-Oct-24 10:11 UTC
[llvm-dev] Accessing the associated LLVM IR Instruction for an SDNode used in instruction selection (back end)
Hello. Quentin, retrieving the LLVM IR instruction from which an SDNode originates is useful during the instruction selection phase. For example, I need to recover the LLVM IR variable which is used to fill an entire vector with the ISD::BUILD_VECTOR target-independent SDNode . From the recovered LLVM IR variable I can walk on the use-def-chains in order to get the most complete definition of this variable (in terms of the input program variables), which is something I can't do at the level of SelectionDAGs (because, for example, actual function arguments don't appear in the DAG). Best regards, Alex On 10/22/2016 12:29 AM, Quentin Colombet wrote:> Hi Alex, > > Out of curiosity, what is your use case for that? > > Generally speaking I would recommend against doing that. When the SDBuilder is done, I > would expect the SDNodes to not query anything outside of the SD layer. We are not here > now, though. > > Cheers, -Quentin >> On Oct 21, 2016, at 4:57 AM, Alex Susu via llvm-dev <llvm-dev at lists.llvm.org> wrote: >> >> Hello. I would like to access the LLVM IR Instruction from which an SDNode (from >> SelectionDAG) originates. For this I have modified: - >> llvm/lib/CodeGen/SelectionDAGISel.cpp, SelectionDAGISel::SelectBasicBlock(), namely I >> put SDB->clear() at the beginning of the method in order to avoid clearing NodeMap >> after creating the initial SelectionDAG from LLVM IR, since I want to access it after >> that; - llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h - added an accessor for >> the private NodeMap object relating LLVM IR Instructions to generated SDNodes: >> public: // Alex: added a getter for NodeMap DenseMap<const Value*, SDValue> >> &getNodeMap() { return NodeMap; } >> >> A small problem is that it seems that when I access the NodeMap in >> [Target]DAGToDAGISel::Select(SDNode *Node) method (part of subclass of >> SelectionDAGISel), the NodeMap contains quite a few SDNodes tagged as <<Deleted >> Node!>> (for the nodes that were already selected). But the current SDNode, given as >> parameter to Select() is valid and we can search for it in NodeMap in order to find >> the LLVM IR Instruction (llvm::Value, more exactly) that generated it. As a side >> question, is there a better modality to find the key associated to a value in a >> DenseMap object than to iterate through all of DenseMap's elements (I could not find >> anything better at >> http://llvm.org/docs/doxygen/html/classllvm_1_1DenseMapBase.html)? >> >> Could you please tell me if there is a better modality to retrieve the LLVM IR >> Instruction from which an SDNode originates? >> >> Thank you, Alex _______________________________________________ LLVM Developers >> mailing list llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > >
Reasonably Related Threads
- Accessing the associated LLVM IR Instruction for an SDNode used in instruction selection (back end)
- Tablegen pattern: How to emit a SDNode in an output pattern?
- SelectionDAGISel::Select's API considered harmful
- question: access IR class Instruction from DAG SDValue
- SelectionDAGISel::Select's API considered harmful