This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix -Wmaybe-uninitialized warning on sse.md (PR target/81151)
- From: Uros Bizjak <ubizjak at gmail dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 21 Jun 2017 21:33:07 +0200
- Subject: Re: [PATCH] Fix -Wmaybe-uninitialized warning on sse.md (PR target/81151)
- Authentication-results: sourceware.org; auth=none
- References: <20170621182727.GU2123@tucnak>
On Wed, Jun 21, 2017 at 8:27 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> Hi!
>
> This expander has a gap in between the operands and match_dup indexes,
> which results in genemit generating:
> operand2 = operands[2];
> (void) operand2;
> where operands[2] has not been initialized.
>
> Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for
> trunk?
>
> 2017-06-21 Jakub Jelinek <jakub@redhat.com>
>
> PR target/81151
> * config/i386/sse.md (round<mode>2): Renumber match_dup and
> operands indexes to avoid gap between operands and match_dups.
OK for mainline and release branches.
Thanks,
Uros.
> --- gcc/config/i386/sse.md.jj 2017-05-24 11:59:06.000000000 +0200
> +++ gcc/config/i386/sse.md 2017-06-21 14:10:02.768078833 +0200
> @@ -15638,13 +15638,13 @@ (define_insn "sse4_1_round<ssescalarmode
> (set_attr "mode" "<MODE>")])
>
> (define_expand "round<mode>2"
> - [(set (match_dup 4)
> + [(set (match_dup 3)
> (plus:VF
> (match_operand:VF 1 "register_operand")
> - (match_dup 3)))
> + (match_dup 2)))
> (set (match_operand:VF 0 "register_operand")
> (unspec:VF
> - [(match_dup 4) (match_dup 5)]
> + [(match_dup 3) (match_dup 4)]
> UNSPEC_ROUND))]
> "TARGET_ROUND && !flag_trapping_math"
> {
> @@ -15664,11 +15664,11 @@ (define_expand "round<mode>2"
> vec_half = ix86_build_const_vector (<MODE>mode, true, half);
> vec_half = force_reg (<MODE>mode, vec_half);
>
> - operands[3] = gen_reg_rtx (<MODE>mode);
> - emit_insn (gen_copysign<mode>3 (operands[3], vec_half, operands[1]));
> + operands[2] = gen_reg_rtx (<MODE>mode);
> + emit_insn (gen_copysign<mode>3 (operands[2], vec_half, operands[1]));
>
> - operands[4] = gen_reg_rtx (<MODE>mode);
> - operands[5] = GEN_INT (ROUND_TRUNC);
> + operands[3] = gen_reg_rtx (<MODE>mode);
> + operands[4] = GEN_INT (ROUND_TRUNC);
> })
>
> (define_expand "round<mode>2_sfix"
>
> Jakub