* patch by J. Gareth Moreton: refactoring to standardise the "Peephole Optimization: " prefix on peephole debug messages, part of #38975

git-svn-id: trunk@49493 -
This commit is contained in:
florian 2021-06-09 18:31:52 +00:00
parent 6d287a8db8
commit 214936b90e

View File

@ -327,11 +327,17 @@ Implementation
end; end;
{$ifdef DEBUG_AOPTCPU} {$ifdef DEBUG_AOPTCPU}
const
SPeepholeOptimization: shortstring = 'Peephole Optimization: ';
procedure TCpuAsmOptimizer.DebugMsg(const s: string;p : tai); procedure TCpuAsmOptimizer.DebugMsg(const s: string;p : tai);
begin begin
asml.insertbefore(tai_comment.Create(strpnew(s)), p); asml.insertbefore(tai_comment.Create(strpnew(s)), p);
end; end;
{$else DEBUG_AOPTCPU} {$else DEBUG_AOPTCPU}
const
SPeepholeOptimization = '';
procedure TCpuAsmOptimizer.DebugMsg(const s: string;p : tai);inline; procedure TCpuAsmOptimizer.DebugMsg(const s: string;p : tai);inline;
begin begin
end; end;
@ -376,7 +382,7 @@ Implementation
dealloc:=FindRegDeAlloc(taicpu(p).oper[0]^.reg,tai(movp.Next)); dealloc:=FindRegDeAlloc(taicpu(p).oper[0]^.reg,tai(movp.Next));
if assigned(dealloc) then if assigned(dealloc) then
begin begin
DebugMsg('Peephole Optimization: '+optimizer+' removed superfluous vmov', movp); DebugMsg(SPeepholeOptimization + optimizer + ' removed superfluous vmov', movp);
result:=true; result:=true;
{ taicpu(p).oper[0]^.reg is not used anymore, try to find its allocation { taicpu(p).oper[0]^.reg is not used anymore, try to find its allocation
@ -519,7 +525,7 @@ Implementation
not(RegModifiedBetween(taicpu(hp1).oper[2]^.reg,p,hp1)) and not(RegModifiedBetween(taicpu(hp1).oper[2]^.reg,p,hp1)) and
GenerateARMCode then GenerateARMCode then
begin begin
DebugMsg('Peephole Optimization: Str/LdrAdd/Sub2Str/Ldr Postindex done', p); DebugMsg(SPeepholeOptimization + 'Str/LdrAdd/Sub2Str/Ldr Postindex done', p);
p.oper[1]^.ref^.addressmode:=AM_POSTINDEXED; p.oper[1]^.ref^.addressmode:=AM_POSTINDEXED;
if taicpu(hp1).oper[2]^.typ=top_const then if taicpu(hp1).oper[2]^.typ=top_const then
begin begin
@ -592,7 +598,7 @@ Implementation
begin begin
{ remember last instruction } { remember last instruction }
hp2:=hp1; hp2:=hp1;
DebugMsg('Peephole Optimization: Add/SubLdr2Ldr done', p); DebugMsg(SPeepholeOptimization + 'Add/SubLdr2Ldr done', p);
hp1:=p; hp1:=p;
{ fix all ldr/str } { fix all ldr/str }
while GetNextInstructionUsingReg(hp1, hp1, taicpu(p).oper[0]^.reg) do while GetNextInstructionUsingReg(hp1, hp1, taicpu(p).oper[0]^.reg) do
@ -616,7 +622,7 @@ Implementation
(taicpu(p).oppostfix = PF_None) and (taicpu(p).oppostfix = PF_None) and
LookForPreindexedPattern(taicpu(p)) then LookForPreindexedPattern(taicpu(p)) then
begin begin
DebugMsg('Peephole Optimization: Add/Sub to Preindexed done', p); DebugMsg(SPeepholeOptimization + 'Add/Sub to Preindexed done', p);
RemoveCurrentP(p); RemoveCurrentP(p);
Result:=true; Result:=true;
Exit; Exit;
@ -688,7 +694,7 @@ Implementation
taicpu(hp1).loadreg(2,taicpu(p).oper[2]^.reg); taicpu(hp1).loadreg(2,taicpu(p).oper[2]^.reg);
taicpu(hp1).loadreg(3,oldreg); taicpu(hp1).loadreg(3,oldreg);
DebugMsg('Peephole Optimization: MulAdd2MLA done', p); DebugMsg(SPeepholeOptimization + 'MulAdd2MLA done', p);
end end
else else
begin begin
@ -703,7 +709,7 @@ Implementation
taicpu(hp1).loadreg(2,taicpu(p).oper[1]^.reg); taicpu(hp1).loadreg(2,taicpu(p).oper[1]^.reg);
DebugMsg('Peephole Optimization: MulSub2MLS done', p); DebugMsg(SPeepholeOptimization + 'MulSub2MLS done', p);
AllocRegBetween(taicpu(hp1).oper[1]^.reg,p,hp1,UsedRegs); AllocRegBetween(taicpu(hp1).oper[1]^.reg,p,hp1,UsedRegs);
AllocRegBetween(taicpu(hp1).oper[2]^.reg,p,hp1,UsedRegs); AllocRegBetween(taicpu(hp1).oper[2]^.reg,p,hp1,UsedRegs);
AllocRegBetween(taicpu(hp1).oper[3]^.reg,p,hp1,UsedRegs); AllocRegBetween(taicpu(hp1).oper[3]^.reg,p,hp1,UsedRegs);
@ -817,7 +823,7 @@ Implementation
(taicpu(hp_last).oper[0]^.reg = taicpu(p).oper[0]^.reg) and (taicpu(hp_last).oper[0]^.reg = taicpu(p).oper[0]^.reg) and
assigned(FindRegDealloc(NR_DEFAULTFLAGS,tai(hp1.Next))) then assigned(FindRegDealloc(NR_DEFAULTFLAGS,tai(hp1.Next))) then
begin begin
DebugMsg('Peephole Optimization: OpCmp2OpS done', hp_last); DebugMsg(SPeepholeOptimization + 'OpCmp2OpS done', hp_last);
taicpu(hp_last).oppostfix:=PF_S; taicpu(hp_last).oppostfix:=PF_S;
@ -868,13 +874,13 @@ Implementation
begin begin
if taicpu(hp1).oper[0]^.reg=taicpu(p).oper[0]^.reg then if taicpu(hp1).oper[0]^.reg=taicpu(p).oper[0]^.reg then
begin begin
DebugMsg('Peephole Optimization: LdrLdr2Ldr done', hp1); DebugMsg(SPeepholeOptimization + 'LdrLdr2Ldr done', hp1);
asml.remove(hp1); asml.remove(hp1);
hp1.free; hp1.free;
end end
else else
begin begin
DebugMsg('Peephole Optimization: LdrLdr2LdrMov done', hp1); DebugMsg(SPeepholeOptimization + 'LdrLdr2LdrMov done', hp1);
taicpu(hp1).opcode:=A_MOV; taicpu(hp1).opcode:=A_MOV;
taicpu(hp1).oppostfix:=PF_None; taicpu(hp1).oppostfix:=PF_None;
taicpu(hp1).loadreg(1,taicpu(p).oper[0]^.reg); taicpu(hp1).loadreg(1,taicpu(p).oper[0]^.reg);
@ -900,7 +906,7 @@ Implementation
(abs(taicpu(p).oper[1]^.ref^.offset)<256) and (abs(taicpu(p).oper[1]^.ref^.offset)<256) and
AlignedToQWord(taicpu(p).oper[1]^.ref^) then AlignedToQWord(taicpu(p).oper[1]^.ref^) then
begin begin
DebugMsg('Peephole Optimization: LdrLdr2Ldrd done', p); DebugMsg(SPeepholeOptimization + 'LdrLdr2Ldrd done', p);
taicpu(p).loadref(2,taicpu(p).oper[1]^.ref^); taicpu(p).loadref(2,taicpu(p).oper[1]^.ref^);
taicpu(p).loadreg(1, taicpu(hp1).oper[0]^.reg); taicpu(p).loadreg(1, taicpu(hp1).oper[0]^.reg);
taicpu(p).ops:=3; taicpu(p).ops:=3;
@ -931,7 +937,7 @@ Implementation
not(RegUsedBetween(taicpu(hp1).oper[0]^.reg, p, hp1)) and not(RegUsedBetween(taicpu(hp1).oper[0]^.reg, p, hp1)) and
RegEndOfLife(taicpu(p).oper[0]^.reg, taicpu(hp1)) then RegEndOfLife(taicpu(p).oper[0]^.reg, taicpu(hp1)) then
begin begin
DebugMsg('Peephole Optimization: LdrbAnd2Ldrb done', p); DebugMsg(SPeepholeOptimization + 'LdrbAnd2Ldrb done', p);
taicpu(p).oper[0]^.reg := taicpu(hp1).oper[0]^.reg; taicpu(p).oper[0]^.reg := taicpu(hp1).oper[0]^.reg;
asml.remove(hp1); asml.remove(hp1);
hp1.free; hp1.free;
@ -1019,7 +1025,7 @@ Implementation
hp3.free; hp3.free;
hp4.free; hp4.free;
RemoveCurrentp(p, hp2); RemoveCurrentp(p, hp2);
DebugMsg('Peephole Optimization: Bl2B done', p); DebugMsg(SPeepholeOptimization + 'Bl2B done', p);
Result := True; Result := True;
end; end;
end; end;
@ -1057,7 +1063,7 @@ Implementation
begin begin
if taicpu(hp1).oper[0]^.reg=taicpu(p).oper[0]^.reg then if taicpu(hp1).oper[0]^.reg=taicpu(p).oper[0]^.reg then
begin begin
DebugMsg('Peephole Optimization: StrLdr2StrMov 1 done', hp1); DebugMsg(SPeepholeOptimization + 'StrLdr2StrMov 1 done', hp1);
asml.remove(hp1); asml.remove(hp1);
hp1.free; hp1.free;
end end
@ -1066,7 +1072,7 @@ Implementation
taicpu(hp1).opcode:=A_MOV; taicpu(hp1).opcode:=A_MOV;
taicpu(hp1).oppostfix:=PF_None; taicpu(hp1).oppostfix:=PF_None;
taicpu(hp1).loadreg(1,taicpu(p).oper[0]^.reg); taicpu(hp1).loadreg(1,taicpu(p).oper[0]^.reg);
DebugMsg('Peephole Optimization: StrLdr2StrMov 2 done', hp1); DebugMsg(SPeepholeOptimization + 'StrLdr2StrMov 2 done', hp1);
end; end;
result := True; result := True;
end end
@ -1091,7 +1097,7 @@ Implementation
(taicpu(p).oper[1]^.ref^.index=taicpu(hp1).oper[1]^.ref^.index) and (taicpu(p).oper[1]^.ref^.index=taicpu(hp1).oper[1]^.ref^.index) and
(taicpu(p).oper[1]^.ref^.offset+4=taicpu(hp1).oper[1]^.ref^.offset) then (taicpu(p).oper[1]^.ref^.offset+4=taicpu(hp1).oper[1]^.ref^.offset) then
begin begin
DebugMsg('Peephole Optimization: StrStr2Strd done', p); DebugMsg(SPeepholeOptimization + 'StrStr2Strd done', p);
taicpu(p).oppostfix:=PF_D; taicpu(p).oppostfix:=PF_D;
taicpu(p).loadref(2,taicpu(p).oper[1]^.ref^); taicpu(p).loadref(2,taicpu(p).oper[1]^.ref^);
taicpu(p).loadreg(1, taicpu(hp1).oper[0]^.reg); taicpu(p).loadreg(1, taicpu(hp1).oper[0]^.reg);
@ -1153,7 +1159,7 @@ Implementation
UpdateUsedRegs(TmpUsedRegs, tai(hp1.next)); UpdateUsedRegs(TmpUsedRegs, tai(hp1.next));
if not(RegUsedAfterInstruction(taicpu(p).oper[0]^.reg,hp2,TmpUsedRegs)) then if not(RegUsedAfterInstruction(taicpu(p).oper[0]^.reg,hp2,TmpUsedRegs)) then
begin begin
DebugMsg('Peephole Optimization: removed superfluous 16 Bit zero extension', hp1); DebugMsg(SPeepholeOptimization + 'Removed superfluous 16 Bit zero extension', hp1);
taicpu(hp2).loadreg(0,taicpu(p).oper[1]^.reg); taicpu(hp2).loadreg(0,taicpu(p).oper[1]^.reg);
asml.remove(hp1); asml.remove(hp1);
hp1.free; hp1.free;
@ -1192,7 +1198,7 @@ Implementation
else else
internalerror(2008072803); internalerror(2008072803);
end; end;
DebugMsg('Peephole Optimization: ShiftShift2Shift 1 done', p); DebugMsg(SPeepholeOptimization + 'ShiftShift2Shift 1 done', p);
asml.remove(hp1); asml.remove(hp1);
hp1.free; hp1.free;
hp1 := nil; hp1 := nil;
@ -1230,7 +1236,7 @@ Implementation
if not(RegUsedBetween(taicpu(hp2).oper[0]^.reg,p,hp1)) and if not(RegUsedBetween(taicpu(hp2).oper[0]^.reg,p,hp1)) and
not(RegUsedBetween(taicpu(hp2).oper[0]^.reg,hp1,hp2)) then not(RegUsedBetween(taicpu(hp2).oper[0]^.reg,hp1,hp2)) then
begin begin
DebugMsg('Peephole Optimization: ShiftShiftShift2ShiftShift 1a done', p); DebugMsg(SPeepholeOptimization + 'ShiftShiftShift2ShiftShift 1a done', p);
inc(taicpu(p).oper[2]^.shifterop^.shiftimm,taicpu(hp2).oper[2]^.shifterop^.shiftimm-taicpu(hp1).oper[2]^.shifterop^.shiftimm); inc(taicpu(p).oper[2]^.shifterop^.shiftimm,taicpu(hp2).oper[2]^.shifterop^.shiftimm-taicpu(hp1).oper[2]^.shifterop^.shiftimm);
taicpu(p).oper[0]^.reg:=taicpu(hp2).oper[0]^.reg; taicpu(p).oper[0]^.reg:=taicpu(hp2).oper[0]^.reg;
asml.remove(hp1); asml.remove(hp1);
@ -1250,7 +1256,7 @@ Implementation
end end
else if not(RegUsedBetween(taicpu(hp2).oper[0]^.reg,hp1,hp2)) then else if not(RegUsedBetween(taicpu(hp2).oper[0]^.reg,hp1,hp2)) then
begin begin
DebugMsg('Peephole Optimization: ShiftShiftShift2ShiftShift 1b done', p); DebugMsg(SPeepholeOptimization + 'ShiftShiftShift2ShiftShift 1b done', p);
dec(taicpu(hp1).oper[2]^.shifterop^.shiftimm,taicpu(hp2).oper[2]^.shifterop^.shiftimm); dec(taicpu(hp1).oper[2]^.shifterop^.shiftimm,taicpu(hp2).oper[2]^.shifterop^.shiftimm);
taicpu(hp1).oper[0]^.reg:=taicpu(hp2).oper[0]^.reg; taicpu(hp1).oper[0]^.reg:=taicpu(hp2).oper[0]^.reg;
@ -1276,7 +1282,7 @@ Implementation
begin begin
dec(taicpu(hp1).oper[2]^.shifterop^.shiftimm,taicpu(p).oper[2]^.shifterop^.shiftimm); dec(taicpu(hp1).oper[2]^.shifterop^.shiftimm,taicpu(p).oper[2]^.shifterop^.shiftimm);
taicpu(hp1).oper[1]^.reg:=taicpu(p).oper[1]^.reg; taicpu(hp1).oper[1]^.reg:=taicpu(p).oper[1]^.reg;
DebugMsg('Peephole Optimization: ShiftShiftShift2ShiftShift 2 done', p); DebugMsg(SPeepholeOptimization + 'ShiftShiftShift2ShiftShift 2 done', p);
if taicpu(hp1).oper[2]^.shifterop^.shiftimm=0 then if taicpu(hp1).oper[2]^.shifterop^.shiftimm=0 then
begin begin
taicpu(hp2).oper[1]^.reg:=taicpu(hp1).oper[1]^.reg; taicpu(hp2).oper[1]^.reg:=taicpu(hp1).oper[1]^.reg;
@ -1403,7 +1409,7 @@ Implementation
TransferUsedRegs(TmpUsedRegs); TransferUsedRegs(TmpUsedRegs);
UpdateUsedRegs(TmpUsedRegs, tai(p.next)); UpdateUsedRegs(TmpUsedRegs, tai(p.next));
UpdateUsedRegs(TmpUsedRegs, tai(hpfar1.next)); UpdateUsedRegs(TmpUsedRegs, tai(hpfar1.next));
DebugMsg('Peephole Optimization: MovMUL/MLA2Mov0 done', p); DebugMsg(SPeepholeOptimization + 'MovMUL/MLA2Mov0 done', p);
if taicpu(hpfar1).opcode=A_MUL then if taicpu(hpfar1).opcode=A_MUL then
taicpu(hpfar1).loadconst(1,0) taicpu(hpfar1).loadconst(1,0)
else else
@ -1422,7 +1428,7 @@ Implementation
TransferUsedRegs(TmpUsedRegs); TransferUsedRegs(TmpUsedRegs);
UpdateUsedRegs(TmpUsedRegs, tai(p.next)); UpdateUsedRegs(TmpUsedRegs, tai(p.next));
UpdateUsedRegs(TmpUsedRegs, tai(hpfar1.next)); UpdateUsedRegs(TmpUsedRegs, tai(hpfar1.next));
DebugMsg('Peephole Optimization: MovMLA2MUL 1 done', p); DebugMsg(SPeepholeOptimization + 'MovMLA2MUL 1 done', p);
taicpu(hpfar1).ops:=3; taicpu(hpfar1).ops:=3;
taicpu(hpfar1).opcode:=A_MUL; taicpu(hpfar1).opcode:=A_MUL;
if not(RegUsedAfterInstruction(taicpu(p).oper[0]^.reg,hpfar1,TmpUsedRegs)) then if not(RegUsedAfterInstruction(taicpu(p).oper[0]^.reg,hpfar1,TmpUsedRegs)) then
@ -1452,7 +1458,7 @@ Implementation
MatchOperand(taicpu(hp2).oper[0]^, taicpu(p).oper[0]^) and MatchOperand(taicpu(hp2).oper[0]^, taicpu(p).oper[0]^) and
MatchOperand(taicpu(hp2).oper[1]^, taicpu(p).oper[1]^) do MatchOperand(taicpu(hp2).oper[1]^, taicpu(p).oper[1]^) do
begin begin
DebugMsg('Peephole Optimization: MovStrMov done', hp2); DebugMsg(SPeepholeOptimization + 'MovStrMov done', hp2);
GetNextInstruction(hp2,hp1); GetNextInstruction(hp2,hp1);
asml.remove(hp2); asml.remove(hp2);
hp2.free; hp2.free;
@ -1481,7 +1487,7 @@ Implementation
{ Defer removing the first p until after the while loop } { Defer removing the first p until after the while loop }
if p <> hp1 then if p <> hp1 then
begin begin
DebugMsg('Peephole Optimization: MovMov done', hp1); DebugMsg(SPeepholeOptimization + 'MovMov done', hp1);
asml.remove(hp1); asml.remove(hp1);
hp1.free; hp1.free;
end; end;
@ -1494,7 +1500,7 @@ Implementation
if Result then if Result then
begin begin
DebugMsg('Peephole Optimization: MovMov done', p); DebugMsg(SPeepholeOptimization + 'MovMov done', p);
RemoveCurrentp(p); RemoveCurrentp(p);
Exit; Exit;
end; end;
@ -1539,7 +1545,7 @@ Implementation
not(RegModifiedBetween(taicpu(p).oper[1]^.reg,p,hpfar1)) and not(RegModifiedBetween(taicpu(p).oper[1]^.reg,p,hpfar1)) and
RegEndOfLife(taicpu(p).oper[0]^.reg, taicpu(hpfar1)) then RegEndOfLife(taicpu(p).oper[0]^.reg, taicpu(hpfar1)) then
begin begin
DebugMsg('Peephole Optimization: MovLdr2Ldr done', hpfar1); DebugMsg(SPeepholeOptimization + 'MovLdr2Ldr done', hpfar1);
if (taicpu(hpfar1).oper[1]^.ref^.addressmode = AM_OFFSET) and if (taicpu(hpfar1).oper[1]^.ref^.addressmode = AM_OFFSET) and
(taicpu(hpfar1).oper[1]^.ref^.base = taicpu(p).oper[0]^.reg) then (taicpu(hpfar1).oper[1]^.ref^.base = taicpu(p).oper[0]^.reg) then
taicpu(hpfar1).oper[1]^.ref^.base := taicpu(p).oper[1]^.reg; taicpu(hpfar1).oper[1]^.ref^.base := taicpu(p).oper[1]^.reg;
@ -1586,7 +1592,7 @@ Implementation
((($ffffffff shr taicpu(p).oper[2]^.shifterop^.shiftimm) and taicpu(hpfar1).oper[2]^.val) = ((($ffffffff shr taicpu(p).oper[2]^.shifterop^.shiftimm) and taicpu(hpfar1).oper[2]^.val) =
($ffffffff shr taicpu(p).oper[2]^.shifterop^.shiftimm)) then ($ffffffff shr taicpu(p).oper[2]^.shifterop^.shiftimm)) then
begin begin
DebugMsg('Peephole Optimization: LsrAnd2Lsr done', hpfar1); DebugMsg(SPeepholeOptimization + 'LsrAnd2Lsr done', hpfar1);
taicpu(p).oper[0]^.reg:=taicpu(hpfar1).oper[0]^.reg; taicpu(p).oper[0]^.reg:=taicpu(hpfar1).oper[0]^.reg;
asml.remove(hpfar1); asml.remove(hpfar1);
hpfar1.free; hpfar1.free;
@ -1601,7 +1607,7 @@ Implementation
(taicpu(hpfar1).oper[2]^.val<>0) and (taicpu(hpfar1).oper[2]^.val<>0) and
(BsfDWord(taicpu(hpfar1).oper[2]^.val)>=32-taicpu(p).oper[2]^.shifterop^.shiftimm) then (BsfDWord(taicpu(hpfar1).oper[2]^.val)>=32-taicpu(p).oper[2]^.shifterop^.shiftimm) then
begin begin
DebugMsg('Peephole Optimization: LsrBic2Lsr done', hpfar1); DebugMsg(SPeepholeOptimization + 'LsrBic2Lsr done', hpfar1);
taicpu(p).oper[0]^.reg:=taicpu(hpfar1).oper[0]^.reg; taicpu(p).oper[0]^.reg:=taicpu(hpfar1).oper[0]^.reg;
asml.remove(hpfar1); asml.remove(hpfar1);
hpfar1.free; hpfar1.free;
@ -1704,7 +1710,7 @@ Implementation
asml.insertbefore(hp2, hpfar1); asml.insertbefore(hp2, hpfar1);
asml.remove(hpfar1); asml.remove(hpfar1);
hpfar1.free; hpfar1.free;
DebugMsg('Peephole Optimization: FoldShiftProcess done', hp2); DebugMsg(SPeepholeOptimization + 'FoldShiftProcess done', hp2);
if not Assigned(hp1) then if not Assigned(hp1) then
GetNextInstruction(p, hp1) GetNextInstruction(p, hp1)
@ -1784,7 +1790,7 @@ Implementation
taicpu(hpfar1).oper[1]^.ref^.index := taicpu(p).oper[1]^.reg; taicpu(hpfar1).oper[1]^.ref^.index := taicpu(p).oper[1]^.reg;
taicpu(hpfar1).oper[1]^.ref^.shiftmode := taicpu(p).oper[2]^.shifterop^.shiftmode; taicpu(hpfar1).oper[1]^.ref^.shiftmode := taicpu(p).oper[2]^.shifterop^.shiftmode;
taicpu(hpfar1).oper[1]^.ref^.shiftimm := taicpu(p).oper[2]^.shifterop^.shiftimm; taicpu(hpfar1).oper[1]^.ref^.shiftimm := taicpu(p).oper[2]^.shifterop^.shiftimm;
DebugMsg('Peephole Optimization: FoldShiftLdrStr done', hpfar1); DebugMsg(SPeepholeOptimization + 'FoldShiftLdrStr done', hpfar1);
RemoveCurrentP(p); RemoveCurrentP(p);
Result:=true; Result:=true;
Exit; Exit;
@ -1829,7 +1835,7 @@ Implementation
{ reg1 might not be modified inbetween } { reg1 might not be modified inbetween }
not(RegModifiedBetween(taicpu(p).oper[1]^.reg,p,hp1)) then not(RegModifiedBetween(taicpu(p).oper[1]^.reg,p,hp1)) then
begin begin
DebugMsg('Peephole Optimization: MvnAnd2Bic done', p); DebugMsg(SPeepholeOptimization + 'MvnAnd2Bic done', p);
taicpu(hp1).opcode:=A_BIC; taicpu(hp1).opcode:=A_BIC;
if taicpu(hp1).ops=3 then if taicpu(hp1).ops=3 then
@ -1873,7 +1879,7 @@ Implementation
begin begin
asml.Remove(hp1); asml.Remove(hp1);
hp1.free; hp1.free;
DebugMsg('Peephole Optimization: VMovVMov2VMov done', p); DebugMsg(SPeepholeOptimization + 'VMovVMov2VMov done', p);
{ Can we do it again? } { Can we do it again? }
end; end;
end; end;