This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/26197] [4.2 regression] ICE in is_old_name with vectorizer
- From: "dorit at il dot ibm dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 28 Feb 2006 08:26:07 -0000
- Subject: [Bug tree-optimization/26197] [4.2 regression] ICE in is_old_name with vectorizer
- References: <bug-26197-1771@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #11 from dorit at il dot ibm dot com 2006-02-28 08:26 -------
Created an attachment (id=10935)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=10935&action=view)
tentative patch
I get a similar error message when trying to bootstrap mainline with
vectorization enabled:
/home/dorit/mainline_svn/build2/./prev-gcc/xgcc
-B/home/dorit/mainline_svn/build2/./prev-gcc/
-B/home/dorit/mainline_svn2/ppc64-yellowdog-linux/bin/ -c -g -O2
-ftree-vectorize -maltivec -DIN_GCC -W -Wall -Wwrite-strings
-Wstrict-prototypes -Wmissing-prototypes -pedantic -Wno-long-long
-Wno-variadic-macros -Wno-overlength-strings -Wold-style-definition
-Wmissing-format-attribute -Werror -fno-common -DHAVE_CONFIG_H -I. -I.
-I../../gcc/gcc -I../../gcc/gcc/. -I../../gcc/gcc/../include
-I../../gcc/gcc/../libcpp/include -I../../gcc/gcc/../libdecnumber
-I../libdecnumber ../../gcc/gcc/recog.c -o recog.o
../../gcc/gcc/recog.c: In function âconstrain_operandsâ:
../../gcc/gcc/recog.c:2270: internal compiler error: tree check: expected
ssa_name, have struct_field_tag in verify_ssa, at tree-ssa.c:735
make[3]: *** [recog.o] Error 1
make[3]: Leaving directory `/home/dorit/mainline_svn/build2/gcc'
make[2]: *** [all-stage2-gcc] Error 2
make[2]: Leaving directory `/home/dorit/mainline_svn/build2'
make[1]: *** [stage2-bubble] Error 2
make[1]: Leaving directory `/home/dorit/mainline_svn/build2'
make: *** [bootstrap] Error 2
Following Zdenek's observations, I tried the attached patch. It solves this
failure above in recog.c, but it fails bootstrap with vectorization enabled
later on. (It does pass regular bootstrap on ppc-linux). So this patch needs to
be further examined, but I wonder if it fixes this PR (I can't reproduce it)?
About the patch:
new_type_alias() originally looked like this:
TAG <- new tag for ptr;
if (var has subvars){
foreach subvar
add the subvar as may-alias of TAG.
}
else{
get the may-aliases of var;
if (|may-aliases| == 1)
set the (single) may-alias of var as the new tag of ptr;
else if (|may-aliases| == 0)
add var as may-alias of the TAG;
else /* |may-aliases| > 1 */
add the may-aliases of var as may-aliases of TAG;
}
What I did is basically factored out the 'else' part into a separate function,
and called that function also in the 'if' part, for each subvar; this way, we
don't add the subvar as may-alias of TAG if the subvar itself has may-aliases,
but add its may-aliases instead:
new version of new_type_alias():
TAG <- new tag for ptr;
if (var has subvars){
foreach subvar
add_may_aliases_for_new_tag (TAG, subvar)
}
else{
add_may_aliases_for_new_tag (TAG, var)
}
add_may_aliases_for_new_tag (TAG, var)
{
get the may-aliases of var;
if (|may-aliases| == 1)
set the (single) may-alias of var as the new tag of ptr;
else if (|may-aliases| == 0)
add var as may-alias of the TAG;
else /* |may-aliases| > 1 */
add the may-aliases of var as may-aliases of TAG;
}
Makes sense to anyone?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26197