<div dir="ltr">Hello,<div><br></div><div>i have a c code which multiplies vector with constant something like this;</div><div><div>float con=0.2;</div><div>   for (k = 0; k < N; k++) {</div><div>       for (i = 1; i <= N-2; i++)</div><div>           for (j = 1; j <= N-2; j++)</div><div>        <span style="white-space:pre">        </span> b[i][j] = con * (a[i][j] + a[i-1][j] + a[i+1][j] + a[i][j-1] + a[i][j+1]);</div></div><div><br></div><div><br></div><div>now in LLVM IR I m getting;</div><div><br></div><div> %22 = fmul <64 x float> %21, <float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000><br></div><div><br></div><div>but its assembly in x86 gives;</div><div><div>.LCPI0_0:</div><div><span style="white-space:pre">     </span>.long<span style="white-space:pre">        </span>1045220557              # float 0.200000003</div></div><div><br></div><div><span style="white-space:pre">       </span>vbroadcastss<span style="white-space:pre"> </span>zmm1, dword ptr [rip + .LCPI0_0]<br></div><div><br></div><div>vmulps<span style="white-space:pre">     </span>zmm2, zmm2, zmm1<br></div><div><br></div><div>how does it lowered the above IR code into vbroadcastss?</div><div><br></div><div>What would be the pattern here to match?</div><div><br></div><div>I want to implement similar broadcast for vector of 64 elements.</div><div><br></div><div>i tried the following code;</div><div><br></div><div><div>def BROADCAST_DWORD : I<0x60, MRMSrcMem, (outs VREGG:$dst), (ins immem:$src),</div><div>                    "BROADCAST_DWORD\t{$src, $dst|$dst, $src}",</div><div>                    [(set VREGG:$dst, (v64i32 (vbroadcast addr:$src)))],</div><div>                    IIC_MOV_MEM>, TA;</div></div><div><br></div><div>Please help me. I am stuck at this point.</div><div><br></div><div>Thank You</div><div>Regards</div><div><br></div></div>