From 21223acf7d5b39e5eb2b248330519cdbee3e63e8 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 19 Apr 2019 11:32:59 -0700 Subject: [PATCH] intel/fs: Fix D to W conversion in opt_combine_constants MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Found by GCC warning: src/intel/compiler/brw_fs_combine_constants.cpp: In function ‘bool needs_negate(const fs_reg*, const imm*)’: src/intel/compiler/brw_fs_combine_constants.cpp:306:34: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] return ((reg->d & 0xffffu) < 0) != (imm->w < 0); ~~~~~~~~~~~~~~~~~~~^~~ The result of the bit-and is a 32-bit value with the top bits all zero. This will never be < 0. Instead of masking off the bits, just cast to int16_t and let the compiler handle the actual conversion. Fixes: e64be391dd0 ("intel/compiler: generalize the combine constants pass") Cc: Iago Toral Quiroga Reviewed-by: Jason Ekstrand --- src/intel/compiler/brw_fs_combine_constants.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intel/compiler/brw_fs_combine_constants.cpp b/src/intel/compiler/brw_fs_combine_constants.cpp index db7b14a8312..8d16be4c4bb 100644 --- a/src/intel/compiler/brw_fs_combine_constants.cpp +++ b/src/intel/compiler/brw_fs_combine_constants.cpp @@ -303,7 +303,7 @@ needs_negate(const struct fs_reg *reg, const struct imm *imm) case BRW_REGISTER_TYPE_HF: return (reg->d & 0x8000u) != (imm->w & 0x8000u); case BRW_REGISTER_TYPE_W: - return ((reg->d & 0xffffu) < 0) != (imm->w < 0); + return ((int16_t)reg->d < 0) != (imm->w < 0); case BRW_REGISTER_TYPE_UQ: case BRW_REGISTER_TYPE_UD: case BRW_REGISTER_TYPE_UW: -- 2.30.2