* some fixes to loop strength reduction

git-svn-id: trunk@43911 -
This commit is contained in:
florian 2020-01-11 16:08:46 +00:00
parent 2f2b378c03
commit a9a711763f

View File

@ -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),