From cabddb237f08b09f7e25dc53bcb36de370f8e8df Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 28 Jun 2005 00:46:40 -0700 Subject: ia64.c (ia64_expand_vcondu_v2si): Generate proper comparison operations. * config/ia64/ia64.c (ia64_expand_vcondu_v2si): Generate proper comparison operations. (ia64_expand_vecint_minmax): Fix size of xops. * config/ia64/vect.md (umax3): Fix fallback pattern typo. (vec_shl_, vec_shr_): New. From-SVN: r101375 --- gcc/ChangeLog | 8 ++++++++ gcc/config/ia64/ia64.c | 8 +++++--- gcc/config/ia64/vect.md | 22 +++++++++++++++++++++- 3 files changed, 34 insertions(+), 4 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4a53775..9ee2541 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2005-06-27 Richard Henderson + * config/ia64/ia64.c (ia64_expand_vcondu_v2si): Generate proper + comparison operations. + (ia64_expand_vecint_minmax): Fix size of xops. + * config/ia64/vect.md (umax3): Fix fallback pattern typo. + (vec_shl_, vec_shr_): New. + +2005-06-27 Richard Henderson + * tree-vect-transform.c (get_initial_def_for_reduction): Use correct type for DEF and INIT_VAL. Pretend MIN/MAX need epilogue adjustment. diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 45fb73e..5109d4f 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -1533,11 +1533,13 @@ ia64_expand_vcondu_v2si (enum rtx_code code, rtx operands[]) /* With the results of the comparisons, emit conditional moves. */ dl = gen_reg_rtx (SImode); - x = gen_rtx_IF_THEN_ELSE (SImode, bl, op1l, op2l); + x = gen_rtx_NE (VOIDmode, bl, const0_rtx); + x = gen_rtx_IF_THEN_ELSE (SImode, x, op1l, op2l); emit_insn (gen_rtx_SET (VOIDmode, dl, x)); dh = gen_reg_rtx (SImode); - x = gen_rtx_IF_THEN_ELSE (SImode, bh, op1h, op2h); + x = gen_rtx_NE (VOIDmode, bh, const0_rtx); + x = gen_rtx_IF_THEN_ELSE (SImode, x, op1h, op2h); emit_insn (gen_rtx_SET (VOIDmode, dh, x)); /* Merge the two partial results back into a vector. */ @@ -1613,7 +1615,7 @@ bool ia64_expand_vecint_minmax (enum rtx_code code, enum machine_mode mode, rtx operands[]) { - rtx xops[5]; + rtx xops[6]; /* These four combinations are supported directly. */ if (mode == V8QImode && (code == UMIN || code == UMAX)) diff --git a/gcc/config/ia64/vect.md b/gcc/config/ia64/vect.md index c9a4c54..dc6e0f7 100644 --- a/gcc/config/ia64/vect.md +++ b/gcc/config/ia64/vect.md @@ -214,7 +214,7 @@ (define_expand "umax3" [(set (match_operand:VECINT 0 "gr_register_operand" "") - (smax:VECINT (match_operand:VECINT 1 "gr_register_operand" "") + (umax:VECINT (match_operand:VECINT 1 "gr_register_operand" "") (match_operand:VECINT 2 "gr_register_operand" "")))] "" { @@ -311,6 +311,26 @@ "pshr.u %0 = %1, %2" [(set_attr "itanium_class" "mmshf")]) +(define_expand "vec_shl_" + [(set (match_operand:VECINT 0 "gr_register_operand" "") + (ashift:DI (match_operand:VECINT 1 "gr_register_operand" "") + (match_operand:DI 2 "gr_reg_or_6bit_operand" "")))] + "" +{ + operands[0] = gen_lowpart (DImode, operands[0]); + operands[1] = gen_lowpart (DImode, operands[1]); +}) + +(define_expand "vec_shr_" + [(set (match_operand:VECINT 0 "gr_register_operand" "") + (lshiftrt:DI (match_operand:VECINT 1 "gr_register_operand" "") + (match_operand:DI 2 "gr_reg_or_6bit_operand" "")))] + "" +{ + operands[0] = gen_lowpart (DImode, operands[0]); + operands[1] = gen_lowpart (DImode, operands[1]); +}) + (define_expand "vcond" [(set (match_operand:VECINT 0 "gr_register_operand" "") (if_then_else:VECINT -- cgit v1.1