[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/6] Add copy and constant propagation.
From: |
Richard Henderson |
Subject: |
Re: [Qemu-devel] [PATCH 2/6] Add copy and constant propagation. |
Date: |
Fri, 20 May 2011 11:22:36 -0700 |
User-agent: |
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110428 Fedora/3.1.10-1.fc14 Thunderbird/3.1.10 |
On 05/20/2011 05:39 AM, Kirill Batuzov wrote:
> + static tcg_target_ulong vals[TCG_MAX_TEMPS];
> + static tcg_temp_state state[TCG_MAX_TEMPS];
Any particular reason to make these static? It's 4-6k on the host
stack depending on sizeof tcg_target_ulong. Large, but not excessive.
I think it's just confusing to have them static, myself.
I think it might be clearer to have these two in a structure, rather
than two separate arrays. That does waste a bit of memory in padding
for 64-bit target, but I think it might clean up the code a bit.
> nb_temps = s->nb_temps;
> nb_globals = s->nb_globals;
> + memset(state, 0, nb_temps * sizeof(tcg_temp_state));
Of course, instead of allocating static structures, you could alloca
the memory in the appropriate size...
> + case INDEX_op_mov_i32:
> +#if TCG_TARGET_REG_BITS == 64
> + case INDEX_op_mov_i64:
> +#endif
> + if ((state[args[1]] == TCG_TEMP_COPY
> + && vals[args[1]] == args[0])
> + || args[0] == args[1]) {
> + args += 2;
> + gen_opc_buf[op_index] = INDEX_op_nop;
> + break;
Here, for example, INDEX_op_nop2 would be more appropriate,
obviating the need for the arg copy loop from patch 1.
> + if (state[args[1]] != TCG_TEMP_CONST) {
> + } else {
> + /* Source argument is constant. Rewrite the operation and
> + let movi case handle it. */
> + }
FWIW, I think writing positive tests is clearer than writing
negative tests. I.e. reverse the condition and the if/else bodies.
> case INDEX_op_brcond_i64:
> #endif
> + memset(state, 0, nb_temps * sizeof(tcg_temp_state));
Why are you resetting at the branch, rather than at the label?
Seems reasonable enough to handle the extended basic block when
possible...
r~
- Re: [Qemu-devel] [PATCH 5/6] Do constant folding for shift operations., (continued)
- Re: [Qemu-devel] [PATCH 5/6] Do constant folding for shift operations., Richard Henderson, 2011/05/26
- Re: [Qemu-devel] [PATCH 5/6] Do constant folding for shift operations., Blue Swirl, 2011/05/26
- Re: [Qemu-devel] [PATCH 5/6] Do constant folding for shift operations., Richard Henderson, 2011/05/26
- Re: [Qemu-devel] [PATCH 5/6] Do constant folding for shift operations., Blue Swirl, 2011/05/26
- Re: [Qemu-devel] [PATCH 5/6] Do constant folding for shift operations., Richard Henderson, 2011/05/26
- Re: [Qemu-devel] [PATCH 5/6] Do constant folding for shift operations., Jamie Lokier, 2011/05/27
- Re: [Qemu-devel] [PATCH 5/6] Do constant folding for shift operations., Blue Swirl, 2011/05/27
- Re: [Qemu-devel] [PATCH 5/6] Do constant folding for shift operations., Richard Henderson, 2011/05/27
- Re: [Qemu-devel] [PATCH 5/6] Do constant folding for shift operations., Paolo Bonzini, 2011/05/27
[Qemu-devel] [PATCH 2/6] Add copy and constant propagation., Kirill Batuzov, 2011/05/20
[Qemu-devel] [PATCH 4/6] Do constant folding for boolean operations., Kirill Batuzov, 2011/05/20
[Qemu-devel] [PATCH 3/6] Do constant folding for basic arithmetic operations., Kirill Batuzov, 2011/05/20
Re: [Qemu-devel] [PATCH 0/6] Implement constant folding and copy propagation in TCG, Richard Henderson, 2011/05/20