LLVM ERROR: Cannot select: t29: v32f64 = X86ISD::VBROADCAST t9

Hello,

i am getting following error;

LLVM ERROR: Cannot select: t29: v32f64 = X86ISD::VBROADCAST t9
t9: f64,ch = load<LD8%10> t0, t6, undef:i64
t6: i64 = add FrameIndex:i64<1>, t5
t1: i64 = FrameIndex<1>
t5: i64 = shl t3, Constant:i8<3>
t3: i64,ch = CopyFromReg t0, Register:i64 %vreg2
t2: i64 = Register %vreg2
t28: i8 = Constant<3>
t8: i64 = undef
In function: main

although i have defined broadcast for v32f64 as follows:

def P_256B_FBROADCASTD : I<0x66, MRMSrcMem, (outs VRP_2048:$dst), (ins i2048mem:$src),
“P_256B_FBROADCASTD\t{$src, $dst|$dst, $src}”,
[(set VRP_2048:$dst, (v32f64 (X86VBroadcast (loadf64 addr:$src))))],
IIC_MOV_MEM>;

what is the reason for this?
Please help.

In general, the output of "-debug-only=isel" is helpful for figuring out why a pattern isn't matching. It outputs every step of the instruction selection state machine; the numbers correspond to the comments in lib/Target/X86/X86GenDAGISel.inc (a generated file in your build directory).

It's hard to say why your pattern in particular isn't working the way you want it to without more information.

-Eli