From a9a711763f0f41b97f806beaa2509ad77ebd7542 Mon Sep 17 00:00:00 2001 From: florian <florian@freepascal.org> Date: Sat, 11 Jan 2020 16:08:46 +0000 Subject: [PATCH] * some fixes to loop strength reduction git-svn-id: trunk@43911 - --- compiler/optloop.pas | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/compiler/optloop.pas b/compiler/optloop.pas index 1da515b247..6621c7de75 100644 --- a/compiler/optloop.pas +++ b/compiler/optloop.pas @@ -287,6 +287,7 @@ unit optloop; function findpreviousstrengthreduction : boolean; var i : longint; + hp : tnode; begin result:=false; for i:=0 to inductionexprs.count-1 do @@ -294,16 +295,17 @@ unit optloop; { do we already maintain one expression? } if tnode(inductionexprs[i]).isequal(n) then begin - n.free; case n.nodetype of muln: - n:=ctemprefnode.create(ttempcreatenode(templist[i])); + hp:=ctemprefnode.create(ttempcreatenode(templist[i])); vecn: - n:=ctypeconvnode.create_internal(cderefnode.create(ctemprefnode.create( + hp:=ctypeconvnode.create_internal(cderefnode.create(ctemprefnode.create( ttempcreatenode(templist[i]))),n.resultdef); else internalerror(200809211); end; + n.free; + n:=hp; result:=true; exit; end; @@ -429,14 +431,14 @@ unit optloop; if lnf_backward in tfornode(arg).loopflags then addstatement(calccodestatements, - geninlinenode(in_dec_x,false, + cinlinenode.createintern(in_dec_x,false, ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create( - cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),nil)))) + cordconstnode.create(tcgvecnode(n).get_mul_size,sizeuinttype,false),nil)))) else addstatement(calccodestatements, - geninlinenode(in_inc_x,false, + cinlinenode.createintern(in_inc_x,false, ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create( - cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),nil)))); + cordconstnode.create(tcgvecnode(n).get_mul_size,sizeuinttype,false),nil)))); addstatement(initcodestatements,tempnode); addstatement(initcodestatements,cassignmentnode.create(ctemprefnode.create(tempnode),