Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /