summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2019-04-19 11:32:59 -0700
committerIan Romanick <[email protected]>2019-04-23 19:48:33 -0700
commit21223acf7d5b39e5eb2b248330519cdbee3e63e8 (patch)
tree6c0c82eb4b0a45ba8b1f30b575a39826650edfbc
parente4ec814c392c5405a363f64e14864623d5c1b10c (diff)
intel/fs: Fix D to W conversion in opt_combine_constants
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 <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r--src/intel/compiler/brw_fs_combine_constants.cpp2
1 files changed, 1 insertions, 1 deletions
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: