diff --git a/lang/src/son.rs b/lang/src/son.rs index 92d8edd6..dfb41228 100644 --- a/lang/src/son.rs +++ b/lang/src/son.rs @@ -1065,7 +1065,8 @@ impl Nodes { break 'eliminate; } - if self[value].kind != Kind::Load || self[value].outputs.as_slice() != [target] + if self[value].kind != Kind::Load + || self[value].outputs.iter().any(|&n| self[n].kind != Kind::Stre) { for &ele in self[value].outputs.clone().iter().filter(|&&n| n != target) { self[ele].peep_triggers.push(target); diff --git a/lang/tests/son_tests_struct_operators.txt b/lang/tests/son_tests_struct_operators.txt index 37995cd6..1ba0a4bd 100644 --- a/lang/tests/son_tests_struct_operators.txt +++ b/lang/tests/son_tests_struct_operators.txt @@ -1,37 +1,6 @@ main: - ADDI64 r254, r254, -64d - LI64 r3, 1d - ADDI64 r2, r254, 32d - ST r3, r254, 32a, 8h - LI64 r6, 2d - ST r6, r254, 40a, 8h - LI64 r6, -3d - ADDI64 r5, r254, 0d - ADDI64 r11, r254, 48d - ST r6, r254, 0a, 8h - LI64 r6, -4d - BMC r2, r11, 16h - ST r6, r254, 8a, 8h - ADDI64 r3, r5, 16d - LD r9, r254, 56a, 8h - LI64 r8, 4d - LD r10, r254, 48a, 8h - LI64 r11, 3d - BMC r2, r3, 16h - SUB64 r4, r8, r9 - LD r12, r254, 24a, 8h - ADD64 r7, r10, r11 - LD r1, r254, 0a, 8h - SUB64 r8, r11, r10 - LD r2, r254, 16a, 8h - ADD64 r6, r12, r4 - ADD64 r3, r1, r7 - ADD64 r10, r2, r8 - ADD64 r12, r9, r6 - ADD64 r9, r10, r3 - ADD64 r1, r9, r12 - ADDI64 r254, r254, 64d + LI64 r1, 10d JALA r0, r31, 0a -code size: 308 +code size: 29 ret: 10 status: Ok(()) diff --git a/lang/tests/son_tests_wide_ret.txt b/lang/tests/son_tests_wide_ret.txt index 7950daa8..baac64a4 100644 --- a/lang/tests/son_tests_wide_ret.txt +++ b/lang/tests/son_tests_wide_ret.txt @@ -14,30 +14,34 @@ main: ADDI64 r254, r254, 24d JALA r0, r31, 0a maina: - ADDI64 r254, r254, -36d - ST r31, r254, 28a, 8h - ADDI64 r5, r254, 24d + ADDI64 r254, r254, -28d + ST r31, r254, 20a, 8h + ADDI64 r5, r254, 16d JAL r31, r0, :small_struct - ST r1, r254, 24a, 4h - LI8 r11, 0b - ADDI64 r10, r254, 0d - ST r11, r254, 0a, 1h - ST r11, r254, 1a, 1h - ST r11, r254, 2a, 1h - LI8 r4, 3b - ST r4, r254, 3a, 1h - LI8 r7, 1b - ST r7, r254, 4a, 1h - ST r11, r254, 5a, 1h - ST r11, r254, 6a, 1h - ST r11, r254, 7a, 1h - ADDI64 r1, r254, 8d - BMC r10, r1, 8h - ADDI64 r4, r1, 8d - BMC r10, r4, 8h + ST r1, r254, 16a, 4h + LI8 r9, 0b + ADDI64 r1, r254, 0d + ST r9, r254, 0a, 1h + ST r9, r254, 1a, 1h + ST r9, r254, 2a, 1h + LI8 r3, 3b + ST r3, r254, 3a, 1h + LI8 r6, 1b + ST r6, r254, 4a, 1h + ST r9, r254, 5a, 1h + ST r9, r254, 6a, 1h + ST r9, r254, 7a, 1h + ST r9, r254, 8a, 1h + ST r9, r254, 9a, 1h + ST r9, r254, 10a, 1h + ST r3, r254, 11a, 1h + ST r6, r254, 12a, 1h + ST r9, r254, 13a, 1h + ST r9, r254, 14a, 1h + ST r9, r254, 15a, 1h LD r1, r1, 0a, 16h - LD r31, r254, 28a, 8h - ADDI64 r254, r254, 36d + LD r31, r254, 20a, 8h + ADDI64 r254, r254, 28d JALA r0, r31, 0a small_struct: ADDI64 r254, r254, -4d @@ -48,6 +52,6 @@ small_struct: LD r1, r3, 0a, 4h ADDI64 r254, r254, 4d JALA r0, r31, 0a -code size: 498 +code size: 570 ret: 2 status: Ok(())