Browse Source

* x86: Reference count fix in CMP/Jcc and TEST/Jcc redirect optimisations

J. Gareth "Curious Kit" Moreton 3 years ago
parent
commit
f5d76c5593
1 changed files with 2 additions and 8 deletions
  1. 2 8
      compiler/x86/aoptx86.pas

+ 2 - 8
compiler/x86/aoptx86.pas

@@ -4949,14 +4949,11 @@ unit aoptx86;
                 if condition_in(taicpu(hp1).condition, taicpu(hp1_dist).condition) then
                   begin
                     { Any registers used here will already be allocated }
-                    if Assigned(JumpLabel_dist) then
-                      JumpLabel_dist.IncRefs;
-
                     if Assigned(JumpLabel) then
                       JumpLabel.DecRefs;
 
                     DebugMsg(SPeepholeOptimization + 'TEST/Jcc/@Lbl/TEST/Jcc -> TEST/Jcc, redirecting first jump', hp1);
-                    taicpu(hp1).loadref(0, taicpu(hp1_dist).oper[0]^.ref^);
+                    taicpu(hp1).loadref(0, taicpu(hp1_dist).oper[0]^.ref^); { This also increases the reference count }
                     Result := True;
                     Exit;
                   end;
@@ -6709,14 +6706,11 @@ unit aoptx86;
                      if IsCmpSubset(taicpu(p_jump).condition, taicpu(hp1_dist).condition) then
                        begin
                          { Any registers used here will already be allocated }
-                         if Assigned(JumpLabel_dist) then
-                           JumpLabel_dist.IncRefs;
-
                          if Assigned(JumpLabel) then
                            JumpLabel.DecRefs;
 
                          DebugMsg(SPeepholeOptimization + 'CMP/Jcc/@Lbl/CMP/Jcc -> CMP/Jcc, redirecting first jump', p_jump);
-                         taicpu(p_jump).loadref(0, taicpu(hp1_dist).oper[0]^.ref^);
+                         taicpu(p_jump).loadref(0, taicpu(hp1_dist).oper[0]^.ref^); { This also increases the reference count }
                          Result := True;
                          { Don't exit yet.  Since p and p_jump haven't actually been
                            removed, we can check for more on this iteration }