|
@@ -81,10 +81,7 @@ unit optloop;
|
|
|
|
|
|
function replaceloadnodes(var n: tnode; arg: pointer): foreachnoderesult;
|
|
function replaceloadnodes(var n: tnode; arg: pointer): foreachnoderesult;
|
|
begin
|
|
begin
|
|
- if ((n.nodetype=loadn) and (preplaceinfo(arg)^.node.nodetype=loadn) and
|
|
|
|
- (tloadnode(n).symtableentry=tloadnode(preplaceinfo(arg)^.node).symtableentry)) or
|
|
|
|
- ((n.nodetype=temprefn) and (preplaceinfo(arg)^.node.nodetype=temprefn) and
|
|
|
|
- (ttemprefnode(n).tempinfo=ttemprefnode(preplaceinfo(arg)^.node).tempinfo)) then
|
|
|
|
|
|
+ if n.isequal(preplaceinfo(arg)^.node) then
|
|
begin
|
|
begin
|
|
if n.flags*[nf_modify,nf_write,nf_address_taken]<>[] then
|
|
if n.flags*[nf_modify,nf_write,nf_address_taken]<>[] then
|
|
internalerror(2012090402);
|
|
internalerror(2012090402);
|
|
@@ -135,12 +132,12 @@ unit optloop;
|
|
unrollblock:=internalstatements(unrollstatement);
|
|
unrollblock:=internalstatements(unrollstatement);
|
|
|
|
|
|
{ can we get rid completly of the for ? }
|
|
{ can we get rid completly of the for ? }
|
|
- getridoffor:=(unrolls=counts) and not(usesbreakcontinue);
|
|
|
|
|
|
+ getridoffor:=(unrolls=counts) and not(usesbreakcontinue) and
|
|
|
|
+ { TP/Macpas allows assignments to the for-variables, so we cannot get rid of the for }
|
|
|
|
+ ([m_tp7,m_mac]*current_settings.modeswitches=[]);
|
|
|
|
|
|
if getridoffor then
|
|
if getridoffor then
|
|
begin
|
|
begin
|
|
- if not(tfornode(node).left.nodetype in [temprefn,loadn]) then
|
|
|
|
- internalerror(2012090301);
|
|
|
|
replaceinfo.node:=tfornode(node).left;
|
|
replaceinfo.node:=tfornode(node).left;
|
|
replaceinfo.value:=tordconstnode(tfornode(node).right).value;
|
|
replaceinfo.value:=tordconstnode(tfornode(node).right).value;
|
|
end;
|
|
end;
|