[llvm-dev] VBROADCAST Implementation Issues (original) (raw)
hameeza ahmed via llvm-dev llvm-dev at lists.llvm.org
Sat Aug 5 10:50:43 PDT 2017
- Previous message: [llvm-dev] 3 stage ninja bootstrap on darwin?
- Next message: [llvm-dev] VBROADCAST Implementation Issues
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hello,
i have a c code which multiplies vector with constant something like this; float con=0.2; for (k = 0; k < N; k++) { for (i = 1; i <= N-2; i++) for (j = 1; j <= N-2; j++) b[i][j] = con * (a[i][j] + a[i-1][j] + a[i+1][j] + a[i][j-1] + a[i][j+1]);
now in LLVM IR I m getting;
%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>
but its assembly in x86 gives; .LCPI0_0: .long 1045220557 # float 0.200000003
vbroadcastss zmm1, dword ptr [rip + .LCPI0_0]
vmulps zmm2, zmm2, zmm1
how does it lowered the above IR code into vbroadcastss?
What would be the pattern here to match?
I want to implement similar broadcast for vector of 64 elements.
i tried the following code;
def BROADCAST_DWORD : I<0x60, MRMSrcMem, (outs VREGG:$dst), (ins immem:$src), "BROADCAST_DWORD\t{$src, dst∣dst|dst∣dst, $src}", [(set VREGG:$dst, (v64i32 (vbroadcast addr:$src)))], IIC_MOV_MEM>, TA;
Please help me. I am stuck at this point.
Thank You Regards -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170805/af6f09c5/attachment.html>
- Previous message: [llvm-dev] 3 stage ninja bootstrap on darwin?
- Next message: [llvm-dev] VBROADCAST Implementation Issues
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]