Richard Henderson <richard.hender...@linaro.org> writes:

> This promotes constants to full-fledged temporaries, which are then
> hashed so we have only a single copy across the TB.  If an opcode
> requires forcing one into a register, then we will only do this
> once -- at least until the register is killed, e.g. by a function call.
>
> While this is probably an modest improvement for integer code, it is
> significant for SVE vector code.  In particular, where a generator function
> loads a constant for the operation, and then the generator function is
> called N times for the N x 128-bit vector.  Previously we'd be loading
> up the same constant N times and now we do so only once.
>
> The existing tcg_const_{type}() functions are unchanged, allocating
> a new temporary and initializing it.  The constant propagation pass
> of the optimizer will generally remove the temporary when it turns
> out not to be modified further.
>
> This adds new tcg_constant_{type}() functions which produce a read-only
> temporary containing the constant which need not be freed.  I have
> updated the generic expanders to take advantage of this, but have not
> touched the target front ends.
>
> This also, in the end, allows the complete removal of the tcg opcodes
> that create a constant: INDEX_op_movi_{i32,i64} and INDEX_op_dupi_vec.
> Loading of constants into hard registers is completely controlled by
> the register allocator.
>
>
> r~
>
>
> Richard Henderson (16):
>   tcg: Add temp_readonly

The series failed to apply at the first patch. Should it be based on any
other patches?

-- 
Alex Bennée

Reply via email to