re PR tree-optimization/81987 (ICE in verify_ssa with -O3 -march=skylake-avx512)

[gcc]

2017-08-30  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	PR tree-optimization/81987
	* gimple-ssa-strength-reduction.c (insert_initializers): Don't
	insert an initializer in a location not dominated by the stride
	definition.

[gcc/testsuite]

2017-08-30  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	PR tree-optimization/81987
	* g++.dg/torture/pr81987.C: New file.

From-SVN: r251547
This commit is contained in:
Bill Schmidt 2017-08-30 20:04:07 +00:00 committed by William Schmidt
parent ba0cecd6d4
commit 3e75ec3fab
4 changed files with 90 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2017-08-30 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
PR tree-optimization/81987
* gimple-ssa-strength-reduction.c (insert_initializers): Don't
insert an initializer in a location not dominated by the stride
definition.
2017-08-30 Eric Botcazou <ebotcazou@adacore.com>
* tree-eh.c (lower_try_finally_switch): Set the location of the finally

View File

@ -3340,6 +3340,23 @@ insert_initializers (slsr_cand_t c)
that block, the earliest one will be returned in WHERE. */
bb = nearest_common_dominator_for_cands (c, incr, &where);
/* If the NCD is not dominated by the block containing the
definition of the stride, we can't legally insert a
single initializer. Mark the increment as unprofitable
so we don't make any replacements. FIXME: Multiple
initializers could be placed with more analysis. */
gimple *stride_def = SSA_NAME_DEF_STMT (c->stride);
basic_block stride_bb = gimple_bb (stride_def);
if (stride_bb && !dominated_by_p (CDI_DOMINATORS, bb, stride_bb))
{
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file,
"Initializer #%d cannot be legally placed\n", i);
incr_vec[i].cost = COST_INFINITE;
continue;
}
/* If the nominal stride has a different type than the recorded
stride type, build a cast from the nominal stride to that type. */
if (!types_compatible_p (TREE_TYPE (c->stride), c->stride_type))

View File

@ -1,3 +1,8 @@
2017-08-30 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
PR tree-optimization/81987
* g++.dg/torture/pr81987.C: New file.
2017-08-30 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/aggr22.ad[sb]: New test.

View File

@ -0,0 +1,61 @@
extern short var_1;
extern const short var_3;
extern unsigned long int var_9;
extern short var_13;
extern const unsigned long int var_15;
extern const unsigned long int var_37;
extern unsigned long int var_40;
extern long long int var_47;
extern short var_48;
extern const short var_54;
extern long long int var_79;
extern long long int var_81;
extern long long int var_94;
extern long long int var_95;
extern long long int var_701;
extern unsigned long int var_786;
extern short var_788;
extern long long int var_844;
struct struct_1 {
short member_1_2 : 15;
static long long int member_1_3;
};
extern struct_1 struct_obj_6;
extern struct_1 struct_obj_8;
void foo() {
int a = var_3 <= 602154393864UL;
if (var_81 ? 0 : var_3 && var_9)
;
else {
var_94 = 0;
if (var_3 && var_48 || var_13) {
if (var_48)
var_95 = 0;
short b((2364461588881776511UL + var_3) * (2 ? var_13 : 0) || var_1);
struct_obj_8.member_1_2 = b;
if (var_15) {
if (var_81)
if (var_47)
;
else if (var_40)
var_701 = 0;
} else {
if (var_40)
var_79 = 0;
if (var_54) {
if (var_37)
var_786 = 0;
else
var_788 = 0;
struct_obj_6.member_1_3 =
(2364461588881776511UL + var_3) * (2 ? var_13 : 0);
}
}
if ((2364461588881776511UL + var_3) * (2 ? var_13 : 0))
var_844 = 0;
}
}
}