[PATCH] D51994: TableGen/ISel: Allow PatFrag predicate code to access captured operands
    Nicolai Hähnle via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Mon Oct  8 09:21:55 PDT 2018
    
    
  
nhaehnle added a comment.
In https://reviews.llvm.org/D51994#1242128, @hfinkel wrote:
> I'm somewhat confused by the motivation. Can you explain why the fact that the operands are commuted causes a problem. In https://reviews.llvm.org/D51995, you just seem to be looping over them anyway.
Sorry, I missed this. The issue is as follows; we're trying to match expressions like `(add (add A, B), C)`. Indeed, we want to loop over A, B, and C!
The issue is that TableGen automatically generates commuted patterns, so we might also match an expression like `(add A, (add B, C))`. The C++ code in the PatFrag has no way of knowing which of these versions we actually matched. So with only access to the top-level node, there's no way to loop over A, B, and C without effectively duplicating the pattern matching that was already done for that.
And even if we did duplicate the matching in C++, we wouldn't actually have a guarantee that what we're doing is correct! For example, if the top level node is actually `(add (add A, B), (add C, D))`, then there's no way of knowing which of the children of the top-level `add` we should consider as black boxes, so we don't know whether to loop over A, B, and (add C, D) or whether to loop over (add A, B), C, and D.
Repository:
  rL LLVM
https://reviews.llvm.org/D51994
    
    
More information about the llvm-commits
mailing list