Login  Register

Re: A minor issue with register allocator

Posted by Igor Stasenko on Jul 02, 2007; 9:56am
URL: https://forum.world.st/A-minor-issue-with-register-allocator-tp133467p133472.html

Another observation:

Something prevents to make full optimisation of following intermediate

#(#block 1 #(#push #ebp) #(#mov #esp #ebp))
#(#block 3 #(#mov #(#mem #(#add #ebp -4)) 't1') #(#mov #(#mem #(#add
#ebp -8)) 't2'))
#(#block 5 #(#mov #(#add 't1' 't2') 't3') #(#jmp #block4))
#(#block 4)
#(#block 6 #(#mov 't3' #eax) #(#jmp #block2))
#(#block 2 #(#mov #ebp #esp) #(#pop #ebp) #(#ret))

into just:
#(#(#block 1 #(#push #ebp) #(#mov #esp #ebp))
#(#block 3 #(#mov #(-8 #ebp) #eax) #(#add #(-4 #ebp) #eax))
#(#block 2 #(#mov #ebp #esp) #(#pop #ebp) #(#ret)))

it generates following instead:
#(#(#block 1 #(#push #ebp) #(#mov #esp #ebp))
#(#block 3 #(#mov #(-4 #ebp) #ebx) #(#mov #(-8 #ebp) #eax))
#(#block 5 #(#add #ebx #eax))
#(#block 4)
#(#block 6)
#(#block 2 #(#mov #ebp #esp) #(#pop #ebp) #(#ret)))

which uses 1 extra register and 1 more instruction comparing to
previous output. Its not very important, i'm just curious what can
prevent it from optimizing ? is this because movs and add placed in
separate blocks, or because there is jumps (which is removed later,
but prevent to fully optimize the code)? Maybe its better to put jumps
remover before register allocation?
_______________________________________________
Exupery mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/exupery