#!perl
# Copyright (C) 2005-2007, The Perl Foundation.
# $Id: opt2.t 18563 2007-05-16 00:53:55Z chromatic $
use strict;
use warnings;
use lib qw( . lib ../lib ../../lib );
use Parrot::Test tests => 6;
# these tests are run with -O2 by TestCompiler and show
# generated PASM code for various optimizations at level 2
##############################
pir_2_pasm_is( <<'CODE', <<'OUT', "used once lhs" );
.sub _main
$I1 = 1
$I2 = 2
print $I2
end
.end
CODE
# IMCC does produce b0rken PASM files
# see http://guest@rt.perl.org/rt3/Ticket/Display.html?id=32392
_main:
print 2
end
OUT
##############################
pir_2_pasm_is( <<'CODE', <<'OUT', "constant propogation and resulting dead code" );
.sub _main
set I0, 5
loop:
set I1, 2
add I0, I1
lt I0, 20, loop
print I0
end
.end
CODE
# IMCC does produce b0rken PASM files
# see http://guest@rt.perl.org/rt3/Ticket/Display.html?id=32392
_main:
set I0, 5
loop:
add I0, 2
lt I0, 20, loop
print I0
end
OUT
##############################
pir_2_pasm_is( <<'CODE', <<'OUT', "don't move constant past a label" );
.sub _main
set I1, 10
set I0, 5
lt I1, 20, nxt
add:
add I0, I1, I1
print I0
nxt:
set I1, 20
branch add
.end
CODE
# IMCC does produce b0rken PASM files
# see http://guest@rt.perl.org/rt3/Ticket/Display.html?id=32392
_main:
set I1, 10
set I0, 5
branch nxt
add:
add I0, I1, I1
print I0
nxt:
set I1, 20
branch add
OUT
##############################
pir_2_pasm_is( <<'CODE', <<'OUT', "constant prop and null_i" );
.sub _main
null I0
add I1, I0, 5
print I1
.end
CODE
# IMCC does produce b0rken PASM files
# see http://guest@rt.perl.org/rt3/Ticket/Display.html?id=32392
_main:
print 5
set_returns
returncc
OUT
##############################
SKIP: {
skip( "loop opt disabled for now", 1 );
pir_2_pasm_is( <<'CODE', <<'OUT', "remove invariant from loop" );
.sub _main
set I0, 5
loop:
set I1, 2
add I0, I1
lt I0, 20, loop
next:
print I0
add I0, I1
print I0
lt I1, 4, next
end
.end
CODE
# IMCC does produce b0rken PASM files
# see http://guest@rt.perl.org/rt3/Ticket/Display.html?id=32392
_main:
set I0, 5
set I1, 2
loop:
add I0, 2
lt I0, 20, loop
next:
print I0
add I0, I1
print I0
lt I1, 4, next
end
OUT
}
##############################
pir_2_pasm_is( <<'CODE', <<'OUT', "constant prop repeated" );
.sub _main
.local int a
.local int b
.local int sum
a = 10
b = 5
sum = a + b
print sum
end
.end
CODE
# IMCC does produce b0rken PASM files
# see http://guest@rt.perl.org/rt3/Ticket/Display.html?id=32392
_main:
print 15
end
OUT
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4:
syntax highlighted by Code2HTML, v. 0.9.1