* fixed not(not()) removal

This commit is contained in:
peter 2002-08-25 09:10:58 +00:00
parent 4aa03c0656
commit 160103faba

View File

@ -45,7 +45,7 @@ interface
function pass_1 : tnode;override;
function det_resulttype:tnode;override;
{ override the following if you want to implement }
{ parts explicitely in the code generator (CEC)
{ parts explicitely in the code generator (CEC)
Should return nil, if everything will be handled
in the code generator
}
@ -340,7 +340,7 @@ implementation
right := nil;
firstpass(result);
end;
function tshlshrnode.det_resulttype:tnode;
var
@ -404,7 +404,7 @@ implementation
regs:=1
end
else
begin
begin
result := first_shlshr64bitint;
if assigned(result) then
exit;
@ -578,25 +578,24 @@ implementation
resulttype:=left.resulttype;
{Try optmimizing ourself away.}
if left.nodetype=notn then
begin
{Double not. Remove both.}
t:=Tnotnode(left).left;
Tnotnode(left).left:=nil;
left:=t;
result:=t;
exit;
end;
if left.nodetype in [ltn,lten,equaln,unequaln,gtn,gten] then
begin
{Not of boolean expression. Turn around the operator and remove
the not.}
result:=left;
left.nodetype:=boolean_reverse[left.nodetype];
left:=nil;
exit;
end;
{ Try optmimizing ourself away }
if left.nodetype=notn then
begin
{ Double not. Remove both }
result:=Tnotnode(left).left;
Tnotnode(left).left:=nil;
exit;
end;
if left.nodetype in [ltn,lten,equaln,unequaln,gtn,gten] then
begin
{ Not of boolean expression. Turn around the operator and remove
the not }
result:=left;
left.nodetype:=boolean_reverse[left.nodetype];
left:=nil;
exit;
end;
{ constant folding }
if (left.nodetype=ordconstn) then
@ -755,7 +754,10 @@ begin
end.
{
$Log$
Revision 1.38 2002-08-15 15:09:42 carl
Revision 1.39 2002-08-25 09:10:58 peter
* fixed not(not()) removal
Revision 1.38 2002/08/15 15:09:42 carl
+ fpu emulation helpers (ppu checking also)
Revision 1.37 2002/08/14 19:26:55 carl