re PR tree-optimization/79345 (passing yet-uninitialized member as argument to base class constructor should warn (-Wunitialized))

PR tree-optimization/79345
	* gensupport.h (struct pattern_stats): Add min_scratch_opno field.
	* gensupport.c (get_pattern_stats_1) <case MATCH_SCRATCH>: Update it.
	(get_pattern_stats): Initialize it.
	* genemit.c (gen_expand): Verify match_scratch numbers come after
	match_operand/match_dup numbers.
	* config/i386/i386.md (<s>mul<mode>3_highpart): Swap match_dup and
	match_scratch numbers.
	* config/i386/sse.md (avx2_gathersi<mode>, avx2_gatherdi<mode>):
	Likewise.
	* config/s390/s390.md (trunctdsd2): Likewise.

From-SVN: r245833
This commit is contained in:
Jakub Jelinek 2017-03-02 10:19:28 +01:00 committed by Jakub Jelinek
parent da403f3178
commit d5a216fa21
7 changed files with 39 additions and 17 deletions

View File

@ -1,3 +1,17 @@
2017-03-02 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/79345
* gensupport.h (struct pattern_stats): Add min_scratch_opno field.
* gensupport.c (get_pattern_stats_1) <case MATCH_SCRATCH>: Update it.
(get_pattern_stats): Initialize it.
* genemit.c (gen_expand): Verify match_scratch numbers come after
match_operand/match_dup numbers.
* config/i386/i386.md (<s>mul<mode>3_highpart): Swap match_dup and
match_scratch numbers.
* config/i386/sse.md (avx2_gathersi<mode>, avx2_gatherdi<mode>):
Likewise.
* config/s390/s390.md (trunctdsd2): Likewise.
2017-03-02 Richard Biener <rguenther@suse.de> 2017-03-02 Richard Biener <rguenther@suse.de>
* wide-int.h (wide_int_storage::operator=): Implement in terms * wide-int.h (wide_int_storage::operator=): Implement in terms

View File

@ -7364,11 +7364,11 @@
(match_operand:SWI48 1 "nonimmediate_operand")) (match_operand:SWI48 1 "nonimmediate_operand"))
(any_extend:<DWI> (any_extend:<DWI>
(match_operand:SWI48 2 "register_operand"))) (match_operand:SWI48 2 "register_operand")))
(match_dup 4)))) (match_dup 3))))
(clobber (match_scratch:SWI48 3)) (clobber (match_scratch:SWI48 4))
(clobber (reg:CC FLAGS_REG))])] (clobber (reg:CC FLAGS_REG))])]
"" ""
"operands[4] = GEN_INT (GET_MODE_BITSIZE (<MODE>mode));") "operands[3] = GEN_INT (GET_MODE_BITSIZE (<MODE>mode));")
(define_insn "*<s>muldi3_highpart_1" (define_insn "*<s>muldi3_highpart_1"
[(set (match_operand:DI 0 "register_operand" "=d") [(set (match_operand:DI 0 "register_operand" "=d")

View File

@ -18873,7 +18873,7 @@
(unspec:VEC_GATHER_MODE (unspec:VEC_GATHER_MODE
[(match_operand:VEC_GATHER_MODE 1 "register_operand") [(match_operand:VEC_GATHER_MODE 1 "register_operand")
(mem:<ssescalarmode> (mem:<ssescalarmode>
(match_par_dup 7 (match_par_dup 6
[(match_operand 2 "vsib_address_operand") [(match_operand 2 "vsib_address_operand")
(match_operand:<VEC_GATHER_IDXSI> (match_operand:<VEC_GATHER_IDXSI>
3 "register_operand") 3 "register_operand")
@ -18881,10 +18881,10 @@
(mem:BLK (scratch)) (mem:BLK (scratch))
(match_operand:VEC_GATHER_MODE 4 "register_operand")] (match_operand:VEC_GATHER_MODE 4 "register_operand")]
UNSPEC_GATHER)) UNSPEC_GATHER))
(clobber (match_scratch:VEC_GATHER_MODE 6))])] (clobber (match_scratch:VEC_GATHER_MODE 7))])]
"TARGET_AVX2" "TARGET_AVX2"
{ {
operands[7] operands[6]
= gen_rtx_UNSPEC (Pmode, gen_rtvec (3, operands[2], operands[3], = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, operands[2], operands[3],
operands[5]), UNSPEC_VSIBADDR); operands[5]), UNSPEC_VSIBADDR);
}) })
@ -18934,7 +18934,7 @@
(unspec:VEC_GATHER_MODE (unspec:VEC_GATHER_MODE
[(match_operand:<VEC_GATHER_SRCDI> 1 "register_operand") [(match_operand:<VEC_GATHER_SRCDI> 1 "register_operand")
(mem:<ssescalarmode> (mem:<ssescalarmode>
(match_par_dup 7 (match_par_dup 6
[(match_operand 2 "vsib_address_operand") [(match_operand 2 "vsib_address_operand")
(match_operand:<VEC_GATHER_IDXDI> (match_operand:<VEC_GATHER_IDXDI>
3 "register_operand") 3 "register_operand")
@ -18942,10 +18942,10 @@
(mem:BLK (scratch)) (mem:BLK (scratch))
(match_operand:<VEC_GATHER_SRCDI> 4 "register_operand")] (match_operand:<VEC_GATHER_SRCDI> 4 "register_operand")]
UNSPEC_GATHER)) UNSPEC_GATHER))
(clobber (match_scratch:VEC_GATHER_MODE 6))])] (clobber (match_scratch:VEC_GATHER_MODE 7))])]
"TARGET_AVX2" "TARGET_AVX2"
{ {
operands[7] operands[6]
= gen_rtx_UNSPEC (Pmode, gen_rtvec (3, operands[2], operands[3], = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, operands[2], operands[3],
operands[5]), UNSPEC_VSIBADDR); operands[5]), UNSPEC_VSIBADDR);
}) })

