From 873208f986f74fa95610b1e83e5ba20d4250a683 Mon Sep 17 00:00:00 2001 From: Joe Groff <arcata@gmail.com> Date: Sat, 12 Nov 2011 19:29:01 -0800 Subject: [PATCH] compiler: more peephole tests for shl/sar --- .../representations-tests.factor | 128 +++++++++++++++++- 1 file changed, 126 insertions(+), 2 deletions(-) diff --git a/basis/compiler/cfg/representations/representations-tests.factor b/basis/compiler/cfg/representations/representations-tests.factor index 04eec8f02f..a289b10a96 100644 --- a/basis/compiler/cfg/representations/representations-tests.factor +++ b/basis/compiler/cfg/representations/representations-tests.factor @@ -6,6 +6,7 @@ math compiler.constants compiler.cfg.representations.conversion compiler.cfg.representations.rewrite compiler.cfg.comparisons make ; +FROM: alien.c-types => char ; IN: compiler.cfg.representations [ { double-rep double-rep } ] [ @@ -496,7 +497,7 @@ cpu x86.32? [ ] unit-test ! Peephole optimization if both input and output of ##shl-imm -! needs to be tagged +! need to be tagged [ V{ T{ ##peek f 0 D 0 } @@ -511,6 +512,25 @@ cpu x86.32? [ } test-peephole ] unit-test +! Peephole optimization if neither input nor output of ##shl-imm need to be tagged +[ + V{ + T{ ##load-integer f 1 100 } + T{ ##shl-imm f 2 1 3 } + T{ ##load-integer f 3 100 } + T{ ##load-integer f 4 100 } + T{ ##store-memory f 2 3 4 0 0 int-rep char } + } +] [ + V{ + T{ ##load-integer f 1 100 } + T{ ##shl-imm f 2 1 3 } + T{ ##load-integer f 3 100 } + T{ ##load-integer f 4 100 } + T{ ##store-memory f 2 3 4 0 0 int-rep char } + } test-peephole +] unit-test + 6 \ vreg-counter set-global ! Peephole optimization if input to ##sar-imm is tagged @@ -529,6 +549,110 @@ cpu x86.32? [ } test-peephole ] unit-test +6 \ vreg-counter set-global + +! (Lack of) peephole optimization if output of ##sar-imm needs to be tagged +[ + V{ + T{ ##load-integer f 1 100 } + T{ ##sar-imm f 7 1 3 } + T{ ##shl-imm f 2 7 $[ tag-bits get ] } + T{ ##replace f 2 D 0 } + } +] [ + V{ + T{ ##load-integer f 1 100 } + T{ ##sar-imm f 2 1 3 } + T{ ##replace f 2 D 0 } + } test-peephole +] unit-test + +! Peephole optimization if input of ##sar-imm is tagged but output is untagged +! need to be tagged +[ + V{ + T{ ##peek f 0 D 0 } + T{ ##sar-imm f 1 0 $[ 3 tag-bits get + ] } + T{ ##load-integer f 3 100 } + T{ ##load-integer f 4 100 } + T{ ##store-memory f 1 3 4 0 0 int-rep char } + } +] [ + V{ + T{ ##peek f 0 D 0 } + T{ ##sar-imm f 1 0 3 } + T{ ##load-integer f 3 100 } + T{ ##load-integer f 4 100 } + T{ ##store-memory f 1 3 4 0 0 int-rep char } + } test-peephole +] unit-test + +! Peephole optimization if neither input nor output of ##sar-imm need to be tagged +[ + V{ + T{ ##load-integer f 1 100 } + T{ ##sar-imm f 2 1 3 } + T{ ##load-integer f 3 100 } + T{ ##load-integer f 4 100 } + T{ ##store-memory f 2 3 4 0 0 int-rep char } + } +] [ + V{ + T{ ##load-integer f 1 100 } + T{ ##sar-imm f 2 1 3 } + T{ ##load-integer f 3 100 } + T{ ##load-integer f 4 100 } + T{ ##store-memory f 2 3 4 0 0 int-rep char } + } test-peephole +] unit-test + +[ + V{ + T{ ##load-vector f 0 B{ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } short-8-rep } + T{ ##select-vector f 1 0 0 short-8-rep } + T{ ##sar-imm f 2 1 3 } + T{ ##load-integer f 3 100 } + T{ ##add f 4 2 3 } + T{ ##load-integer f 5 100 } + T{ ##load-integer f 6 100 } + T{ ##store-memory f 4 5 6 0 0 int-rep char } + } +] [ + V{ + T{ ##load-vector f 0 B{ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } short-8-rep } + T{ ##select-vector f 1 0 0 short-8-rep } + T{ ##sar-imm f 2 1 3 } + T{ ##load-integer f 3 100 } + T{ ##add f 4 2 3 } + T{ ##load-integer f 5 100 } + T{ ##load-integer f 6 100 } + T{ ##store-memory f 4 5 6 0 0 int-rep char } + } test-peephole +] unit-test + +6 \ vreg-counter set-global + +[ + V{ + T{ ##load-vector f 0 B{ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } int-4-rep } + T{ ##select-vector f 1 0 0 int-4-rep } + T{ ##sar-imm f 2 1 3 } + T{ ##load-integer f 3 100 } + T{ ##add f 7 2 3 } + T{ ##shl-imm f 4 7 $[ tag-bits get ] } + T{ ##replace f 4 D 0 } + } +] [ + V{ + T{ ##load-vector f 0 B{ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } int-4-rep } + T{ ##select-vector f 1 0 0 int-4-rep } + T{ ##sar-imm f 2 1 3 } + T{ ##load-integer f 3 100 } + T{ ##add f 4 2 3 } + T{ ##replace f 4 D 0 } + } test-peephole +] unit-test + ! Tag/untag elimination [ V{ @@ -774,4 +898,4 @@ cpu x86.64? [ T{ ##not f 1 0 } T{ ##replace f 1 D 0 } } test-peephole -] unit-test \ No newline at end of file +] unit-test