[Bug tree-optimization/69882] New: [6 regression] Excessive reduction statements generated by SLP
kyukhin at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Feb 20 12:06:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69882
Bug ID: 69882
Summary: [6 regression] Excessive reduction statements
generated by SLP
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: kyukhin at gcc dot gnu.org
Target Milestone: ---
Created attachment 37743
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37743&action=edit
Reproducer
Hello,
Attached test case emits wrong reduction statements.
Compile:
$ trunk/64/20160220/bin/gfortran -o repro -static -m64 -Ofast -mavx repro.f90
Execution ABORTs
Works fine when compiled w/ -O0
Extract from vectorizer dump:
<bb 49>:
# k_239 = PHI <k.4_11(48), k_266(56)>
# c_I_lsm.10_241 = PHI <c_I_lsm.10_48(48), M.0_249(56)>
# c_I_lsm.11_242 = PHI <c_I_lsm.11_3(48), M.0_252(56)>
# vectp_a.47_406 = PHI <vectp_a.48_402(48), vectp_a.47_407(56)>
# vect_M.50_410 = PHI <vect_cst__412(48), vect_M.50_411(56)>
# ivtmp_420 = PHI <0(48), ivtmp_421(56)>
_245 = (integer(kind=8)) k_239;
_246 = _245 * 4;
_247 = _246 + -4;
_248 = *a_22(D)[_247];
M.0_249 = MAX_EXPR <_248, c_I_lsm.10_241>;
_250 = _246 + -3;
vect__248.49_408 = MEM[(real(kind=8) *)vectp_a.47_406]; <-- SLP
vectp_a.47_409 = vectp_a.47_406 + 32;
_251 = *a_22(D)[_250];
vect_M.50_411 = MAX_EXPR <vect__248.49_408, vect_M.50_410>; <-- SLP
M.0_252 = MAX_EXPR <_251, c_I_lsm.11_242>;
k_266 = k_239 + 1;
vectp_a.47_407 = vectp_a.47_409 + 32; < -- SLP
ivtmp_421 = ivtmp_420 + 1;
if (ivtmp_421 >= bnd.44_361)
goto <bb 52>;
else
goto <bb 56>;
<bb 50>:
... # REMAINDER
k_377 = k_365 + 1;
if (k_365 == 26)
goto <bb 54>;
else
goto <bb 51>;
<bb 51>:
goto <bb 50>;
<bb 52>:
# k_381 = PHI <k_266(49)>
# c_I_lsm.10_384 = PHI <M.0_249(49)>
# c_I_lsm.11_386 = PHI <M.0_252(49)>
# c_I_lsm.13_389 = PHI <c_I_lsm.13_84(49)>
# c_I_lsm.12_392 = PHI <c_I_lsm.12_13(49)>
# vect_M.50_413 = PHI <vect_M.50_411(49)>
stmp_M.51_414 = BIT_FIELD_REF <vect_M.50_413, 64, 0>;
stmp_M.51_415 = BIT_FIELD_REF <vect_M.50_413, 64, 64>;
stmp_M.51_416 = BIT_FIELD_REF <vect_M.50_413, 64, 128>;
stmp_M.51_417 = BIT_FIELD_REF <vect_M.50_413, 64, 192>;
stmp_M.51_418 = MAX_EXPR <stmp_M.51_414, stmp_M.51_416>; # <-- WHOAAAAT??
stmp_M.51_419 = MAX_EXPR <stmp_M.51_415, stmp_M.51_417>; # <-- DITTO.
_401 = (integer(kind=4)) ratio_mult_vf.45_364;
tmp.46_400 = k.4_11 + _401;
if (niters.42_358 == ratio_mult_vf.45_364)
goto <bb 55>;
else
goto <bb 53>;
Those 2 SSA names are then stored to 1st and 2nd array elements
More information about the Gcc-bugs
mailing list