staticclass Foo { int field0; int field1; int field2; int field3; int field4;
};
/// CHECK-START: void Main.test1(boolean, int, int, int, int, int) register (after) /// CHECK: name "B0" /// CHECK-NOT: ParallelMove /// CHECK: name "B1" /// CHECK-NOT: end_block /// CHECK: If /// CHECK-NOT: ParallelMove /// CHECK: name "B3" /// CHECK-NOT: end_block /// CHECK: InstanceFieldSet // We could check here that there is a parallel move, but it's only valid // for some architectures (for example x86), as other architectures may // not do move at all. /// CHECK: end_block /// CHECK-NOT: ParallelMove
publicstaticvoid test1(boolean z, int a, int b, int c, int d, int m) { int e = live1; int f = live2; int g = live3; int j = live0; if (z) {
} else { // Create enough live instructions to force spilling on x86. int h = live4; int i = live5;
foo.field2 = e + i + h;
foo.field3 = f + i + h;
foo.field4 = g + i + h;
foo.field0 = h;
foo.field1 = i + h;
}
live1 = e + f + g + j;
}
/// CHECK-START: void Main.test2(boolean, int, int, int, int, int) register (after) /// CHECK: name "B0" /// CHECK-NOT: ParallelMove /// CHECK: name "B1" /// CHECK-NOT: end_block /// CHECK: If /// CHECK-NOT: ParallelMove /// CHECK: name "B3" /// CHECK-NOT: end_block /// CHECK: InstanceFieldSet // We could check here that there is a parallel move, but it's only valid // for some architectures (for example x86), as other architectures may // not do move at all. /// CHECK: end_block /// CHECK-NOT: ParallelMove
publicstaticvoid test2(boolean z, int a, int b, int c, int d, int m) { int e = live1; int f = live2; int g = live3; int j = live0; if (z) { if (y) { int h = live4; int i = live5;
foo.field2 = e + i + h;
foo.field3 = f + i + h;
foo.field4 = g + i + h;
foo.field0 = h;
foo.field1 = i + h;
}
}
live1 = e + f + g + j;
}
/// CHECK-START: void Main.test3(boolean, int, int, int, int, int) register (after) /// CHECK: name "B0" /// CHECK-NOT: ParallelMove /// CHECK: name "B1" publicstaticvoid test3(boolean z, int a, int b, int c, int d, int m) { // Same version as test2, but with branches reversed, to ensure // whatever linear order is computed, we will get the same results. int e = live1; int f = live2; int g = live3; int j = live0; if (z) {
live1 = e;
} else { if (y) {
live1 = e;
} else { int h = live4; int i = live5;
foo.field2 = e + i + h;
foo.field3 = f + i + h;
foo.field4 = g + i + h;
foo.field0 = h;
foo.field1 = i + h;
}
}
live1 = e + f + g + j;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.