]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/useless-conditionals/useless-conditionals.factor
Switch to https urls
[factor.git] / basis / compiler / cfg / useless-conditionals / useless-conditionals.factor
1 ! Copyright (C) 2008, 2010 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors combinators.short-circuit compiler.cfg
4 compiler.cfg.instructions compiler.cfg.rpo
5 compiler.cfg.utilities kernel sequences vectors ;
6 IN: compiler.cfg.useless-conditionals
7
8 : delete-conditional? ( bb -- ? )
9     {
10         [
11             instructions>> last {
12                 [ ##compare-branch? ]
13                 [ ##compare-imm-branch? ]
14                 [ ##compare-integer-branch? ]
15                 [ ##compare-integer-imm-branch? ]
16                 [ ##compare-float-ordered-branch? ]
17                 [ ##compare-float-unordered-branch? ]
18             } 1||
19         ]
20         [ successors>> first2 [ skip-empty-blocks ] bi@ eq? ]
21     } 1&& ;
22
23 : delete-conditional ( bb -- )
24     [ first skip-empty-blocks 1vector ] change-successors
25     instructions>> [ pop* ] [ [ ##branch new-insn ] dip push ] bi ;
26
27 : delete-useless-conditionals ( cfg -- )
28     [
29         [
30             dup delete-conditional? [ delete-conditional ] [ drop ] if
31         ] each-basic-block
32     ]
33     [ cfg-changed ] [ predecessors-changed ] tri ;