[LLVMdev] Tablegen question
isanbard at gmail.com
Wed Apr 15 11:32:52 PDT 2009
On Wed, Apr 15, 2009 at 11:15 AM, Villmow, Micah <Micah.Villmow at amd.com> wrote:
> I still think there is a bug somewhere, but not sure where yet.
> This is what is generated in intrinsic.gen:
> case Intrinsic::opencl_math_fdistance: //
> ResultTy = Type::FloatTy;
> This is the intrinsic definition:
> def int_opencl_math_fdistance_fast : Intrinsic<[llvm_float_ty],
> [llvm_anyfloat_ty, LLVMMatchType<0>]>;
> The problem comes when I try to use the intrinsic. It gives me the
> following error:
> GPRV2F32:f32:$src1 MACRO_DISTANCE_FAST_v2f32: (set GPRF32:f32:$dst,
> (intrinsic_w_chain:f32 84:iPTR, GPRV2F32:v2f32:$src0,
> TableGen.exe: In MACRO_DISTANCE_FAST_v2f32: Type inference contradiction
> found in node!
> I'm using the following test td file.
> This is generated with putting it in include and running the command
> Tablegen.exe -dag-isel -I. test.td
> The pattern in question is:
> ILFormat<(outs Dst:$dst), (ins Src:$src0, Src:$src1),
> ",($dst),($src0, $src1)",
> [(set Dst:$dst, (OpNode Src:$src0, Src:$src1))]
> As the intrinsic specifies, the two source register classes should be
> the same, however, Tablegen is somehow interpreting that it should be
> f32 instead of v2f32.
The intrinsic definition says that the second source's type should
match the return value's type, which it is. Can you come up with a
small testcase .td file that shows how LLVMMatchType<1> fails here?
More information about the llvm-dev