This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
tree-SSA Bogus dominator optimization
- From: Andrew Haley <aph at redhat dot com>
- To: gcc at gcc dot gnu dot org
- Date: Wed, 4 Aug 2004 09:42:04 +0100
- Subject: tree-SSA Bogus dominator optimization
Note: this is on my branch, merged from mainline on 20040514. If
dominator optimizations were known to be broken around that time, I
need to remerge.
I have something weird here: a bug that seems to be caused by dom2.
This block:
T.10_37 = _otable_org.kxml.parser.XmlParser[4];
T.11_38 = (<unnamed type>)T.10_37;
T.12_39 = T.11_38 + this_1;
T.13_40 = *T.12_39;
#slot#2#2_41 = T.13_40->length;
if (#slot#2#2_41 != 1) goto *.LJpc=65; else goto <L3>;
Is followed by:
*.LJpc=65:;
T.14_52 = _otable_org.kxml.parser.XmlParser[5];
T.15_53 = (<unnamed type>)T.14_52;
T.35_54 = T.15_53 + this_1;
T.36_55 = *T.35_54;
T.37_56 = (struct java.lang.Object *)T.36_55;
T.38_57 = T.37_56->vtable;
T.39_58 = _otable_org.kxml.parser.XmlParser[7];
T.40_59 = (void * *)T.39_58;
T.41_60 = T.38_57 + T.40_59;
T.42_61 = *T.41_60;
T.43_62 = (java.io.Reader:: *)T.42_61;
T.10_63 = _otable_org.kxml.parser.XmlParser[4];
T.11_64 = (<unnamed type>)T.10_63;
T.44_65 = T.11_64 + this_1;
T.45_66 = *T.44_65;
T.46_67 = T.45_66->length;
T.10_68 = _otable_org.kxml.parser.XmlParser[4];
T.11_69 = (<unnamed type>)T.10_68;
T.47_70 = T.11_69 + this_1;
T.48_71 = *T.47_70;
#slot#3#5_72 = T.43_62 (T.36_55, T.48_71, 0, T.46_67);
Okay, this looks like a pretty straightforward optimzation: we
shouldn't be repeatedly reading _otable_org.kxml.parser.XmlParser[4].
But dom2 doesn't quite do the right thing:
*.LJpc=65:;
T.14_52 = _otable_org.kxml.parser.XmlParser[5];
T.15_53 = (<unnamed type>)T.14_52;
T.35_54 = T.15_53 + this_1;
T.36_55 = *T.35_54;
T.37_56 = (struct java.lang.Object *)T.36_55;
T.38_57 = T.37_56->vtable;
T.39_58 = _otable_org.kxml.parser.XmlParser[7];
T.40_59 = (void * *)T.39_58;
T.41_60 = T.38_57 + T.40_59;
T.42_61 = *T.41_60;
T.43_62 = (java.io.Reader:: *)T.42_61;
T.10_63 = T.10_37;
T.11_64 = T.11_38;
T.44_65 = T.12_39;
T.45_66 = T.13_40;
T.46_67 = 0;
T.10_68 = T.10_37;
T.11_69 = T.11_38;
T.47_70 = T.12_39;
T.48_71 = T.13_40;
#slot#3#5_72 = T.43_62 (T.36_55, T.13_40, 0, 0);
Note that T.46_67 is now 0, rather than T.13_40->length. Somehow,
dom2 has decided that it should be 0, but I can't imagine why.
Ta,
Andrew.