This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/26197] [4.2 regression] ICE in is_old_name with vectorizer



------- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]