Mercurial > hg > truffle
comparison graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java @ 2602:0c6564c254af
new node layout: BlockBegin, BlockEnd
-Dc1x.dot=regex for pdf output
escape dot graph labels (<, >, &)
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Fri, 06 May 2011 10:25:37 +0200 |
parents | f1bc67c2d453 |
children | 91d3952f7eb7 |
comparison
equal
deleted
inserted
replaced
2601:224e8b4007bd | 2602:0c6564c254af |
---|---|
558 | 558 |
559 if (x.numberOfCases() == 0 || x.numberOfCases() < C1XOptions.SequentialSwitchLimit) { | 559 if (x.numberOfCases() == 0 || x.numberOfCases() < C1XOptions.SequentialSwitchLimit) { |
560 int len = x.numberOfCases(); | 560 int len = x.numberOfCases(); |
561 for (int i = 0; i < len; i++) { | 561 for (int i = 0; i < len; i++) { |
562 lir.cmp(Condition.EQ, tag, x.keyAt(i)); | 562 lir.cmp(Condition.EQ, tag, x.keyAt(i)); |
563 lir.branch(Condition.EQ, CiKind.Int, x.suxAt(i)); | 563 lir.branch(Condition.EQ, CiKind.Int, x.blockSuccessor(i)); |
564 } | 564 } |
565 lir.jump(x.defaultSuccessor()); | 565 lir.jump(x.defaultSuccessor()); |
566 } else { | 566 } else { |
567 visitSwitchRanges(createLookupRanges(x), tag, x.defaultSuccessor()); | 567 visitSwitchRanges(createLookupRanges(x), tag, x.defaultSuccessor()); |
568 } | 568 } |
823 if (x.numberOfCases() == 0 || x.numberOfCases() <= C1XOptions.SequentialSwitchLimit) { | 823 if (x.numberOfCases() == 0 || x.numberOfCases() <= C1XOptions.SequentialSwitchLimit) { |
824 int loKey = x.lowKey(); | 824 int loKey = x.lowKey(); |
825 int len = x.numberOfCases(); | 825 int len = x.numberOfCases(); |
826 for (int i = 0; i < len; i++) { | 826 for (int i = 0; i < len; i++) { |
827 lir.cmp(Condition.EQ, tag, i + loKey); | 827 lir.cmp(Condition.EQ, tag, i + loKey); |
828 lir.branch(Condition.EQ, CiKind.Int, x.suxAt(i)); | 828 lir.branch(Condition.EQ, CiKind.Int, x.blockSuccessor(i)); |
829 } | 829 } |
830 lir.jump(x.defaultSuccessor()); | 830 lir.jump(x.defaultSuccessor()); |
831 } else { | 831 } else { |
832 SwitchRange[] switchRanges = createLookupRanges(x); | 832 SwitchRange[] switchRanges = createLookupRanges(x); |
833 int rangeDensity = x.numberOfCases() / switchRanges.length; | 833 int rangeDensity = x.numberOfCases() / switchRanges.length; |
1148 List<SwitchRange> res = new ArrayList<SwitchRange>(x.numberOfCases()); | 1148 List<SwitchRange> res = new ArrayList<SwitchRange>(x.numberOfCases()); |
1149 int len = x.numberOfCases(); | 1149 int len = x.numberOfCases(); |
1150 if (len > 0) { | 1150 if (len > 0) { |
1151 BlockBegin defaultSux = x.defaultSuccessor(); | 1151 BlockBegin defaultSux = x.defaultSuccessor(); |
1152 int key = x.keyAt(0); | 1152 int key = x.keyAt(0); |
1153 BlockBegin sux = x.suxAt(0); | 1153 BlockBegin sux = x.blockSuccessor(0); |
1154 SwitchRange range = new SwitchRange(key, sux); | 1154 SwitchRange range = new SwitchRange(key, sux); |
1155 for (int i = 1; i < len; i++) { | 1155 for (int i = 1; i < len; i++) { |
1156 int newKey = x.keyAt(i); | 1156 int newKey = x.keyAt(i); |
1157 BlockBegin newSux = x.suxAt(i); | 1157 BlockBegin newSux = x.blockSuccessor(i); |
1158 if (key + 1 == newKey && sux == newSux) { | 1158 if (key + 1 == newKey && sux == newSux) { |
1159 // still in same range | 1159 // still in same range |
1160 range.highKey = newKey; | 1160 range.highKey = newKey; |
1161 } else { | 1161 } else { |
1162 // skip tests which explicitly dispatch to the default | 1162 // skip tests which explicitly dispatch to the default |
1178 SwitchRange[] createLookupRanges(TableSwitch x) { | 1178 SwitchRange[] createLookupRanges(TableSwitch x) { |
1179 // XXX: try to merge this with the code for LookupSwitch | 1179 // XXX: try to merge this with the code for LookupSwitch |
1180 List<SwitchRange> res = new ArrayList<SwitchRange>(x.numberOfCases()); | 1180 List<SwitchRange> res = new ArrayList<SwitchRange>(x.numberOfCases()); |
1181 int len = x.numberOfCases(); | 1181 int len = x.numberOfCases(); |
1182 if (len > 0) { | 1182 if (len > 0) { |
1183 BlockBegin sux = x.suxAt(0); | 1183 BlockBegin sux = x.blockSuccessor(0); |
1184 int key = x.lowKey(); | 1184 int key = x.lowKey(); |
1185 BlockBegin defaultSux = x.defaultSuccessor(); | 1185 BlockBegin defaultSux = x.defaultSuccessor(); |
1186 SwitchRange range = new SwitchRange(key, sux); | 1186 SwitchRange range = new SwitchRange(key, sux); |
1187 for (int i = 0; i < len; i++, key++) { | 1187 for (int i = 0; i < len; i++, key++) { |
1188 BlockBegin newSux = x.suxAt(i); | 1188 BlockBegin newSux = x.blockSuccessor(i); |
1189 if (sux == newSux) { | 1189 if (sux == newSux) { |
1190 // still in same range | 1190 // still in same range |
1191 range.highKey = key; | 1191 range.highKey = key; |
1192 } else { | 1192 } else { |
1193 // skip tests which explicitly dispatch to the default | 1193 // skip tests which explicitly dispatch to the default |