[LLVMdev] Instruction Constraints Question

dag at cray.com dag at cray.com
Wed Jan 23 13:07:48 PST 2013


We've discovered a problem in the AVX2 gather patterns X86InstrSSE.td.

According to the AVX2 manual, no two of the destination register, vector
index register and mask register can be the same.  The patterns in
X86InstrSSE.td are missing this constraint and it's possible to generate
an illegal instruction.

It doesn't look like TableGen supports Constraints beyond EARLY_CLOBBER
and TIED_TO.  We would need to add a constraint such as "$dst != $src1,
$dst != $mask, $src1 != $mask" to the current patterns to enforce the
rules.

Is there another mechanism to suport a constraint like this or is
hacking TableGen the best way to do it?  If the latter, does anyone have
a sense of how difficult this would be to implement?

                       -David



More information about the llvm-dev mailing list