[LLVMdev] ComplexPattern in child ISel nodes

Christopher Lamb christopher.lamb at gmail.com
Sun Dec 30 21:04:53 PST 2007

Currently tablegen emits a rather surprising match code for the  
following case:

Suppose we have a pattern that uses a ComplexPattern to match an  
operand. This pattern then appears as a child pattern in a different  
Pattern 1: (N1 ComplexPattern:OP)
Pattern 0: (N0 (N1 ComplexPattern:OP))

The match code for ComplexPattern is passed in N1 in Pattern 1 and N0  
in Pattern 0. This means that ComplexPattern is always passed in the  
root of the DAG it's embedded in, rather than the root of the DAG to  
which it is directly attached. I would expect that N1 would be passed  
into ComplexPattern regardless of the larger DAG in which it's embedded.

Was this intended behavior, a bug, or just the way it was done?

The attached patch fundamentally changes the semantics of  
ComplexPatterns to always be passed the DAG node to which the  
ComplexPattern is an operand. If the current behavior is as designed,  
or needed for backwards compatibility I'll try to add an attribute to  
complex patterns to make this behavior optional.

Christopher Lamb

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20071230/aaf15964/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ComplexPatternChild.patch
Type: application/octet-stream
Size: 1833 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20071230/aaf15964/attachment.obj>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20071230/aaf15964/attachment-0001.html>

More information about the llvm-dev mailing list