Guo, Xiaoyi
2013-Mar-27 03:00 UTC
[LLVMdev] Ordering not assigned to DAG Nodes create after DAG builder
Hi, It seems orderings are not assigned to DAG nodes created after the DAG builder, e.g., DAG nodes created during legalization. This causes instructions being scheduled in different order than source order for O0. This is my plan to fix it: Make a utility routine that recursively assign ordering to a chain of nodes, just like what SelectionDAGBuilder::AssignOrderingToNode() does. Then add call to this utility routine at each routine that creates new DAG nodes after DAG builder to transfer the original node's order to newly created node. If that routine creates a chain of nodes, then I only need to call the utility routine for the last of the chain. There will be a lot of places to change. So I want to get agreement on the fix before I go ahead and make the changes. Thanks, Xiaoyi -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130327/67fe172d/attachment.html>
Justin Holewinski
2013-Mar-27 15:53 UTC
[LLVMdev] Ordering not assigned to DAG Nodes create after DAG builder
Hi Xiaoyi, Do you still see this behavior after r177525? I recently fixed several places where ordering was not propagated, including during legalization. There are probably still cases that are missed, but I'd be interested in seeing a missed case. I'm guessing it's a legalization that expands to multiple new nodes. The AssignOrdering calls in the legalizer may need to be expanded to do the traversal you mention from SelectionDAGBuilder. On Tue, Mar 26, 2013 at 11:00 PM, Guo, Xiaoyi <Xiaoyi.Guo at amd.com> wrote:> Hi,**** > > ** ** > > It seems orderings are not assigned to DAG nodes created after the DAG > builder, e.g., DAG nodes created during legalization. This causes > instructions being scheduled in different order than source order for O0.* > *** > > ** ** > > This is my plan to fix it:**** > > Make a utility routine that recursively assign ordering to a chain of > nodes, just like what SelectionDAGBuilder::AssignOrderingToNode() does.*** > * > > Then add call to this utility routine at each routine that creates new DAG > nodes after DAG builder to transfer the original node’s order to newly > created node. If that routine creates a chain of nodes, then I only need to > call the utility routine for the last of the chain. There will be a lot of > places to change. So I want to get agreement on the fix before I go ahead > and make the changes.**** > > ** ** > > Thanks,**** > > Xiaoyi**** > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-- Thanks, Justin Holewinski -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130327/a2ce3cdc/attachment.html>
Guo, Xiaoyi
2013-Mar-28 02:26 UTC
[LLVMdev] Ordering not assigned to DAG Nodes create after DAG builder
Hi Justin, Our code is using llvm3.1. I didn't check the top of chunk. And I wasn't following the mailing list closely. So I wasn't aware of your fix. I talked to Andy today. To fix the problem one step further, I am going to make the change that he suggested in his earlier email to include the ordering as a field in the DAG node itself, and have the ordering setup when the node is constructed. Thanks, Xiaoyi From: Justin Holewinski [mailto:justin.holewinski at gmail.com] Sent: Wednesday, March 27, 2013 8:53 AM To: Guo, Xiaoyi Cc: llvmdev at cs.uiuc.edu Subject: Re: [LLVMdev] Ordering not assigned to DAG Nodes create after DAG builder Hi Xiaoyi, Do you still see this behavior after r177525? I recently fixed several places where ordering was not propagated, including during legalization. There are probably still cases that are missed, but I'd be interested in seeing a missed case. I'm guessing it's a legalization that expands to multiple new nodes. The AssignOrdering calls in the legalizer may need to be expanded to do the traversal you mention from SelectionDAGBuilder. On Tue, Mar 26, 2013 at 11:00 PM, Guo, Xiaoyi <Xiaoyi.Guo at amd.com<mailto:Xiaoyi.Guo at amd.com>> wrote: Hi, It seems orderings are not assigned to DAG nodes created after the DAG builder, e.g., DAG nodes created during legalization. This causes instructions being scheduled in different order than source order for O0. This is my plan to fix it: Make a utility routine that recursively assign ordering to a chain of nodes, just like what SelectionDAGBuilder::AssignOrderingToNode() does. Then add call to this utility routine at each routine that creates new DAG nodes after DAG builder to transfer the original node's order to newly created node. If that routine creates a chain of nodes, then I only need to call the utility routine for the last of the chain. There will be a lot of places to change. So I want to get agreement on the fix before I go ahead and make the changes. Thanks, Xiaoyi _______________________________________________ LLVM Developers mailing list LLVMdev at cs.uiuc.edu<mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev -- Thanks, Justin Holewinski -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130328/205ca337/attachment.html>
Maybe Matching Threads
- [LLVMdev] Ordering not assigned to DAG Nodes create after DAG builder
- [LLVMdev] [PATCH] Propagate DAG node ordering during legalization and instruction selection
- [LLVMdev] [PATCH] Propagate DAG node ordering during legalization and instruction selection
- [LLVMdev] [PATCH] Propagate DAG node ordering during legalization and instruction selection
- [LLVMdev] [PATCH] Propagate DAG node ordering during legalization and instruction selection