mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 13:28:05 +02:00
* some fixes to loop strength reduction
git-svn-id: trunk@43911 -
This commit is contained in:
parent
2f2b378c03
commit
a9a711763f
@ -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),
|
||||
|
Loading…
Reference in New Issue
Block a user