Skip to content

Commit d71d2a7

Browse files
#57 The eq() function illustrates a scenario that causes rename() call to interference graph for non-existent interference. This occurs with the Boissinot simple SSA destruction but not with the Briggs version.
1 parent e3ae2f7 commit d71d2a7

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed

optvm/src/test/java/com/compilerprogramming/ezlang/compiler/TestSSATransform.java

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3683,4 +3683,121 @@ func main()->Int
36833683
L1:
36843684
""", result);
36853685
}
3686+
3687+
@Test
3688+
public void testSSA21()
3689+
{
3690+
String src = """
3691+
func eq(a: [Int], b: [Int], n: Int)->Int
3692+
{
3693+
var result = 1
3694+
var i = 0
3695+
while (i < n)
3696+
{
3697+
if (a[i] != b[i])
3698+
{
3699+
result = 0
3700+
break
3701+
}
3702+
i = i + 1
3703+
}
3704+
return result
3705+
}
3706+
""";
3707+
String result = compileSrc(src);
3708+
Assert.assertEquals("""
3709+
func eq
3710+
Before SSA
3711+
==========
3712+
L0:
3713+
arg a
3714+
arg b
3715+
arg n
3716+
result = 1
3717+
i = 0
3718+
goto L2
3719+
L2:
3720+
%t5 = i<n
3721+
if %t5 goto L3 else goto L4
3722+
L3:
3723+
%t6 = a[i]
3724+
%t7 = b[i]
3725+
%t8 = %t6!=%t7
3726+
if %t8 goto L5 else goto L6
3727+
L5:
3728+
result = 0
3729+
goto L4
3730+
L4:
3731+
ret result
3732+
goto L1
3733+
L1:
3734+
L6:
3735+
%t9 = i+1
3736+
i = %t9
3737+
goto L2
3738+
After SSA
3739+
=========
3740+
L0:
3741+
arg a_0
3742+
arg b_0
3743+
arg n_0
3744+
result_0 = 1
3745+
i_0 = 0
3746+
goto L2
3747+
L2:
3748+
i_1 = phi(i_0, i_2)
3749+
%t5_0 = i_1<n_0
3750+
if %t5_0 goto L3 else goto L4
3751+
L3:
3752+
%t6_0 = a_0[i_1]
3753+
%t7_0 = b_0[i_1]
3754+
%t8_0 = %t6_0!=%t7_0
3755+
if %t8_0 goto L5 else goto L6
3756+
L5:
3757+
result_1 = 0
3758+
goto L4
3759+
L4:
3760+
result_2 = phi(result_0, result_1)
3761+
ret result_2
3762+
goto L1
3763+
L1:
3764+
L6:
3765+
%t9_0 = i_1+1
3766+
i_2 = %t9_0
3767+
goto L2
3768+
After exiting SSA
3769+
=================
3770+
L0:
3771+
arg a_0
3772+
arg b_0
3773+
arg n_0
3774+
result_0 = 1
3775+
i_0 = 0
3776+
i_1 = i_0
3777+
goto L2
3778+
L2:
3779+
%t5_0 = i_1<n_0
3780+
result_2 = result_0
3781+
if %t5_0 goto L3 else goto L4
3782+
L3:
3783+
%t6_0 = a_0[i_1]
3784+
%t7_0 = b_0[i_1]
3785+
%t8_0 = %t6_0!=%t7_0
3786+
if %t8_0 goto L5 else goto L6
3787+
L5:
3788+
result_1 = 0
3789+
result_2 = result_1
3790+
goto L4
3791+
L4:
3792+
ret result_2
3793+
goto L1
3794+
L1:
3795+
L6:
3796+
%t9_0 = i_1+1
3797+
i_2 = %t9_0
3798+
i_1 = i_2
3799+
goto L2
3800+
""", result);
3801+
}
3802+
36863803
}

0 commit comments

Comments
 (0)