[LLVMdev] Vector immediates in tablegen w/o build_vector?

Villmow, Micah Micah.Villmow at amd.com
Thu Dec 15 16:03:34 PST 2011

I have two patterns in tablegen that do look like the exact same thing:
Pat 1)
  def MOV_v4i16 : ILFormat<IL_OP_MOV, (outs GPRV4I16:$dst),
      (ins i16imm:$val),
      asm, [(set GPRV4I16:$dst, (build_vector (i16 imm:$val)))]>;
Pat 2)
def v4i16imm : Operand<v4i16>;
  def MOV_v4i16 : ILFormat<IL_OP_MOV, (outs GPRV4I16:$dst),
      (ins v4i16imm:$val),
      asm, [(set GPRV4I16:$dst, (v4i16 imm:$val))]>;

The second pattern seems to build correctly, but doesn't match because of the build_vector opcode.

So, what I am trying to figure out, how do I get (build_vector (i16 imm:$val)) to be convert to v4i16 immediate directly?

I've tried pattern fragments, but I can't seem to get that to work correctly.

I tried this:
def v4i16imm : Operand<v4i16>;
def bvimm : PatFrag<(ops node:$val), (build_vector node:$val)>;
def _v4i16 : ILFormat<IL_OP_MOV, (outs GPRV4I16:$dst),
      (ins v4i16imm:$val),
      asm, [(set GPRV4I16:$dst, (v4i16 (bvimm imm:$val)))]>;

Any idea? Basically I am trying to get vector immediates to work in tablegen patterns.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111216/ef1de383/attachment.html>

More information about the llvm-dev mailing list