tcg/optimize: only read val after const check
valgrind pointed out that arg_info()->val can be undefined which will be the case if the arguments are not constant. The ordering of the checks will have ensured we never relied on an undefined value but for the sake of completeness re-order the code to be clear. Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20220209112142.3367525-1-alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
3d1fbc5966
commit
9becc36f02
@ -552,10 +552,10 @@ static bool do_constant_folding_cond_eq(TCGCond c)
|
|||||||
static int do_constant_folding_cond(TCGType type, TCGArg x,
|
static int do_constant_folding_cond(TCGType type, TCGArg x,
|
||||||
TCGArg y, TCGCond c)
|
TCGArg y, TCGCond c)
|
||||||
{
|
{
|
||||||
uint64_t xv = arg_info(x)->val;
|
|
||||||
uint64_t yv = arg_info(y)->val;
|
|
||||||
|
|
||||||
if (arg_is_const(x) && arg_is_const(y)) {
|
if (arg_is_const(x) && arg_is_const(y)) {
|
||||||
|
uint64_t xv = arg_info(x)->val;
|
||||||
|
uint64_t yv = arg_info(y)->val;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case TCG_TYPE_I32:
|
case TCG_TYPE_I32:
|
||||||
return do_constant_folding_cond_32(xv, yv, c);
|
return do_constant_folding_cond_32(xv, yv, c);
|
||||||
@ -567,7 +567,7 @@ static int do_constant_folding_cond(TCGType type, TCGArg x,
|
|||||||
}
|
}
|
||||||
} else if (args_are_copies(x, y)) {
|
} else if (args_are_copies(x, y)) {
|
||||||
return do_constant_folding_cond_eq(c);
|
return do_constant_folding_cond_eq(c);
|
||||||
} else if (arg_is_const(y) && yv == 0) {
|
} else if (arg_is_const(y) && arg_info(y)->val == 0) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case TCG_COND_LTU:
|
case TCG_COND_LTU:
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user