Message ID | 20230808031143.50925-3-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | tcg: Introduce negsetcond opcodes | expand |
On Tue, 8 Aug 2023 at 04:13, Richard Henderson <richard.henderson@linaro.org> wrote: > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > tcg/tcg-op-gvec.c | 6 ++---- > tcg/tcg-op.c | 6 ++---- > 2 files changed, 4 insertions(+), 8 deletions(-) > > diff --git a/tcg/tcg-op-gvec.c b/tcg/tcg-op-gvec.c > index a062239804..e260a07c61 100644 > --- a/tcg/tcg-op-gvec.c > +++ b/tcg/tcg-op-gvec.c > @@ -3692,8 +3692,7 @@ static void expand_cmp_i32(uint32_t dofs, uint32_t aofs, uint32_t bofs, > for (i = 0; i < oprsz; i += 4) { > tcg_gen_ld_i32(t0, cpu_env, aofs + i); > tcg_gen_ld_i32(t1, cpu_env, bofs + i); > - tcg_gen_setcond_i32(cond, t0, t0, t1); > - tcg_gen_neg_i32(t0, t0); > + tcg_gen_negsetcond_i32(cond, t0, t0, t1); > tcg_gen_st_i32(t0, cpu_env, dofs + i); > } Is it not possible for the optimizer to notice "you did a setcond followed by a neg, let me turn it into negsetcond for you" ? thanks -- PMM
On 8/8/23 08:55, Peter Maydell wrote: > On Tue, 8 Aug 2023 at 04:13, Richard Henderson > <richard.henderson@linaro.org> wrote: >> >> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> >> --- >> tcg/tcg-op-gvec.c | 6 ++---- >> tcg/tcg-op.c | 6 ++---- >> 2 files changed, 4 insertions(+), 8 deletions(-) >> >> diff --git a/tcg/tcg-op-gvec.c b/tcg/tcg-op-gvec.c >> index a062239804..e260a07c61 100644 >> --- a/tcg/tcg-op-gvec.c >> +++ b/tcg/tcg-op-gvec.c >> @@ -3692,8 +3692,7 @@ static void expand_cmp_i32(uint32_t dofs, uint32_t aofs, uint32_t bofs, >> for (i = 0; i < oprsz; i += 4) { >> tcg_gen_ld_i32(t0, cpu_env, aofs + i); >> tcg_gen_ld_i32(t1, cpu_env, bofs + i); >> - tcg_gen_setcond_i32(cond, t0, t0, t1); >> - tcg_gen_neg_i32(t0, t0); >> + tcg_gen_negsetcond_i32(cond, t0, t0, t1); >> tcg_gen_st_i32(t0, cpu_env, dofs + i); >> } > > Is it not possible for the optimizer to notice "you did > a setcond followed by a neg, let me turn it into negsetcond > for you" ? Not at present, no. That sort of peephole optimization is a bit more difficult than what we do at present. r~
On Tue, 8 Aug 2023 at 04:13, Richard Henderson <richard.henderson@linaro.org> wrote: > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM
diff --git a/tcg/tcg-op-gvec.c b/tcg/tcg-op-gvec.c index a062239804..e260a07c61 100644 --- a/tcg/tcg-op-gvec.c +++ b/tcg/tcg-op-gvec.c @@ -3692,8 +3692,7 @@ static void expand_cmp_i32(uint32_t dofs, uint32_t aofs, uint32_t bofs, for (i = 0; i < oprsz; i += 4) { tcg_gen_ld_i32(t0, cpu_env, aofs + i); tcg_gen_ld_i32(t1, cpu_env, bofs + i); - tcg_gen_setcond_i32(cond, t0, t0, t1); - tcg_gen_neg_i32(t0, t0); + tcg_gen_negsetcond_i32(cond, t0, t0, t1); tcg_gen_st_i32(t0, cpu_env, dofs + i); } tcg_temp_free_i32(t1); @@ -3710,8 +3709,7 @@ static void expand_cmp_i64(uint32_t dofs, uint32_t aofs, uint32_t bofs, for (i = 0; i < oprsz; i += 8) { tcg_gen_ld_i64(t0, cpu_env, aofs + i); tcg_gen_ld_i64(t1, cpu_env, bofs + i); - tcg_gen_setcond_i64(cond, t0, t0, t1); - tcg_gen_neg_i64(t0, t0); + tcg_gen_negsetcond_i64(cond, t0, t0, t1); tcg_gen_st_i64(t0, cpu_env, dofs + i); } tcg_temp_free_i64(t1); diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c index 76d2377669..b4f1f24cab 100644 --- a/tcg/tcg-op.c +++ b/tcg/tcg-op.c @@ -863,8 +863,7 @@ void tcg_gen_movcond_i32(TCGCond cond, TCGv_i32 ret, TCGv_i32 c1, } else { TCGv_i32 t0 = tcg_temp_ebb_new_i32(); TCGv_i32 t1 = tcg_temp_ebb_new_i32(); - tcg_gen_setcond_i32(cond, t0, c1, c2); - tcg_gen_neg_i32(t0, t0); + tcg_gen_negsetcond_i32(cond, t0, c1, c2); tcg_gen_and_i32(t1, v1, t0); tcg_gen_andc_i32(ret, v2, t0); tcg_gen_or_i32(ret, ret, t1); @@ -2563,8 +2562,7 @@ void tcg_gen_movcond_i64(TCGCond cond, TCGv_i64 ret, TCGv_i64 c1, } else { TCGv_i64 t0 = tcg_temp_ebb_new_i64(); TCGv_i64 t1 = tcg_temp_ebb_new_i64(); - tcg_gen_setcond_i64(cond, t0, c1, c2); - tcg_gen_neg_i64(t0, t0); + tcg_gen_negsetcond_i64(cond, t0, c1, c2); tcg_gen_and_i64(t1, v1, t0); tcg_gen_andc_i64(ret, v2, t0); tcg_gen_or_i64(ret, ret, t1);
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- tcg/tcg-op-gvec.c | 6 ++---- tcg/tcg-op.c | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-)