Skip to content

Commit ee74875

Browse files
committed
Scan: Fix bug in collect_basic_blocks destroying perf/memory
1 parent 6e1d15e commit ee74875

File tree

2 files changed

+91
-90
lines changed

2 files changed

+91
-90
lines changed

src/Scan.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,6 +1323,7 @@ namespace utility {
13231323

13241324
previous_branch_start = ctx.branch_start;
13251325
last_block.instructions.clear();
1326+
last_block.branches.clear();
13261327
last_block.start = ctx.branch_start;
13271328
last_block.end = ctx.branch_start + ctx.instrux.Length;
13281329
last_block.instruction_count = 0;

test/StressTest.cpp

Lines changed: 90 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -716,7 +716,7 @@ static const uint8_t frozen_synth_if_else[] = {
716716

717717
static const ExpectedBlock expected_synth_if_else[] = {
718718
{ 0, 7, 3, { 10, 7 } },
719-
{ 7, 19, 4, { 10, 7 } },
719+
{ 7, 19, 4, { } },
720720
};
721721

722722
static const uint8_t frozen_synth_loop[] = {
@@ -728,8 +728,8 @@ static const uint8_t frozen_synth_loop[] = {
728728

729729
static const ExpectedBlock expected_synth_loop[] = {
730730
{ 0, 18, 6, { 50, 18 } },
731-
{ 18, 50, 10, { 50, 18, 18, 50 } },
732-
{ 50, 55, 2, { 50, 18, 18, 50 } },
731+
{ 18, 50, 10, { 18, 50 } },
732+
{ 50, 55, 2, { } },
733733
};
734734

735735
static const uint8_t frozen_synth_nested_diamond[] = {
@@ -742,12 +742,12 @@ static const uint8_t frozen_synth_nested_diamond[] = {
742742

743743
static const ExpectedBlock expected_synth_nested_diamond[] = {
744744
{ 0, 12, 3, { 39, 12 } },
745-
{ 12, 16, 2, { 39, 12, 28, 16 } },
746-
{ 16, 28, 4, { 39, 12, 28, 16 } },
747-
{ 28, 39, 4, { 39, 12, 28, 16, 54, 43 } },
748-
{ 39, 43, 2, { 39, 12, 28, 16, 54, 43 } },
749-
{ 43, 54, 4, { 39, 12, 28, 16, 54, 43 } },
750-
{ 54, 68, 5, { 39, 12, 28, 16, 54, 43 } },
745+
{ 12, 16, 2, { 28, 16 } },
746+
{ 16, 28, 4, { } },
747+
{ 28, 39, 4, { } },
748+
{ 39, 43, 2, { 54, 43 } },
749+
{ 43, 54, 4, { } },
750+
{ 54, 68, 5, { } },
751751
};
752752

753753
static const uint8_t frozen_synth_multi_call[] = {
@@ -761,7 +761,7 @@ static const uint8_t frozen_synth_multi_call[] = {
761761

762762
static const ExpectedBlock expected_synth_multi_call[] = {
763763
{ 0, 61, 18, { 79, 61 } },
764-
{ 61, 94, 9, { 79, 61 } },
764+
{ 61, 94, 9, { } },
765765
};
766766

767767
static const uint8_t frozen_synth_many_branches[] = {
@@ -798,31 +798,31 @@ static const uint8_t frozen_synth_many_branches[] = {
798798

799799
static const ExpectedBlock expected_synth_many_branches[] = {
800800
{ 0, 16, 6, { 26, 16 } },
801-
{ 16, 31, 5, { 26, 16, 42, 31 } },
802-
{ 31, 47, 5, { 26, 16, 42, 31, 58, 47 } },
803-
{ 47, 63, 5, { 26, 16, 42, 31, 58, 47, 74, 63 } },
804-
{ 63, 79, 5, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79 } },
805-
{ 79, 95, 5, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95 } },
806-
{ 95, 111, 5, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111 } },
807-
{ 111, 127, 5, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127 } },
808-
{ 127, 149, 7, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149 } },
809-
{ 149, 180, 9, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180 } },
810-
{ 180, 209, 9, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209 } },
811-
{ 209, 236, 8, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236 } },
812-
{ 236, 262, 7, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262 } },
813-
{ 262, 270, 3, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270 } },
814-
{ 270, 282, 4, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270 } },
815-
{ 282, 292, 3, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270, 262, 315, 448, 328, 379, 365, 336, 448 } },
816-
{ 292, 315, 7, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270, 262, 315 } },
817-
{ 315, 328, 4, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270, 262, 315, 448, 328 } },
818-
{ 328, 365, 11, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270, 262, 315, 448, 328, 379, 365 } },
819-
{ 365, 379, 5, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270, 262, 315, 448, 328, 379, 365 } },
820-
{ 379, 403, 9, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270, 262, 315, 448, 328, 379, 365, 336, 448, 415, 403 } },
821-
{ 403, 415, 4, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270, 262, 315, 448, 328, 379, 365, 336, 448, 415, 403 } },
822-
{ 415, 425, 3, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270, 262, 315, 448, 328, 379, 365, 336, 448, 415, 403 } },
823-
{ 425, 429, 1, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270, 262, 315, 448, 328, 379, 365, 336, 448, 415, 403 } },
824-
{ 429, 448, 6, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270, 262, 315, 448, 328, 379, 365, 336, 448 } },
825-
{ 448, 453, 2, { 26, 16, 42, 31, 58, 47, 74, 63, 90, 79, 106, 95, 122, 111, 138, 127, 162, 149, 193, 180, 222, 209, 249, 236, 315, 262, 282, 270, 262, 315, 448, 328, 379, 365, 336, 448 } },
801+
{ 16, 31, 5, { 42, 31 } },
802+
{ 31, 47, 5, { 58, 47 } },
803+
{ 47, 63, 5, { 74, 63 } },
804+
{ 63, 79, 5, { 90, 79 } },
805+
{ 79, 95, 5, { 106, 95 } },
806+
{ 95, 111, 5, { 122, 111 } },
807+
{ 111, 127, 5, { 138, 127 } },
808+
{ 127, 149, 7, { 162, 149 } },
809+
{ 149, 180, 9, { 193, 180 } },
810+
{ 180, 209, 9, { 222, 209 } },
811+
{ 209, 236, 8, { 249, 236 } },
812+
{ 236, 262, 7, { 315, 262 } },
813+
{ 262, 270, 3, { 282, 270 } },
814+
{ 270, 282, 4, { } },
815+
{ 282, 292, 3, { } },
816+
{ 292, 315, 7, { 262, 315 } },
817+
{ 315, 328, 4, { 448, 328 } },
818+
{ 328, 365, 11, { 379, 365 } },
819+
{ 365, 379, 5, { } },
820+
{ 379, 403, 9, { 415, 403 } },
821+
{ 403, 415, 4, { } },
822+
{ 415, 425, 3, { } },
823+
{ 425, 429, 1, { } },
824+
{ 429, 448, 6, { 336, 448 } },
825+
{ 448, 453, 2, { } },
826826
};
827827

828828
static const uint8_t frozen_synth_deep_nested_loops[] = {
@@ -843,15 +843,15 @@ static const uint8_t frozen_synth_deep_nested_loops[] = {
843843

844844
static const ExpectedBlock expected_synth_deep_nested_loops[] = {
845845
{ 0, 32, 8, { 194, 32 } },
846-
{ 32, 43, 4, { 194, 32, 157, 43 } },
847-
{ 43, 62, 5, { 194, 32, 157, 43, 129, 62 } },
848-
{ 62, 84, 8, { 194, 32, 157, 43, 129, 62, 96, 84 } },
849-
{ 84, 96, 4, { 194, 32, 157, 43, 129, 62, 96, 84 } },
850-
{ 96, 106, 3, { 194, 32, 157, 43, 129, 62, 96, 84, 64, 129, 48, 157, 32, 194 } },
851-
{ 106, 129, 7, { 194, 32, 157, 43, 129, 62, 96, 84, 64, 129 } },
852-
{ 129, 157, 10, { 194, 32, 157, 43, 129, 62, 96, 84, 64, 129, 48, 157 } },
853-
{ 157, 194, 10, { 194, 32, 157, 43, 129, 62, 96, 84, 64, 129, 48, 157, 32, 194 } },
854-
{ 194, 203, 3, { 194, 32, 157, 43, 129, 62, 96, 84, 64, 129, 48, 157, 32, 194 } },
846+
{ 32, 43, 4, { 157, 43 } },
847+
{ 43, 62, 5, { 129, 62 } },
848+
{ 62, 84, 8, { 96, 84 } },
849+
{ 84, 96, 4, { } },
850+
{ 96, 106, 3, { } },
851+
{ 106, 129, 7, { 64, 129 } },
852+
{ 129, 157, 10, { 48, 157 } },
853+
{ 157, 194, 10, { 32, 194 } },
854+
{ 194, 203, 3, { } },
855855
};
856856

857857
static const uint8_t frozen_synth_early_returns[] = {
@@ -868,17 +868,17 @@ static const uint8_t frozen_synth_early_returns[] = {
868868

869869
static const ExpectedBlock expected_synth_early_returns[] = {
870870
{ 0, 12, 4, { 18, 12 } },
871-
{ 12, 18, 2, { 18, 12 } },
872-
{ 18, 37, 6, { 18, 12, 43, 37 } },
873-
{ 37, 43, 2, { 18, 12, 43, 37 } },
874-
{ 43, 63, 6, { 18, 12, 43, 37, 64, 63 } },
875-
{ 63, 64, 1, { 18, 12, 43, 37, 64, 63 } },
876-
{ 64, 84, 6, { 18, 12, 43, 37, 64, 63, 90, 84 } },
877-
{ 84, 90, 2, { 18, 12, 43, 37, 64, 63, 90, 84 } },
878-
{ 90, 99, 3, { 18, 12, 43, 37, 64, 63, 90, 84, 105, 99 } },
879-
{ 99, 105, 2, { 18, 12, 43, 37, 64, 63, 90, 84, 105, 99 } },
880-
{ 105, 136, 8, { 18, 12, 43, 37, 64, 63, 90, 84, 105, 99, 140, 136 } },
881-
{ 136, 141, 2, { 18, 12, 43, 37, 64, 63, 90, 84, 105, 99, 140, 136 } },
871+
{ 12, 18, 2, { } },
872+
{ 18, 37, 6, { 43, 37 } },
873+
{ 37, 43, 2, { } },
874+
{ 43, 63, 6, { 64, 63 } },
875+
{ 63, 64, 1, { } },
876+
{ 64, 84, 6, { 90, 84 } },
877+
{ 84, 90, 2, { } },
878+
{ 90, 99, 3, { 105, 99 } },
879+
{ 99, 105, 2, { } },
880+
{ 105, 136, 8, { 140, 136 } },
881+
{ 136, 141, 2, { } },
882882
};
883883

884884
static const uint8_t frozen_synth_else_if_chain[] = {
@@ -905,36 +905,36 @@ static const uint8_t frozen_synth_else_if_chain[] = {
905905

906906
static const ExpectedBlock expected_synth_else_if_chain[] = {
907907
{ 0, 13, 3, { 26, 13 } },
908-
{ 13, 26, 3, { 26, 13 } },
909-
{ 26, 31, 2, { 26, 13, 44, 31 } },
910-
{ 31, 44, 3, { 26, 13, 44, 31 } },
911-
{ 44, 49, 2, { 26, 13, 44, 31, 62, 49 } },
912-
{ 49, 62, 3, { 26, 13, 44, 31, 62, 49 } },
913-
{ 62, 67, 2, { 26, 13, 44, 31, 62, 49, 80, 67 } },
914-
{ 67, 80, 3, { 26, 13, 44, 31, 62, 49, 80, 67 } },
915-
{ 80, 85, 2, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85 } },
916-
{ 85, 98, 3, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85 } },
917-
{ 98, 103, 2, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103 } },
918-
{ 103, 116, 3, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103 } },
919-
{ 116, 121, 2, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121 } },
920-
{ 121, 134, 3, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121 } },
921-
{ 134, 139, 2, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139 } },
922-
{ 139, 152, 3, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139 } },
923-
{ 152, 157, 2, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157 } },
924-
{ 157, 170, 3, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157 } },
925-
{ 170, 175, 2, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175 } },
926-
{ 175, 188, 3, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175 } },
927-
{ 188, 193, 2, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175, 206, 193 } },
928-
{ 193, 206, 3, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175, 206, 193 } },
929-
{ 206, 211, 2, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175, 206, 193, 224, 211 } },
930-
{ 211, 224, 3, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175, 206, 193, 224, 211 } },
931-
{ 224, 229, 2, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175, 206, 193, 224, 211, 242, 229 } },
932-
{ 229, 242, 3, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175, 206, 193, 224, 211, 242, 229 } },
933-
{ 242, 247, 2, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175, 206, 193, 224, 211, 242, 229, 260, 247 } },
934-
{ 247, 260, 3, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175, 206, 193, 224, 211, 242, 229, 260, 247 } },
935-
{ 260, 265, 2, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175, 206, 193, 224, 211, 242, 229, 260, 247, 278, 265 } },
936-
{ 265, 278, 3, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175, 206, 193, 224, 211, 242, 229, 260, 247, 278, 265 } },
937-
{ 278, 303, 7, { 26, 13, 44, 31, 62, 49, 80, 67, 98, 85, 116, 103, 134, 121, 152, 139, 170, 157, 188, 175, 206, 193, 224, 211, 242, 229, 260, 247, 278, 265 } },
908+
{ 13, 26, 3, { } },
909+
{ 26, 31, 2, { 44, 31 } },
910+
{ 31, 44, 3, { } },
911+
{ 44, 49, 2, { 62, 49 } },
912+
{ 49, 62, 3, { } },
913+
{ 62, 67, 2, { 80, 67 } },
914+
{ 67, 80, 3, { } },
915+
{ 80, 85, 2, { 98, 85 } },
916+
{ 85, 98, 3, { } },
917+
{ 98, 103, 2, { 116, 103 } },
918+
{ 103, 116, 3, { } },
919+
{ 116, 121, 2, { 134, 121 } },
920+
{ 121, 134, 3, { } },
921+
{ 134, 139, 2, { 152, 139 } },
922+
{ 139, 152, 3, { } },
923+
{ 152, 157, 2, { 170, 157 } },
924+
{ 157, 170, 3, { } },
925+
{ 170, 175, 2, { 188, 175 } },
926+
{ 175, 188, 3, { } },
927+
{ 188, 193, 2, { 206, 193 } },
928+
{ 193, 206, 3, { } },
929+
{ 206, 211, 2, { 224, 211 } },
930+
{ 211, 224, 3, { } },
931+
{ 224, 229, 2, { 242, 229 } },
932+
{ 229, 242, 3, { } },
933+
{ 242, 247, 2, { 260, 247 } },
934+
{ 247, 260, 3, { } },
935+
{ 260, 265, 2, { 278, 265 } },
936+
{ 265, 278, 3, { } },
937+
{ 278, 303, 7, { } },
938938
};
939939

940940
static const uint8_t frozen_synth_call_branch_interleave[] = {
@@ -955,11 +955,11 @@ static const uint8_t frozen_synth_call_branch_interleave[] = {
955955

956956
static const ExpectedBlock expected_synth_call_branch_interleave[] = {
957957
{ 0, 44, 13, { 56, 44 } },
958-
{ 44, 56, 3, { 56, 44 } },
959-
{ 56, 93, 10, { 56, 44, 111, 93 } },
960-
{ 93, 135, 11, { 56, 44, 111, 93, 176, 135 } },
961-
{ 135, 161, 7, { 56, 44, 111, 93, 176, 135, 176, 161 } },
962-
{ 161, 196, 10, { 56, 44, 111, 93, 176, 135, 176, 161 } },
958+
{ 44, 56, 3, { } },
959+
{ 56, 93, 10, { 111, 93 } },
960+
{ 93, 135, 11, { 176, 135 } },
961+
{ 135, 161, 7, { 176, 161 } },
962+
{ 161, 196, 10, { } },
963963
};
964964

965965
static const uint8_t frozen_synth_long_linear[] = {

0 commit comments

Comments
 (0)