./trunk/gcc121/vcs_diff_compiler.patch 2026-06-20-00:03
> uname -a Linux cfarm121 7.0.12+deb14-powerpc64 #1 SMP PREEMPT Debian 7.0.12-1 (2026-06-09) ppc64 GNU/Linux
diff --git a/compiler/powerpc/itcpugas.pas b/compiler/powerpc/itcpugas.pas
index 8479e2e8b0..cb92cc3bab 100644
--- a/compiler/powerpc/itcpugas.pas
+++ b/compiler/powerpc/itcpugas.pas
@@ -153,4 +153,8 @@ implementation
result:=generic_regname(r);
end;
+{$ifdef ENABLE_OPTS_LOCALLY}
+{$pop}
+{$endif ENABLE_OPTS_LOCALLY}
+
end.
diff --git a/compiler/ppcgen/aoptppc.pas b/compiler/ppcgen/aoptppc.pas
index 6c2dcbb7db..756d74becf 100644
--- a/compiler/ppcgen/aoptppc.pas
+++ b/compiler/ppcgen/aoptppc.pas
@@ -31,6 +31,8 @@
Type
TPPCAsmOptimizer = class(TAsmOptimizer)
function RegLoadedWithNewValue(reg : tregister; hp : tai) : boolean; override;
+ function RegModifiedByInstruction(Reg: TRegister; p1: tai): boolean; override;
+ function InstructionLoadsFromReg(const reg: TRegister; const hp: tai): boolean; override;
End;
Implementation
@@ -81,5 +83,46 @@ TPPCAsmOptimizer = class(TAsmOptimizer)
;
end;
end;
+ function TPPCAsmOptimizer.RegModifiedByInstruction(Reg: TRegister; p1: tai): boolean;
+ var
+ i : Longint;
+ begin
+ result:=false;
+ for i:=0 to taicpu(p1).ops-1 do
+ if (taicpu(p1).oper[i]^.typ=top_reg) and (taicpu(p1).oper[i]^.reg=Reg) and (taicpu(p1).spilling_get_operation_type(i) in [operand_write,operand_readwrite]) then
+ begin
+ result:=true;
+ exit;
+ end;
+ end;
+
+ function TPPCAsmOptimizer.InstructionLoadsFromReg(const reg: TRegister; const hp: tai): boolean;
+ var
+ p: taicpu;
+ i: longint;
+ begin
+ result:=false;
+ if not (assigned(hp) and (hp.typ=ait_instruction)) then
+ exit;
+ p:=taicpu(hp);
+
+ i:=0;
+ while(ioperand_write);
+ top_ref:
+ result:=
+ (p.oper[I]^.ref^.base=reg) or
+ (p.oper[I]^.ref^.index=reg);
+ else
+ ;
+ end;
+ if result then exit; {Bailout if we found something}
+ Inc(I);
+ end;
+ end;
+
End.