On Sat, Dec 15, 2012 at 05:53:26PM +0400, Vadim Girlin wrote:
> Use bitwise comparison to check whether we can replace float literal
> with inline constant (0.0, 0.5, 1.0), otherwise we can get unexpected
> results for integer literals bitcasted to float.
> 
> Fixes lockup with glsl-fs-unroll-out-param.shader_test on evergreen.
> 

Reviewed-by: Tom Stellard <[email protected]>

> Signed-off-by: Vadim Girlin <[email protected]>
> ---
>  lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp 
> b/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp
> index d15ed39..755936b 100644
> --- a/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp
> +++ b/lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp
> @@ -185,12 +185,11 @@ SDNode *AMDGPUDAGToDAGISel::Select(SDNode *N) {
>  
>        ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(N);
>        APFloat Value = C->getValueAPF();
> -      float FloatValue = Value.convertToFloat();
> -      if (FloatValue == 0.0) {
> +      if (Value.bitwiseIsEqual(APFloat(0.0))) {
>          ImmReg = AMDGPU::ZERO;
> -      } else if (FloatValue == 0.5) {
> +      } else if (Value.bitwiseIsEqual(APFloat(0.5))) {
>          ImmReg = AMDGPU::HALF;
> -      } else if (FloatValue == 1.0) {
> +      } else if (Value.bitwiseIsEqual(APFloat(1.0))) {
>          ImmReg = AMDGPU::ONE;
>        } else {
>          ImmValue = Value.bitcastToAPInt().getZExtValue();
> -- 
> 1.8.0.2
> 
> _______________________________________________
> mesa-dev mailing list
> [email protected]
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to