View File

@ -5074,15 +5074,15 @@
(define_expand "trunctdsd2" (define_expand "trunctdsd2"
[(parallel [(parallel
[(set (match_dup 3) [(set (match_dup 2)
(float_truncate:DD (match_operand:TD 1 "register_operand" ""))) (float_truncate:DD (match_operand:TD 1 "register_operand" "")))
(unspec:DI [(const_int DFP_RND_PREP_FOR_SHORT_PREC)] UNSPEC_ROUND) (unspec:DI [(const_int DFP_RND_PREP_FOR_SHORT_PREC)] UNSPEC_ROUND)
(clobber (match_scratch:TD 2 ""))]) (clobber (match_scratch:TD 3 ""))])
(set (match_operand:SD 0 "register_operand" "") (set (match_operand:SD 0 "register_operand" "")
(float_truncate:SD (match_dup 3)))] (float_truncate:SD (match_dup 2)))]
"TARGET_HARD_DFP" "TARGET_HARD_DFP"
{ {
operands[3] = gen_reg_rtx (DDmode); operands[2] = gen_reg_rtx (DDmode);
}) })
; ;

View File

@ -448,6 +448,10 @@ gen_expand (md_rtx_info *info)
/* Find out how many operands this function has. */ /* Find out how many operands this function has. */
get_pattern_stats (&stats, XVEC (expand, 1)); get_pattern_stats (&stats, XVEC (expand, 1));
if (stats.min_scratch_opno != -1
&& stats.min_scratch_opno <= MAX (stats.max_opno, stats.max_dup_opno))
fatal_at (info->loc, "define_expand for %s needs to have match_scratch "
"numbers above all other operands", XSTR (expand, 0));
/* Output the function name and argument declarations. */ /* Output the function name and argument declarations. */
printf ("rtx\ngen_%s (", XSTR (expand, 0)); printf ("rtx\ngen_%s (", XSTR (expand, 0));
@ -479,8 +483,6 @@ gen_expand (md_rtx_info *info)
make a local variable. */ make a local variable. */
for (i = stats.num_generator_args; i <= stats.max_dup_opno; i++) for (i = stats.num_generator_args; i <= stats.max_dup_opno; i++)
printf (" rtx operand%d;\n", i); printf (" rtx operand%d;\n", i);
for (; i <= stats.max_scratch_opno; i++)
printf (" rtx operand%d ATTRIBUTE_UNUSED;\n", i);
printf (" rtx_insn *_val = 0;\n"); printf (" rtx_insn *_val = 0;\n");
printf (" start_sequence ();\n"); printf (" start_sequence ();\n");
@ -516,7 +518,7 @@ gen_expand (md_rtx_info *info)
(unless we aren't going to use them at all). */ (unless we aren't going to use them at all). */
if (XVEC (expand, 1) != 0) if (XVEC (expand, 1) != 0)
{ {
for (i = 0; i < stats.num_operand_vars; i++) for (i = 0; i <= MAX (stats.max_opno, stats.max_dup_opno); i++)
{ {
printf (" operand%d = operands[%d];\n", i, i); printf (" operand%d = operands[%d];\n", i, i);
printf (" (void) operand%d;\n", i); printf (" (void) operand%d;\n", i);

View File

@ -3000,6 +3000,10 @@ get_pattern_stats_1 (struct pattern_stats *stats, rtx x)
break; break;
case MATCH_SCRATCH: case MATCH_SCRATCH:
if (stats->min_scratch_opno == -1)
stats->min_scratch_opno = XINT (x, 0);
else
stats->min_scratch_opno = MIN (stats->min_scratch_opno, XINT (x, 0));
stats->max_scratch_opno = MAX (stats->max_scratch_opno, XINT (x, 0)); stats->max_scratch_opno = MAX (stats->max_scratch_opno, XINT (x, 0));
break; break;
@ -3032,6 +3036,7 @@ get_pattern_stats (struct pattern_stats *stats, rtvec pattern)
stats->max_opno = -1; stats->max_opno = -1;
stats->max_dup_opno = -1; stats->max_dup_opno = -1;
stats->min_scratch_opno = -1;
stats->max_scratch_opno = -1; stats->max_scratch_opno = -1;
stats->num_dups = 0; stats->num_dups = 0;

View File

@ -199,7 +199,8 @@ struct pattern_stats
/* The largest match_dup, match_op_dup or match_par_dup number found. */ /* The largest match_dup, match_op_dup or match_par_dup number found. */
int max_dup_opno; int max_dup_opno;
/* The largest match_scratch number found. */ /* The smallest and largest match_scratch number found. */
int min_scratch_opno;
int max_scratch_opno; int max_scratch_opno;
/* The number of times match_dup, match_op_dup or match_par_dup appears /* The number of times match_dup, match_op_dup or match_par_dup appears