Re: [Mesa-dev] [PATCH 05/15] ac: revert new LLVM 7.0 behavior for fdiv

2018-10-29 Thread Marek Olšák
Fixed in master.

Marek

On Mon, Oct 29, 2018 at 6:50 AM Connor Abbott  wrote:

> ctx->f32_1 probably needs to be replaced by the appropriately-sized
> float, like LLVMConstReal(1., ...)
> On Mon, Oct 29, 2018 at 11:45 AM Timothy Arceri 
> wrote:
> >
> > Hi Marek,
> >
> > It's late and I haven't dug into this any further but this patch causes
> > a whole bunch of f64 piglit tests to fail for the radeonsi nir backend.
> >
> > e.g.
> >
> > ./bin/shader_runner
> >
> generated_tests/spec/glsl-4.00/execution/built-in-functions/fs-inverse-dmat2.shader_test
> > -auto -fbo
> >
> >
> > LLVM ERROR: Cannot select: 0x7fbc48075aa8: f64 = bitcast 0x7fbc48077730
> >0x7fbc48077730: f32 = RCP 0x7fbc4806e788
> >  0x7fbc4806e788: f64 = fadd nsz 0x7fbc480757d0, 0x7fbc48075a40
> >0x7fbc480757d0: f64 = fmul nsz 0x7fbc4806f0e0, 0x7fbc4806f420
> >  0x7fbc4806f0e0: f64 = bitcast 0x7fbc4806f078
> >
> > On 30/8/18 6:13 am, Marek Olšák wrote:
> > > From: Marek Olšák 
> > >
> > > Cc: 18.1 18.2 
> > > ---
> > >   src/amd/common/ac_llvm_build.c | 9 -
> > >   1 file changed, 8 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/src/amd/common/ac_llvm_build.c
> b/src/amd/common/ac_llvm_build.c
> > > index c741a1ab62d..629cd2a7527 100644
> > > --- a/src/amd/common/ac_llvm_build.c
> > > +++ b/src/amd/common/ac_llvm_build.c
> > > @@ -554,21 +554,28 @@ LLVMValueRef ac_build_expand_to_vec4(struct
> ac_llvm_context *ctx,
> > >   chan[num_channels++] = LLVMGetUndef(elemtype);
> > >
> > >   return ac_build_gather_values(ctx, chan, 4);
> > >   }
> > >
> > >   LLVMValueRef
> > >   ac_build_fdiv(struct ac_llvm_context *ctx,
> > > LLVMValueRef num,
> > > LLVMValueRef den)
> > >   {
> > > - LLVMValueRef ret = LLVMBuildFDiv(ctx->builder, num, den, "");
> > > + /* If we do (num / den), LLVM >= 7.0 does:
> > > +  *return num * v_rcp_f32(den * (fabs(den) > 0x1.0p+96f ?
> 0x1.0p-32f : 1.0f));
> > > +  *
> > > +  * If we do (num * (1 / den)), LLVM does:
> > > +  *return num * v_rcp_f32(den);
> > > +  */
> > > + LLVMValueRef rcp = LLVMBuildFDiv(ctx->builder, ctx->f32_1, den,
> "");
> > > + LLVMValueRef ret = LLVMBuildFMul(ctx->builder, num, rcp, "");
> > >
> > >   /* Use v_rcp_f32 instead of precise division. */
> > >   if (!LLVMIsConstant(ret))
> > >   LLVMSetMetadata(ret, ctx->fpmath_md_kind,
> ctx->fpmath_md_2p5_ulp);
> > >   return ret;
> > >   }
> > >
> > >   /* Coordinates for cube map selection. sc, tc, and ma are as in
> Table 8.27
> > >* of the OpenGL 4.5 (Compatibility Profile) specification, except
> ma is
> > >* already multiplied by two. id is the cube face number.
> > >
> > ___
> > mesa-dev mailing list
> > mesa-dev@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 05/15] ac: revert new LLVM 7.0 behavior for fdiv

2018-10-29 Thread Connor Abbott
ctx->f32_1 probably needs to be replaced by the appropriately-sized
float, like LLVMConstReal(1., ...)
On Mon, Oct 29, 2018 at 11:45 AM Timothy Arceri  wrote:
>
> Hi Marek,
>
> It's late and I haven't dug into this any further but this patch causes
> a whole bunch of f64 piglit tests to fail for the radeonsi nir backend.
>
> e.g.
>
> ./bin/shader_runner
> generated_tests/spec/glsl-4.00/execution/built-in-functions/fs-inverse-dmat2.shader_test
> -auto -fbo
>
>
> LLVM ERROR: Cannot select: 0x7fbc48075aa8: f64 = bitcast 0x7fbc48077730
>0x7fbc48077730: f32 = RCP 0x7fbc4806e788
>  0x7fbc4806e788: f64 = fadd nsz 0x7fbc480757d0, 0x7fbc48075a40
>0x7fbc480757d0: f64 = fmul nsz 0x7fbc4806f0e0, 0x7fbc4806f420
>  0x7fbc4806f0e0: f64 = bitcast 0x7fbc4806f078
>
> On 30/8/18 6:13 am, Marek Olšák wrote:
> > From: Marek Olšák 
> >
> > Cc: 18.1 18.2 
> > ---
> >   src/amd/common/ac_llvm_build.c | 9 -
> >   1 file changed, 8 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
> > index c741a1ab62d..629cd2a7527 100644
> > --- a/src/amd/common/ac_llvm_build.c
> > +++ b/src/amd/common/ac_llvm_build.c
> > @@ -554,21 +554,28 @@ LLVMValueRef ac_build_expand_to_vec4(struct 
> > ac_llvm_context *ctx,
> >   chan[num_channels++] = LLVMGetUndef(elemtype);
> >
> >   return ac_build_gather_values(ctx, chan, 4);
> >   }
> >
> >   LLVMValueRef
> >   ac_build_fdiv(struct ac_llvm_context *ctx,
> > LLVMValueRef num,
> > LLVMValueRef den)
> >   {
> > - LLVMValueRef ret = LLVMBuildFDiv(ctx->builder, num, den, "");
> > + /* If we do (num / den), LLVM >= 7.0 does:
> > +  *return num * v_rcp_f32(den * (fabs(den) > 0x1.0p+96f ? 
> > 0x1.0p-32f : 1.0f));
> > +  *
> > +  * If we do (num * (1 / den)), LLVM does:
> > +  *return num * v_rcp_f32(den);
> > +  */
> > + LLVMValueRef rcp = LLVMBuildFDiv(ctx->builder, ctx->f32_1, den, "");
> > + LLVMValueRef ret = LLVMBuildFMul(ctx->builder, num, rcp, "");
> >
> >   /* Use v_rcp_f32 instead of precise division. */
> >   if (!LLVMIsConstant(ret))
> >   LLVMSetMetadata(ret, ctx->fpmath_md_kind, 
> > ctx->fpmath_md_2p5_ulp);
> >   return ret;
> >   }
> >
> >   /* Coordinates for cube map selection. sc, tc, and ma are as in Table 8.27
> >* of the OpenGL 4.5 (Compatibility Profile) specification, except ma is
> >* already multiplied by two. id is the cube face number.
> >
> ___
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 05/15] ac: revert new LLVM 7.0 behavior for fdiv

2018-10-29 Thread Timothy Arceri

Hi Marek,

It's late and I haven't dug into this any further but this patch causes 
a whole bunch of f64 piglit tests to fail for the radeonsi nir backend.


e.g.

./bin/shader_runner 
generated_tests/spec/glsl-4.00/execution/built-in-functions/fs-inverse-dmat2.shader_test 
-auto -fbo



LLVM ERROR: Cannot select: 0x7fbc48075aa8: f64 = bitcast 0x7fbc48077730
  0x7fbc48077730: f32 = RCP 0x7fbc4806e788
0x7fbc4806e788: f64 = fadd nsz 0x7fbc480757d0, 0x7fbc48075a40
  0x7fbc480757d0: f64 = fmul nsz 0x7fbc4806f0e0, 0x7fbc4806f420
0x7fbc4806f0e0: f64 = bitcast 0x7fbc4806f078

On 30/8/18 6:13 am, Marek Olšák wrote:

From: Marek Olšák 

Cc: 18.1 18.2 
---
  src/amd/common/ac_llvm_build.c | 9 -
  1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index c741a1ab62d..629cd2a7527 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -554,21 +554,28 @@ LLVMValueRef ac_build_expand_to_vec4(struct 
ac_llvm_context *ctx,
chan[num_channels++] = LLVMGetUndef(elemtype);
  
  	return ac_build_gather_values(ctx, chan, 4);

  }
  
  LLVMValueRef

  ac_build_fdiv(struct ac_llvm_context *ctx,
  LLVMValueRef num,
  LLVMValueRef den)
  {
-   LLVMValueRef ret = LLVMBuildFDiv(ctx->builder, num, den, "");
+   /* If we do (num / den), LLVM >= 7.0 does:
+*return num * v_rcp_f32(den * (fabs(den) > 0x1.0p+96f ? 0x1.0p-32f 
: 1.0f));
+*
+* If we do (num * (1 / den)), LLVM does:
+*return num * v_rcp_f32(den);
+*/
+   LLVMValueRef rcp = LLVMBuildFDiv(ctx->builder, ctx->f32_1, den, "");
+   LLVMValueRef ret = LLVMBuildFMul(ctx->builder, num, rcp, "");
  
  	/* Use v_rcp_f32 instead of precise division. */

if (!LLVMIsConstant(ret))
LLVMSetMetadata(ret, ctx->fpmath_md_kind, 
ctx->fpmath_md_2p5_ulp);
return ret;
  }
  
  /* Coordinates for cube map selection. sc, tc, and ma are as in Table 8.27

   * of the OpenGL 4.5 (Compatibility Profile) specification, except ma is
   * already multiplied by two. id is the cube face number.


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 05/15] ac: revert new LLVM 7.0 behavior for fdiv

2018-08-29 Thread Marek Olšák
From: Marek Olšák 

Cc: 18.1 18.2 
---
 src/amd/common/ac_llvm_build.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index c741a1ab62d..629cd2a7527 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -554,21 +554,28 @@ LLVMValueRef ac_build_expand_to_vec4(struct 
ac_llvm_context *ctx,
chan[num_channels++] = LLVMGetUndef(elemtype);
 
return ac_build_gather_values(ctx, chan, 4);
 }
 
 LLVMValueRef
 ac_build_fdiv(struct ac_llvm_context *ctx,
  LLVMValueRef num,
  LLVMValueRef den)
 {
-   LLVMValueRef ret = LLVMBuildFDiv(ctx->builder, num, den, "");
+   /* If we do (num / den), LLVM >= 7.0 does:
+*return num * v_rcp_f32(den * (fabs(den) > 0x1.0p+96f ? 0x1.0p-32f 
: 1.0f));
+*
+* If we do (num * (1 / den)), LLVM does:
+*return num * v_rcp_f32(den);
+*/
+   LLVMValueRef rcp = LLVMBuildFDiv(ctx->builder, ctx->f32_1, den, "");
+   LLVMValueRef ret = LLVMBuildFMul(ctx->builder, num, rcp, "");
 
/* Use v_rcp_f32 instead of precise division. */
if (!LLVMIsConstant(ret))
LLVMSetMetadata(ret, ctx->fpmath_md_kind, 
ctx->fpmath_md_2p5_ulp);
return ret;
 }
 
 /* Coordinates for cube map selection. sc, tc, and ma are as in Table 8.27
  * of the OpenGL 4.5 (Compatibility Profile) specification, except ma is
  * already multiplied by two. id is the cube face number.
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev