[svn:parrot] r44394 - trunk/t/compilers/imcc/reg
bubaflub at svn.parrot.org
bubaflub at svn.parrot.org
Tue Feb 23 18:17:06 UTC 2010
Author: bubaflub
Date: Tue Feb 23 18:17:05 2010
New Revision: 44394
URL: https://trac.parrot.org/parrot/changeset/44394
Log:
convert some tests in t/compilers/imcc/reg/spill.t to PIR
Added:
trunk/t/compilers/imcc/reg/spill_old.t
Modified:
trunk/t/compilers/imcc/reg/spill.t
Modified: trunk/t/compilers/imcc/reg/spill.t
==============================================================================
--- trunk/t/compilers/imcc/reg/spill.t Tue Feb 23 17:39:14 2010 (r44393)
+++ trunk/t/compilers/imcc/reg/spill.t Tue Feb 23 18:17:05 2010 (r44394)
@@ -1,718 +1,372 @@
-#!perl
-# Copyright (C) 2001-2008, Parrot Foundation.
+#!parrot
+# Copyright (C) 2001-2010, Parrot Foundation.
# $Id$
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-use Parrot::Test tests => 9;
+.sub main :main
+ .include 'test_more.pir'
+ plan(78)
+
+ test_allocate_1()
+ test_spill_1()
+ test_pcc_arg_overflow_1()
+ test_spill_4()
+.end
-pir_output_is( <<'CODE', <<'OUT', "allocate 1" );
+.sub test_allocate_1
#
# Test the ability of the register allocator to
# generate spills.
#
-.sub test :main
- $I0 = 0
- $I1 = 1
- $I2 = 2
- $I3 = 3
- $I4 = 4
- $I5 = 5
- $I6 = 6
- $I7 = 7
- $I8 = 8
- $I9 = 9
-
- $I10 = 10
- $I11 = 11
- $I12 = 12
- $I13 = 13
- $I14 = 14
- $I15 = 15
- $I16 = 16
- $I17 = 17
- $I18 = 18
- $I19 = 19
-
- $I20 = 20
- $I21 = 21
- $I22 = 22
- $I23 = 23
- $I24 = 24
- $I25 = 25
- $I26 = 26
- $I27 = 27
- $I28 = 28
- $I29 = 29
-
- $I30 = 30
- $I31 = 31
- $I32 = 32
- $I33 = 33
- $I34 = 34
- $I35 = 35
- $I36 = 36
- $I37 = 37
- $I38 = 38
- $I39 = 39
-
- $I40 = 40
-
- print $I0
- print "\n"
- print $I10
- print "\n"
- print $I20
- print "\n"
- print $I30
- print "\n"
- print $I40
- print "\n"
+ $I0 = 0
+ $I1 = 1
+ $I2 = 2
+ $I3 = 3
+ $I4 = 4
+ $I5 = 5
+ $I6 = 6
+ $I7 = 7
+ $I8 = 8
+ $I9 = 9
+
+ $I10 = 10
+ $I11 = 11
+ $I12 = 12
+ $I13 = 13
+ $I14 = 14
+ $I15 = 15
+ $I16 = 16
+ $I17 = 17
+ $I18 = 18
+ $I19 = 19
+
+ $I20 = 20
+ $I21 = 21
+ $I22 = 22
+ $I23 = 23
+ $I24 = 24
+ $I25 = 25
+ $I26 = 26
+ $I27 = 27
+ $I28 = 28
+ $I29 = 29
+
+ $I30 = 30
+ $I31 = 31
+ $I32 = 32
+ $I33 = 33
+ $I34 = 34
+ $I35 = 35
+ $I36 = 36
+ $I37 = 37
+ $I38 = 38
+ $I39 = 39
+
+ $I40 = 40
+
+ is($I0, 0, "allocate 1")
+ is($I10, 10, "allocate 1")
+ is($I20, 20, "allocate 1")
+ is($I30, 30, "allocate 1")
+ is($I40, 40, "allocate 1")
- end
.end
-CODE
-0
-10
-20
-30
-40
-OUT
-pir_output_is( <<'CODE', <<'OUT', "spill 1" );
+.sub test_spill_1
#
# Test the ability of the register allocator to
# generate spills.
#
-.sub test :main
- $I0 = 0
- $I1 = 1
- $I2 = 2
- $I3 = 3
- $I4 = 4
- $I5 = 5
- $I6 = 6
- $I7 = 7
- $I8 = 8
- $I9 = 9
-
- $I10 = 10
- $I11 = 11
- $I12 = 12
- $I13 = 13
- $I14 = 14
- $I15 = 15
- $I16 = 16
- $I17 = 17
- $I18 = 18
- $I19 = 19
-
- $I20 = 20
- $I21 = 21
- $I22 = 22
- $I23 = 23
- $I24 = 24
- $I25 = 25
- $I26 = 26
- $I27 = 27
- $I28 = 28
- $I29 = 29
-
- $I30 = 30
- $I31 = 31
- $I32 = 32
- $I33 = 33
- $I34 = 34
- $I35 = 35
- $I36 = 36
- $I37 = 37
- $I38 = 38
- $I39 = 39
-
- $I40 = $I0 + $I1
- $I41 = $I2 + $I3
- $I42 = $I4 + $I5
- $I43 = $I6 + $I7
- $I44 = $I8 + $I9
-
- $I50 = $I10 + $I11
- $I51 = $I12 + $I13
- $I52 = $I14 + $I15
- $I53 = $I16 + $I17
- $I54 = $I18 + $I19
-
- $I60 = $I20 + $I21
- $I61 = $I22 + $I23
- $I62 = $I24 + $I25
- $I63 = $I26 + $I27
- $I64 = $I28 + $I29
-
- $I70 = $I30 + $I31
- $I71 = $I32 + $I33
- $I72 = $I34 + $I35
- $I73 = $I36 + $I37
- $I74 = $I38 + $I39
-
- print $I0
- print $I1
- print $I2
- print $I3
- print $I4
- print $I5
- print $I6
- print $I7
- print $I8
- print $I9
- print "\n"
- print $I10
- print $I11
- print $I12
- print $I13
- print $I14
- print $I15
- print $I16
- print $I17
- print $I18
- print $I19
- print "\n"
- print $I20
- print $I21
- print $I22
- print $I23
- print $I24
- print $I25
- print $I26
- print $I27
- print $I28
- print $I29
- print "\n"
- print $I30
- print $I31
- print $I32
- print $I33
- print $I34
- print $I35
- print $I36
- print $I37
- print $I38
- print $I39
- print "\n"
- print $I40
- print $I41
- print $I42
- print $I43
- print $I44
- print "\n"
- print $I50
- print $I51
- print $I52
- print $I53
- print $I54
- print "\n"
- print $I60
- print $I61
- print $I62
- print $I63
- print $I64
- print "\n"
- print $I70
- print $I71
- print $I72
- print $I73
- print $I74
- print "\n"
- end
+ $I0 = 0
+ $I1 = 1
+ $I2 = 2
+ $I3 = 3
+ $I4 = 4
+ $I5 = 5
+ $I6 = 6
+ $I7 = 7
+ $I8 = 8
+ $I9 = 9
+
+ $I10 = 10
+ $I11 = 11
+ $I12 = 12
+ $I13 = 13
+ $I14 = 14
+ $I15 = 15
+ $I16 = 16
+ $I17 = 17
+ $I18 = 18
+ $I19 = 19
+
+ $I20 = 20
+ $I21 = 21
+ $I22 = 22
+ $I23 = 23
+ $I24 = 24
+ $I25 = 25
+ $I26 = 26
+ $I27 = 27
+ $I28 = 28
+ $I29 = 29
+
+ $I30 = 30
+ $I31 = 31
+ $I32 = 32
+ $I33 = 33
+ $I34 = 34
+ $I35 = 35
+ $I36 = 36
+ $I37 = 37
+ $I38 = 38
+ $I39 = 39
+
+ $I40 = $I0 + $I1
+ $I41 = $I2 + $I3
+ $I42 = $I4 + $I5
+ $I43 = $I6 + $I7
+ $I44 = $I8 + $I9
+
+ $I50 = $I10 + $I11
+ $I51 = $I12 + $I13
+ $I52 = $I14 + $I15
+ $I53 = $I16 + $I17
+ $I54 = $I18 + $I19
+
+ $I60 = $I20 + $I21
+ $I61 = $I22 + $I23
+ $I62 = $I24 + $I25
+ $I63 = $I26 + $I27
+ $I64 = $I28 + $I29
+
+ $I70 = $I30 + $I31
+ $I71 = $I32 + $I33
+ $I72 = $I34 + $I35
+ $I73 = $I36 + $I37
+ $I74 = $I38 + $I39
+
+ is($I0, 0, 'spill 1')
+ is($I1, 1, 'spill 1')
+ is($I2, 2, 'spill 1')
+ is($I3, 3, 'spill 1')
+ is($I4, 4, 'spill 1')
+ is($I5, 5, 'spill 1')
+ is($I6, 6, 'spill 1')
+ is($I7, 7, 'spill 1')
+ is($I8, 8, 'spill 1')
+ is($I9, 9, 'spill 1')
+ is($I10, 10, 'spill 1')
+ is($I11, 11, 'spill 1')
+ is($I12, 12, 'spill 1')
+ is($I13, 13, 'spill 1')
+ is($I14, 14, 'spill 1')
+ is($I15, 15, 'spill 1')
+ is($I16, 16, 'spill 1')
+ is($I17, 17, 'spill 1')
+ is($I18, 18, 'spill 1')
+ is($I19, 19, 'spill 1')
+ is($I20, 20, 'spill 1')
+ is($I21, 21, 'spill 1')
+ is($I22, 22, 'spill 1')
+ is($I23, 23, 'spill 1')
+ is($I24, 24, 'spill 1')
+ is($I25, 25, 'spill 1')
+ is($I26, 26, 'spill 1')
+ is($I27, 27, 'spill 1')
+ is($I28, 28, 'spill 1')
+ is($I29, 29, 'spill 1')
+ is($I30, 30, 'spill 1')
+ is($I31, 31, 'spill 1')
+ is($I32, 32, 'spill 1')
+ is($I33, 33, 'spill 1')
+ is($I34, 34, 'spill 1')
+ is($I35, 35, 'spill 1')
+ is($I36, 36, 'spill 1')
+ is($I37, 37, 'spill 1')
+ is($I38, 38, 'spill 1')
+ is($I39, 39, 'spill 1')
+ is($I40, 1, 'spill 1')
+ is($I41, 5, 'spill 1')
+ is($I42, 9, 'spill 1')
+ is($I43, 13, 'spill 1')
+ is($I44, 17, 'spill 1')
+ is($I50, 21, 'spill 1')
+ is($I51, 25, 'spill 1')
+ is($I52, 29, 'spill 1')
+ is($I53, 33, 'spill 1')
+ is($I54, 37, 'spill 1')
+ is($I60, 41, 'spill 1')
+ is($I61, 45, 'spill 1')
+ is($I62, 49, 'spill 1')
+ is($I63, 53, 'spill 1')
+ is($I64, 57, 'spill 1')
+ is($I70, 61, 'spill 1')
+ is($I71, 65, 'spill 1')
+ is($I72, 69, 'spill 1')
+ is($I73, 73, 'spill 1')
+ is($I74, 77, 'spill 1')
.end
-CODE
-0123456789
-10111213141516171819
-20212223242526272829
-30313233343536373839
-1591317
-2125293337
-4145495357
-6165697377
-OUT
-pir_output_is( <<'CODE', <<'OUT', "pcc arg overflow 1" );
+.sub test_pcc_arg_overflow_1
#
# Test the ability of the register allocator in
# combination with PCC calling convention and overflow arguments.
# Slightly redundant with tests in t/syn/pcc.t but please leave.
#
-.sub test :main
- _foo(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40)
- end
+ _foo(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40)
.end
+
.sub _foo
- .param int i1
- .param int i2
- .param int i3
- .param int i4
- .param int i5
- .param int i6
- .param int i7
- .param int i8
- .param int i9
- .param int i10
- .param int i11
- .param int i12
- .param int i13
- .param int i14
- .param int i15
- .param int i16
- .param int i17
- .param int i18
- .param int i19
- .param int i20
- .param int i21
- .param int i22
- .param int i23
- .param int i24
- .param int i25
- .param int i26
- .param int i27
- .param int i28
- .param int i29
- .param int i30
- .param int i31
- .param int i32
- .param int i33
- .param int i34
- .param int i35
- .param int i36
- .param int i37
- .param int i38
- .param int i39
- .param int i40
- print i1
- print "\n"
- print i2
- print "\n"
- print i3
- print "\n"
- print i4
- print "\n"
- print i5
- print "\n"
- print i10
- print "\n"
- print i15
- print "\n"
- print i20
- print "\n"
- print i25
- print "\n"
- print i30
- print "\n"
- print i35
- print "\n"
- print i40
- print "\n"
- end
+ .param int i1
+ .param int i2
+ .param int i3
+ .param int i4
+ .param int i5
+ .param int i6
+ .param int i7
+ .param int i8
+ .param int i9
+ .param int i10
+ .param int i11
+ .param int i12
+ .param int i13
+ .param int i14
+ .param int i15
+ .param int i16
+ .param int i17
+ .param int i18
+ .param int i19
+ .param int i20
+ .param int i21
+ .param int i22
+ .param int i23
+ .param int i24
+ .param int i25
+ .param int i26
+ .param int i27
+ .param int i28
+ .param int i29
+ .param int i30
+ .param int i31
+ .param int i32
+ .param int i33
+ .param int i34
+ .param int i35
+ .param int i36
+ .param int i37
+ .param int i38
+ .param int i39
+ .param int i40
+ is(i1, 1, 'pcc arg overflow 1')
+ is(i2, 2, 'pcc arg overflow 1')
+ is(i3, 3, 'pcc arg overflow 1')
+ is(i4, 4, 'pcc arg overflow 1')
+ is(i5, 5, 'pcc arg overflow 1')
+ is(i10, 10, 'pcc arg overflow 1')
+ is(i15, 15, 'pcc arg overflow 1')
+ is(i20, 20, 'pcc arg overflow 1')
+ is(i25, 25, 'pcc arg overflow 1')
+ is(i30, 30, 'pcc arg overflow 1')
+ is(i35, 35, 'pcc arg overflow 1')
+ is(i40, 40, 'pcc arg overflow 1')
.end
-CODE
-1
-2
-3
-4
-5
-10
-15
-20
-25
-30
-35
-40
-OUT
-pir_output_is( <<'CODE', <<'OUT', "spill 4" );
+.sub test_spill_4
#
# Another spill test
#
-.sub test :main
- $I0 = 0
- $I1 = 1
- $I2 = 2
- $I3 = 3
- $I4 = 4
- $I5 = 5
- $I6 = 6
- $I7 = 7
- $I8 = 8
- $I9 = 9
-
- $I10 = 10
- $I11 = 11
- $I12 = 12
- $I13 = 13
- $I14 = 14
- $I15 = 15
- $I16 = 16
- $I17 = 17
- $I18 = 18
- $I19 = 19
-
- $I20 = 20
- $I21 = 21
- $I22 = 22
- $I23 = 23
- $I24 = 24
- $I25 = 25
- $I26 = 26
- $I27 = 27
- $I28 = 28
- $I29 = 29
-
- $I30 = 30
- $I31 = 31
- $I32 = 32
- $I33 = 33
- $I34 = 34
- $I35 = 35
- $I36 = 36
- $I37 = 37
- $I38 = 38
- $I39 = 39
-
- if $I0 != 0 goto err
- if $I1 != 1 goto err
- if $I2 != 2 goto err
- if $I3 != 3 goto err
- if $I4 != 4 goto err
- if $I5 != 5 goto err
- if $I6 != 6 goto err
- if $I7 != 7 goto err
- if $I8 != 8 goto err
- if $I9 != 9 goto err
- if $I10 != 10 goto err
- if $I11 != 11 goto err
- if $I12 != 12 goto err
- if $I13 != 13 goto err
- if $I14 != 14 goto err
- if $I15 != 15 goto err
- if $I16 != 16 goto err
- if $I17 != 17 goto err
- if $I18 != 18 goto err
- if $I19 != 19 goto err
- if $I20 != 20 goto err
- if $I21 != 21 goto err
- if $I22 != 22 goto err
- if $I23 != 23 goto err
- if $I24 != 24 goto err
- if $I25 != 25 goto err
- if $I26 != 26 goto err
- if $I27 != 27 goto err
- if $I28 != 28 goto err
- if $I29 != 29 goto err
- if $I30 != 30 goto err
- if $I31 != 31 goto err
- if $I32 != 32 goto err
- if $I33 != 33 goto err
- if $I34 != 34 goto err
- if $I35 != 35 goto err
- if $I36 != 36 goto err
- if $I37 != 37 goto err
- if $I38 != 38 goto err
- if $I39 != 39 goto err
-
- print "ok\n"
- end
-err:
- print "nok\n"
- end
-.end
-CODE
-ok
-OUT
-
-pir_output_is( <<'CODE', <<'OUT', "bug #32996" );
-
-.namespace ["Foo"]
-
-.sub __biginit :main
- $S0 = "Foo"
- newclass $P0, $S0
- $P1 = new $S0
- $P1.'method1'()
- $P1.'method2'()
-
- $P2 = new $S0
- $P2.'method1'()
- $P2.'method2'()
-
- $P3 = new $S0
- $P3.'method1'()
- $P3.'method2'()
-
- $P4 = new $S0
- $P4.'method1'()
- $P4.'method2'()
-
- $P5 = new $S0
- $P5.'method1'()
- $P5.'method2'()
-
- $P6 = new $S0
- $P6.'method1'()
- $P6.'method2'()
-
- $P7 = new $S0
- $P7.'method1'()
- $P7.'method2'()
-
- $P8 = new $S0
- $P8.'method1'()
- $P8.'method2'()
-
- $P9 = new $S0
- $P9.'method1'()
- $P9.'method2'()
-
- $P10 = new $S0
- $P10.'method1'()
- $P10.'method2'()
-
- $P11 = new $S0
- $P11.'method1'()
- $P11.'method2'()
-
- $P12 = new $S0
- $P12.'method1'()
- $P12.'method2'()
-
- $P13 = new $S0
- $P13.'method1'()
- $P13.'method2'()
-
- $P14 = new $S0
- $P14.'method1'()
- $P14.'method2'()
-
- $P15 = new $S0
- $P15.'method1'()
- $P15.'method2'()
-
- $P1.'method1'()
- $P1.'method2'()
- $P2.'method1'()
- $P2.'method2'()
- $P3.'method1'()
- $P3.'method2'()
- $P4.'method1'()
- $P4.'method2'()
- $P5.'method1'()
- $P5.'method2'()
- $P6.'method1'()
- $P6.'method2'()
- $P7.'method1'()
- $P7.'method2'()
- $P8.'method1'()
- $P8.'method2'()
- $P9.'method1'()
- $P9.'method2'()
- $P10.'method1'()
- $P10.'method2'()
- $P11.'method1'()
- $P11.'method2'()
- $P12.'method1'()
- $P12.'method2'()
- $P13.'method1'()
- $P13.'method2'()
- $P14.'method1'()
- $P14.'method2'()
- $P15.'method1'()
- $P15.'method2'()
-
- end
-.end
+ $I0 = 0
+ $I1 = 1
+ $I2 = 2
+ $I3 = 3
+ $I4 = 4
+ $I5 = 5
+ $I6 = 6
+ $I7 = 7
+ $I8 = 8
+ $I9 = 9
+
+ $I10 = 10
+ $I11 = 11
+ $I12 = 12
+ $I13 = 13
+ $I14 = 14
+ $I15 = 15
+ $I16 = 16
+ $I17 = 17
+ $I18 = 18
+ $I19 = 19
+
+ $I20 = 20
+ $I21 = 21
+ $I22 = 22
+ $I23 = 23
+ $I24 = 24
+ $I25 = 25
+ $I26 = 26
+ $I27 = 27
+ $I28 = 28
+ $I29 = 29
+
+ $I30 = 30
+ $I31 = 31
+ $I32 = 32
+ $I33 = 33
+ $I34 = 34
+ $I35 = 35
+ $I36 = 36
+ $I37 = 37
+ $I38 = 38
+ $I39 = 39
+
+ if $I0 != 0 goto err
+ if $I1 != 1 goto err
+ if $I2 != 2 goto err
+ if $I3 != 3 goto err
+ if $I4 != 4 goto err
+ if $I5 != 5 goto err
+ if $I6 != 6 goto err
+ if $I7 != 7 goto err
+ if $I8 != 8 goto err
+ if $I9 != 9 goto err
+ if $I10 != 10 goto err
+ if $I11 != 11 goto err
+ if $I12 != 12 goto err
+ if $I13 != 13 goto err
+ if $I14 != 14 goto err
+ if $I15 != 15 goto err
+ if $I16 != 16 goto err
+ if $I17 != 17 goto err
+ if $I18 != 18 goto err
+ if $I19 != 19 goto err
+ if $I20 != 20 goto err
+ if $I21 != 21 goto err
+ if $I22 != 22 goto err
+ if $I23 != 23 goto err
+ if $I24 != 24 goto err
+ if $I25 != 25 goto err
+ if $I26 != 26 goto err
+ if $I27 != 27 goto err
+ if $I28 != 28 goto err
+ if $I29 != 29 goto err
+ if $I30 != 30 goto err
+ if $I31 != 31 goto err
+ if $I32 != 32 goto err
+ if $I33 != 33 goto err
+ if $I34 != 34 goto err
+ if $I35 != 35 goto err
+ if $I36 != 36 goto err
+ if $I37 != 37 goto err
+ if $I38 != 38 goto err
+ if $I39 != 39 goto err
-.sub method1 :method
- print "In method 1\n"
- .begin_return
- .end_return
-.end
-
-.sub method2 :method
- print "In method 2\n"
- .begin_return
- .end_return
-.end
-CODE
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-In method 1
-In method 2
-OUT
-
-sub repeat {
- my ( $template, $count, %substs ) = @_;
- my ( $code, $n, $start );
- foreach ( split( /\n/, $template ) ) {
- $n = $count;
- $start = 0;
- if (/^(.*)=(\w+)=(.*)/) {
- my ( $pre, $key, $post ) = ( $1, $2, $3 );
- if ( $key eq 'ARGS' ) {
- my @params;
- for my $i ( 0 .. $n - 1 ) {
- ( my $new = $substs{$key} ) =~ s/\<index\>/$i/g;
- push @params, $new;
- }
- $code .= $pre . join( ',', @params ) . "$post\n";
- next;
- }
- $start = $n / 2 if ( $key eq 'TESTS2' );
- for my $i ( $start .. $n - 1 ) {
- ( my $new = $substs{$key} ) =~ s/\<index\>/$i/g;
- $code .= "$pre$new$post\n";
- }
- }
- else {
- $code .= "$_\n";
- }
- }
-
- return $code;
-}
-my $template2 = <<'TEMPLATE';
-.sub _main
- =LOCALS=
- =INITS=
- _sub(=ARGS=)
- =TESTS2=
- end
-fail:
- print "failed\n"
- end
-.end
-.sub _sub
- =PARAMS=
- =TESTS=
- print "all params ok\n"
+ ok(1, 'spill 4')
.return()
-fail:
- print "failed\n"
- end
+ err:
+ ok(0, 'spill 4')
.end
-TEMPLATE
-
-my $code = repeat(
- $template2, 18,
- LOCALS => ".local pmc a<index>\n\ta<index> = new 'Integer'",
- INITS => 'a<index> = <index>',
- ARGS => 'a<index>',
- PARAMS => '.param pmc a<index>',
- TESTS => "set \$I0, a<index>\nne \$I0, <index>, fail",
- TESTS2 => "set \$I0, a<index>\nne \$I0, <index>, fail"
-);
-
-pir_output_is( $code, <<'OUT', "overflow pmcs 18 spill" );
-all params ok
-OUT
-
-$code = repeat(
- $template2, 22,
- LOCALS => ".local pmc a<index>\n\ta<index> = new 'Integer'",
- INITS => 'a<index> = <index>',
- ARGS => 'a<index>',
- PARAMS => '.param pmc a<index>',
- TESTS => "set \$I0, a<index>\nne \$I0, <index>, fail",
- TESTS2 => "set \$I0, a<index>\nne \$I0, <index>, fail"
-);
-
-pir_output_is( $code, <<'OUT', "overflow pmcs 22 spill" );
-all params ok
-OUT
-
-$code = repeat(
- $template2, 40,
- LOCALS => ".local pmc a<index>\n\ta<index> = new 'Integer'",
- INITS => 'a<index> = <index>',
- ARGS => 'a<index>',
- PARAMS => '.param pmc a<index>',
- TESTS => "set \$I0, a<index>\nne \$I0, <index>, fail",
- TESTS2 => "set \$I0, a<index>\nne \$I0, <index>, fail"
-);
-
-pir_output_is( $code, <<'OUT', "overflow pmcs 40 spill" );
-all params ok
-OUT
-
-$code = repeat(
- $template2, 60,
- LOCALS => ".local pmc a<index>\n\ta<index> = new 'Integer'",
- INITS => 'a<index> = <index>',
- ARGS => 'a<index>',
- PARAMS => '.param pmc a<index>',
- TESTS => "set \$I0, a<index>\nne \$I0, <index>, fail",
- TESTS2 => "set \$I0, a<index>\nne \$I0, <index>, fail"
-);
-
-pir_output_is( $code, <<'OUT', "overflow pmcs 60 spill" );
-all params ok
-OUT
# Local Variables:
-# mode: cperl
-# cperl-indent-level: 4
+# mode: pir
# fill-column: 100
# End:
-# vim: expandtab shiftwidth=4:
+# vim: expandtab shiftwidth=4 ft=pir:
Added: trunk/t/compilers/imcc/reg/spill_old.t
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/t/compilers/imcc/reg/spill_old.t Tue Feb 23 18:17:05 2010 (r44394)
@@ -0,0 +1,298 @@
+#!perl
+# Copyright (C) 2001-2008, Parrot Foundation.
+# $Id: spill.t 37201 2009-03-08 12:07:48Z fperrad $
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+use Parrot::Test tests => 5;
+
+pir_output_is( <<'CODE', <<'OUT', "bug #32996" );
+
+.namespace ["Foo"]
+
+.sub __biginit :main
+ $S0 = "Foo"
+ newclass $P0, $S0
+ $P1 = new $S0
+ $P1.'method1'()
+ $P1.'method2'()
+
+ $P2 = new $S0
+ $P2.'method1'()
+ $P2.'method2'()
+
+ $P3 = new $S0
+ $P3.'method1'()
+ $P3.'method2'()
+
+ $P4 = new $S0
+ $P4.'method1'()
+ $P4.'method2'()
+
+ $P5 = new $S0
+ $P5.'method1'()
+ $P5.'method2'()
+
+ $P6 = new $S0
+ $P6.'method1'()
+ $P6.'method2'()
+
+ $P7 = new $S0
+ $P7.'method1'()
+ $P7.'method2'()
+
+ $P8 = new $S0
+ $P8.'method1'()
+ $P8.'method2'()
+
+ $P9 = new $S0
+ $P9.'method1'()
+ $P9.'method2'()
+
+ $P10 = new $S0
+ $P10.'method1'()
+ $P10.'method2'()
+
+ $P11 = new $S0
+ $P11.'method1'()
+ $P11.'method2'()
+
+ $P12 = new $S0
+ $P12.'method1'()
+ $P12.'method2'()
+
+ $P13 = new $S0
+ $P13.'method1'()
+ $P13.'method2'()
+
+ $P14 = new $S0
+ $P14.'method1'()
+ $P14.'method2'()
+
+ $P15 = new $S0
+ $P15.'method1'()
+ $P15.'method2'()
+
+ $P1.'method1'()
+ $P1.'method2'()
+ $P2.'method1'()
+ $P2.'method2'()
+ $P3.'method1'()
+ $P3.'method2'()
+ $P4.'method1'()
+ $P4.'method2'()
+ $P5.'method1'()
+ $P5.'method2'()
+ $P6.'method1'()
+ $P6.'method2'()
+ $P7.'method1'()
+ $P7.'method2'()
+ $P8.'method1'()
+ $P8.'method2'()
+ $P9.'method1'()
+ $P9.'method2'()
+ $P10.'method1'()
+ $P10.'method2'()
+ $P11.'method1'()
+ $P11.'method2'()
+ $P12.'method1'()
+ $P12.'method2'()
+ $P13.'method1'()
+ $P13.'method2'()
+ $P14.'method1'()
+ $P14.'method2'()
+ $P15.'method1'()
+ $P15.'method2'()
+
+ end
+.end
+
+.sub method1 :method
+ print "In method 1\n"
+ .begin_return
+ .end_return
+.end
+
+.sub method2 :method
+ print "In method 2\n"
+ .begin_return
+ .end_return
+.end
+CODE
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+In method 1
+In method 2
+OUT
+
+sub repeat {
+ my ( $template, $count, %substs ) = @_;
+ my ( $code, $n, $start );
+ foreach ( split( /\n/, $template ) ) {
+ $n = $count;
+ $start = 0;
+ if (/^(.*)=(\w+)=(.*)/) {
+ my ( $pre, $key, $post ) = ( $1, $2, $3 );
+ if ( $key eq 'ARGS' ) {
+ my @params;
+ for my $i ( 0 .. $n - 1 ) {
+ ( my $new = $substs{$key} ) =~ s/\<index\>/$i/g;
+ push @params, $new;
+ }
+ $code .= $pre . join( ',', @params ) . "$post\n";
+ next;
+ }
+ $start = $n / 2 if ( $key eq 'TESTS2' );
+ for my $i ( $start .. $n - 1 ) {
+ ( my $new = $substs{$key} ) =~ s/\<index\>/$i/g;
+ $code .= "$pre$new$post\n";
+ }
+ }
+ else {
+ $code .= "$_\n";
+ }
+ }
+
+ return $code;
+}
+my $template2 = <<'TEMPLATE';
+.sub _main
+ =LOCALS=
+ =INITS=
+ _sub(=ARGS=)
+ =TESTS2=
+ end
+fail:
+ print "failed\n"
+ end
+.end
+.sub _sub
+ =PARAMS=
+ =TESTS=
+ print "all params ok\n"
+ .return()
+fail:
+ print "failed\n"
+ end
+.end
+TEMPLATE
+
+my $code = repeat(
+ $template2, 18,
+ LOCALS => ".local pmc a<index>\n\ta<index> = new 'Integer'",
+ INITS => 'a<index> = <index>',
+ ARGS => 'a<index>',
+ PARAMS => '.param pmc a<index>',
+ TESTS => "set \$I0, a<index>\nne \$I0, <index>, fail",
+ TESTS2 => "set \$I0, a<index>\nne \$I0, <index>, fail"
+);
+
+pir_output_is( $code, <<'OUT', "overflow pmcs 18 spill" );
+all params ok
+OUT
+
+$code = repeat(
+ $template2, 22,
+ LOCALS => ".local pmc a<index>\n\ta<index> = new 'Integer'",
+ INITS => 'a<index> = <index>',
+ ARGS => 'a<index>',
+ PARAMS => '.param pmc a<index>',
+ TESTS => "set \$I0, a<index>\nne \$I0, <index>, fail",
+ TESTS2 => "set \$I0, a<index>\nne \$I0, <index>, fail"
+);
+
+pir_output_is( $code, <<'OUT', "overflow pmcs 22 spill" );
+all params ok
+OUT
+
+$code = repeat(
+ $template2, 40,
+ LOCALS => ".local pmc a<index>\n\ta<index> = new 'Integer'",
+ INITS => 'a<index> = <index>',
+ ARGS => 'a<index>',
+ PARAMS => '.param pmc a<index>',
+ TESTS => "set \$I0, a<index>\nne \$I0, <index>, fail",
+ TESTS2 => "set \$I0, a<index>\nne \$I0, <index>, fail"
+);
+
+pir_output_is( $code, <<'OUT', "overflow pmcs 40 spill" );
+all params ok
+OUT
+
+$code = repeat(
+ $template2, 60,
+ LOCALS => ".local pmc a<index>\n\ta<index> = new 'Integer'",
+ INITS => 'a<index> = <index>',
+ ARGS => 'a<index>',
+ PARAMS => '.param pmc a<index>',
+ TESTS => "set \$I0, a<index>\nne \$I0, <index>, fail",
+ TESTS2 => "set \$I0, a<index>\nne \$I0, <index>, fail"
+);
+
+pir_output_is( $code, <<'OUT', "overflow pmcs 60 spill" );
+all params ok
+OUT
+
+# Local Variables:
+# mode: cperl
+# cperl-indent-level: 4
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
More information about the parrot-commits
mailing list