This is the mail archive of the gcc@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]

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.


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