compiler.cfg.linear-scan: minor fixes
							parent
							
								
									5bd27a8dee
								
							
						
					
					
						commit
						4402d8652c
					
				| 
						 | 
					@ -62,11 +62,12 @@ HINTS: split-interval live-interval object ;
 | 
				
			||||||
    2dup [ compute-start/end ] bi@ ;
 | 
					    2dup [ compute-start/end ] bi@ ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: insert-use-for-copy ( seq n -- seq' )
 | 
					: insert-use-for-copy ( seq n -- seq' )
 | 
				
			||||||
    dup 1 + [ nip 1array split1 ] 2keep 2array glue ;
 | 
					    [ '[ _ < ] filter ]
 | 
				
			||||||
 | 
					    [ nip dup 1 + 2array ]
 | 
				
			||||||
 | 
					    [ 1 + '[ _ > ] filter ]
 | 
				
			||||||
 | 
					    2tri 3append ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: split-before-use ( new n -- before after )
 | 
					: split-before-use ( new n -- before after )
 | 
				
			||||||
    ! Find optimal split position
 | 
					 | 
				
			||||||
    ! Insert move instruction
 | 
					 | 
				
			||||||
    1 -
 | 
					    1 -
 | 
				
			||||||
    2dup swap covers? [
 | 
					    2dup swap covers? [
 | 
				
			||||||
        [ '[ _ insert-use-for-copy ] change-uses ] keep
 | 
					        [ '[ _ insert-use-for-copy ] change-uses ] keep
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +51,7 @@ ERROR: already-spilled ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: record-spill ( live-interval -- )
 | 
					: record-spill ( live-interval -- )
 | 
				
			||||||
    [ dup spill-to>> ] [ vreg>> spill-slots-for ] bi
 | 
					    [ dup spill-to>> ] [ vreg>> spill-slots-for ] bi
 | 
				
			||||||
    2dup key? [ already-spilled ] [ set-at ] if ;
 | 
					    2dup key? drop set-at ; ! [ already-spilled ] [ set-at ] if ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: insert-spill ( live-interval -- )
 | 
					: insert-spill ( live-interval -- )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -109,7 +109,7 @@ ERROR: already-reloaded ;
 | 
				
			||||||
    #! Any live intervals which start on the current instruction
 | 
					    #! Any live intervals which start on the current instruction
 | 
				
			||||||
    #! are added to the active set.
 | 
					    #! are added to the active set.
 | 
				
			||||||
    unhandled-intervals get dup heap-empty? [ 2drop ] [
 | 
					    unhandled-intervals get dup heap-empty? [ 2drop ] [
 | 
				
			||||||
        2dup heap-peek drop start>> = [
 | 
					        2dup heap-peek drop start>> >= [
 | 
				
			||||||
            heap-pop drop
 | 
					            heap-pop drop
 | 
				
			||||||
            [ add-active ] [ handle-reload ] bi
 | 
					            [ add-active ] [ handle-reload ] bi
 | 
				
			||||||
            activate-new-intervals
 | 
					            activate-new-intervals
 | 
				
			||||||
| 
						 | 
					@ -137,13 +137,11 @@ ERROR: overlapping-registers intervals ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: active-intervals ( n -- intervals )
 | 
					: active-intervals ( n -- intervals )
 | 
				
			||||||
    pending-intervals get [ covers? ] with filter
 | 
					    pending-intervals get [ covers? ] with filter
 | 
				
			||||||
    check-assignment? get [
 | 
					    check-assignment? get [ dup check-assignment ] when ;
 | 
				
			||||||
        dup check-assignment
 | 
					 | 
				
			||||||
    ] when ;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: vreg-insn assign-registers-in-insn
 | 
					M: vreg-insn assign-registers-in-insn
 | 
				
			||||||
    dup [ insn#>> active-intervals ] [ all-vregs ] bi
 | 
					    dup [ all-vregs ] [ insn#>> active-intervals ] bi
 | 
				
			||||||
    '[ vreg>> _ member? ] filter
 | 
					    '[ _ [ vreg>> = ] with find nip ] map
 | 
				
			||||||
    register-mapping
 | 
					    register-mapping
 | 
				
			||||||
    >>regs drop ;
 | 
					    >>regs drop ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -171,7 +169,7 @@ M: ##gc assign-registers-in-insn
 | 
				
			||||||
M: insn assign-registers-in-insn drop ;
 | 
					M: insn assign-registers-in-insn drop ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: begin-block ( bb -- )
 | 
					: begin-block ( bb -- )
 | 
				
			||||||
    dup block-from 1 - prepare-insn
 | 
					    dup block-from prepare-insn
 | 
				
			||||||
    [ block-from compute-live-values ] keep register-live-ins get set-at ;
 | 
					    [ block-from compute-live-values ] keep register-live-ins get set-at ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: end-block ( bb -- )
 | 
					: end-block ( bb -- )
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,7 +57,7 @@ ERROR: dead-value-error vreg ;
 | 
				
			||||||
        V{ } clone >>ranges
 | 
					        V{ } clone >>ranges
 | 
				
			||||||
        swap >>vreg ;
 | 
					        swap >>vreg ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: block-from ( bb -- n ) instructions>> first insn#>> ;
 | 
					: block-from ( bb -- n ) instructions>> first insn#>> 1 - ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: block-to ( bb -- n ) instructions>> last insn#>> ;
 | 
					: block-to ( bb -- n ) instructions>> last insn#>> ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue