[LLVMdev] variant generation question

Chris Lattner sabre at nondot.org
Tue Feb 13 13:18:11 PST 2007

On Tue, 13 Feb 2007, Scott Michel wrote:
> I'm not sure how much of a feature that is -- evidently, in my particular 
> case, enumerating all eight variants ends up generating the desired code. 
> Leaving llvm to its own devices doesn't generate the desired code. I would 
> have expected that the "(and $rA, $rC)" to match "(and $rC, $rA)", were they 
> inverted, but it doesn't get generated in my test code.

You haven't given me the full description for the instruction.  Are 
$rA/$rB/$rC all the same register class?  Please include the full 
instruction description and do the equivalent of:

$ cd lib/Target/X86
$ tblgen X86.td -I ../ -I ~/llvm/include/

to get the expanded definition of your instruction.  With that, maybe I'll 
have a more precise answer for you :)



> Generated patterns:
> (or (and $rA, $rC), (and $rB, (not $rC)))  # original
> (or (and $rA, $rC), (and (not $rC), $rB))
> (or (and $rB, (not $rC)), (and $rA, $rC))
> (or (and (not $rC), $rB), (and $rA, $rC))
> Missing patterns:
> (or (and $rC, $rA), (and $rB, (not $rC)))
> (or (and $rC, $rA), (and (not $rC), $rB))
> (or (and $rB, (not $rC)), (and $rC, $rA))
> (or (and (not $rC), $rB), (and $rC, $rA))
> -scooter



More information about the llvm-dev mailing list