[PATCH] D25902: [AVX-512] Fix the operand order for all calls to __builtin_ia32_vfmaddss3_mask.

Craig Topper via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 24 12:20:19 PDT 2016


craig.topper added inline comments.


================
Comment at: lib/Headers/avx512fintrin.h:8394
           _MM_FROUND_CUR_DIRECTION);
 }
 
----------------
delena wrote:
> Using vfmaddss3_mask is wrong in this case.
> It will propagate -B to lower bits if mask==0.
I dont' understand this. The passthru should be from the first argument. This call should do

if (mask)
   result = _W * _A - _B
else
   result = _W;


================
Comment at: lib/Headers/avx512fintrin.h:8453
 {
  return (__m128) __builtin_ia32_vfmaddss3_maskz (-(__v4sf) __A,
           (__v4sf) __B,
----------------
delena wrote:
> This one is, probably, also wrong, because we should copy the upper bits of __A as is.
> 
> IF k[0]
> 	dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
> ELSE
> 	dst[31:0] := c[31:0]
> FI
> dst[127:32] := a[127:32]
> dst[MAX:128] := 0
Agree this is also wrong. I was going to try to fix one intrinsic at a time. We have some problems with __builtin_ia32_vfmaddss3_mask3 usages as well.


https://reviews.llvm.org/D25902





More information about the cfe-commits mailing list