TEST_F(LivenessTest, Loop1) { // Simple loop with one preheader and one back edge. // var a = 0; // while (a == a) { // a = 4; // } // return; // Bitsets are made of: // (constant0, constant4, phi) constchar* expected = "Block 0\n"// entry block " live in: (000)\n" " live out: (110)\n" " kill: (110)\n" "Block 1\n"// pre header " live in: (110)\n" " live out: (010)\n" " kill: (000)\n" "Block 2\n"// loop header " live in: (010)\n" " live out: (010)\n" " kill: (001)\n" "Block 3\n"// back edge " live in: (010)\n" " live out: (010)\n" " kill: (000)\n" "Block 4\n"// return block " live in: (000)\n" " live out: (000)\n" " kill: (000)\n" "Block 5\n"// exit block " live in: (000)\n" " live out: (000)\n" " kill: (000)\n";
TEST_F(LivenessTest, Loop3) { // Test that the returned value stays live in a preceding loop. // var a = 0; // while (a == a) { // a = 4; // } // return 5; // Bitsets are made of: // (constant0, constant5, constant4, phi) constchar* expected = "Block 0\n" " live in: (0000)\n" " live out: (1110)\n" " kill: (1110)\n" "Block 1\n" " live in: (1110)\n" " live out: (0110)\n" " kill: (0000)\n" "Block 2\n"// loop header " live in: (0110)\n" " live out: (0110)\n" " kill: (0001)\n" "Block 3\n"// back edge " live in: (0110)\n" " live out: (0110)\n" " kill: (0000)\n" "Block 4\n"// return block " live in: (0100)\n" " live out: (0000)\n" " kill: (0000)\n" "Block 5\n"// exit block " live in: (0000)\n" " live out: (0000)\n" " kill: (0000)\n";
TEST_F(LivenessTest, Loop4) { // Make sure we support a preheader of a loop not being the first predecessor // in the predecessor list of the header. // var a = 0; // while (a == a) { // a = 4; // } // return a; // Bitsets are made of: // (constant0, constant4, phi) constchar* expected = "Block 0\n" " live in: (000)\n" " live out: (110)\n" " kill: (110)\n" "Block 1\n" " live in: (110)\n" " live out: (110)\n" " kill: (000)\n" "Block 2\n"// loop header " live in: (010)\n" " live out: (011)\n" " kill: (001)\n" "Block 3\n"// back edge " live in: (010)\n" " live out: (010)\n" " kill: (000)\n" "Block 4\n"// pre loop header " live in: (110)\n" " live out: (010)\n" " kill: (000)\n" "Block 5\n"// return block " live in: (001)\n" " live out: (000)\n" " kill: (000)\n" "Block 6\n"// exit block " live in: (000)\n" " live out: (000)\n" " kill: (000)\n";
TEST_F(LivenessTest, Loop5) { // Make sure we create a preheader of a loop when a header originally has two // incoming blocks and one back edge. // Bitsets are made of: // (constant0, constant5, constant4, phi in block 8) constchar* expected = "Block 0\n" " live in: (0000)\n" " live out: (1110)\n" " kill: (1110)\n" "Block 1\n" " live in: (1110)\n" " live out: (0110)\n" " kill: (0000)\n" "Block 2\n" " live in: (0010)\n" " live out: (0000)\n" " kill: (0000)\n" "Block 3\n" " live in: (0100)\n" " live out: (0000)\n" " kill: (0000)\n" "Block 4\n"// loop header " live in: (0001)\n" " live out: (0001)\n" " kill: (0000)\n" "Block 5\n"// back edge " live in: (0001)\n" " live out: (0001)\n" " kill: (0000)\n" "Block 6\n"// return block " live in: (0001)\n" " live out: (0000)\n" " kill: (0000)\n" "Block 7\n"// exit block " live in: (0000)\n" " live out: (0000)\n" " kill: (0000)\n" "Block 8\n"// synthesized pre header " live in: (0000)\n" " live out: (0001)\n" " kill: (0001)\n";
TEST_F(LivenessTest, Loop8) { // var a = 0; // while (a == a) { // a = a + a; // } // return a; // // We want to test that the ins of the loop exit // does contain the phi. // Bitsets are made of: // (constant0, phi, add) constchar* expected = "Block 0\n" " live in: (000)\n" " live out: (100)\n" " kill: (100)\n" "Block 1\n"// pre loop header " live in: (100)\n" " live out: (000)\n" " kill: (000)\n" "Block 2\n"// loop header " live in: (000)\n" " live out: (010)\n" " kill: (010)\n" "Block 3\n"// back edge " live in: (010)\n" " live out: (000)\n" " kill: (001)\n" "Block 4\n"// return block " live in: (010)\n" " live out: (000)\n" " kill: (000)\n" "Block 5\n"// exit block " live in: (000)\n" " live out: (000)\n" " kill: (000)\n";
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.