tcg: Eliminate duplicate env store operations
Notice when a constant is stored to the same location twice. Reviewed-by: Song Gao <gaosong@loongson.cn> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
ab84dc398b
commit
3eaadaeb4e
@ -2269,6 +2269,19 @@ static bool fold_tcg_st_memcopy(OptContext *ctx, TCGOp *op)
|
||||
src = arg_temp(op->args[0]);
|
||||
ofs = op->args[2];
|
||||
type = ctx->type;
|
||||
|
||||
/*
|
||||
* Eliminate duplicate stores of a constant.
|
||||
* This happens frequently when the target ISA zero-extends.
|
||||
*/
|
||||
if (ts_is_const(src)) {
|
||||
TCGTemp *prev = find_mem_copy_for(ctx, type, ofs);
|
||||
if (src == prev) {
|
||||
tcg_op_remove(ctx->tcg, op);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
last = ofs + tcg_type_size(type) - 1;
|
||||
remove_mem_copy_in(ctx, ofs, last);
|
||||
record_mem_copy(ctx, type, src, ofs, last);
|
||||
|
Loading…
Reference in New Issue
Block a user