This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug ipa/78644] [7 Regression] ICE: SIGSEGV in is_gimple_reg_type with -Og -fipa-cp
- From: "jakub at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 02 Dec 2016 17:13:12 +0000
- Subject: [Bug ipa/78644] [7 Regression] ICE: SIGSEGV in is_gimple_reg_type with -Og -fipa-cp
- Auto-submitted: auto-generated
- References: <bug-78644-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78644
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So, before ccp4 we have:
_7 = x3_1 + x2_3;
_8 = {_7, _7, _7, _7};
x4.1_9 = x4;
_15 = {_7, _7, _7, _7};
_16 = BIT_FIELD_REF <_15, 128, 0>;
_17 = BIT_FIELD_REF <x4.1_9, 128, 0>;
_18 = _16 + _17;
_19 = {_7, _7, _7, _7};
_20 = BIT_FIELD_REF <_19, 128, 128>;
_21 = BIT_FIELD_REF <x4.1_9, 128, 128>;
_22 = _20 + _21;
_23 = {_7, _7, _7, _7};
_24 = BIT_FIELD_REF <_23, 128, 256>;
_25 = BIT_FIELD_REF <x4.1_9, 128, 256>;
_26 = _24 + _25;
_27 = {_7, _7, _7, _7};
_28 = BIT_FIELD_REF <_27, 128, 384>;
_29 = BIT_FIELD_REF <x4.1_9, 128, 384>;
_30 = _28 + _29;
_10 = {_18, _22, _26, _30};
<retval> = _10;
ccp4 sees those uses:
_7 : -->20 uses.
_27 = {_7, _7, _7, _7};
_27 = {_7, _7, _7, _7};
_27 = {_7, _7, _7, _7};
_27 = {_7, _7, _7, _7};
_23 = {_7, _7, _7, _7};
_23 = {_7, _7, _7, _7};
_23 = {_7, _7, _7, _7};
_23 = {_7, _7, _7, _7};
_19 = {_7, _7, _7, _7};
_19 = {_7, _7, _7, _7};
_19 = {_7, _7, _7, _7};
_19 = {_7, _7, _7, _7};
_15 = {_7, _7, _7, _7};
_15 = {_7, _7, _7, _7};
_15 = {_7, _7, _7, _7};
_15 = {_7, _7, _7, _7};
_8 = {_7, _7, _7, _7};
_8 = {_7, _7, _7, _7};
_8 = {_7, _7, _7, _7};
_8 = {_7, _7, _7, _7};
...
Visiting statement:
_7 = x3_1 + x2_3;
which is likely CONSTANT
Match-and-simplified x3_1 + x2_3 to 0
Lattice value changed to CONSTANT 0. Adding SSA edges to worklist.
and replaces all those ctors with {x2_3, x2_3, x2_3, x2_3}.
But folding also happens while this is ongoing:
Folding statement: _17 = BIT_FIELD_REF <x4.1_9, 128, 0>;
Not folded
Folding statement: _18 = _16 + _17;
Folded into: _18 = _7 + _17;
and thus a new _7 reference appears, and we don't fold that into _18 = x2_3 +
_17, but remove the _7 setter, because we assume all uses are replaced:
Removing dead stmt _7 = x3_1 + x2_3;
Richi, I think this is your area of expertise.