simplify sub and sub-imm
							parent
							
								
									826464724e
								
							
						
					
					
						commit
						04cb320c55
					
				| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
USING: kernel accessors combinators classes math layouts
 | 
			
		||||
compiler.cfg.instructions
 | 
			
		||||
compiler.cfg.value-numbering.graph
 | 
			
		||||
compiler.cfg.value-numbering.expressions ;
 | 
			
		||||
compiler.cfg.value-numbering.expressions locals ;
 | 
			
		||||
IN: compiler.cfg.value-numbering.simplify
 | 
			
		||||
 | 
			
		||||
! Return value of f means we didn't simplify.
 | 
			
		||||
| 
						 | 
				
			
			@ -42,6 +42,13 @@ M: unary-expr simplify*
 | 
			
		|||
        [ 2drop f ]
 | 
			
		||||
    } cond ; inline
 | 
			
		||||
 | 
			
		||||
: simplify-sub ( expr -- vn/expr/f )
 | 
			
		||||
    >binary-expr< {
 | 
			
		||||
        { [ 2dup eq? ] [ 2drop T{ constant-expr f f 0 } ] }
 | 
			
		||||
        { [ dup expr-zero? ] [ drop ] }
 | 
			
		||||
        [ 2drop f ]
 | 
			
		||||
    } cond ; inline
 | 
			
		||||
 | 
			
		||||
: useless-shift? ( in1 in2 -- ? )
 | 
			
		||||
    over op>> \ ##shl-imm eq?
 | 
			
		||||
    [ [ in2>> ] [ expr>vn ] bi* = ] [ 2drop f ] if ; inline
 | 
			
		||||
| 
						 | 
				
			
			@ -54,6 +61,8 @@ M: binary-expr simplify*
 | 
			
		|||
    dup op>> {
 | 
			
		||||
        { \ ##add [ simplify-add ] }
 | 
			
		||||
        { \ ##add-imm [ simplify-add ] }
 | 
			
		||||
        { \ ##sub [ simplify-sub ] }
 | 
			
		||||
        { \ ##sub-imm [ simplify-sub ] }
 | 
			
		||||
        { \ ##shr-imm [ simplify-shift ] }
 | 
			
		||||
        { \ ##sar-imm [ simplify-shift ] }
 | 
			
		||||
        [ 2drop f ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue