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