diff options
author | Ian Romanick <[email protected]> | 2019-04-19 11:32:59 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2019-04-23 19:48:33 -0700 |
commit | 21223acf7d5b39e5eb2b248330519cdbee3e63e8 (patch) | |
tree | 6c0c82eb4b0a45ba8b1f30b575a39826650edfbc | |
parent | e4ec814c392c5405a363f64e14864623d5c1b10c (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.cpp | 2 |
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: |