* optimize <expr> and/or <expr> if they are equal and boolean

git-svn-id: trunk@14714 -
This commit is contained in:
florian 2010-01-17 14:39:58 +00:00
parent cf5c42b596
commit a58e07df38

View File

@ -744,6 +744,35 @@ implementation
exit;
end;
{ the comparison is might be expensive and the nodes are usually only
equal if some previous optimizations were done so don't check
this simplification always
}
if (cs_opt_level2 in current_settings.optimizerswitches) and
is_boolean(left.resultdef) and is_boolean(right.resultdef) and
{ since the expressions might have sideeffects, we may only remove them
if short boolean evaluation is turned on }
(nf_short_bool in flags) then
begin
if left.isequal(right) then
begin
case nodetype of
andn,orn:
begin
result:=left;
left:=nil;
exit;
end;
{
xorn:
begin
result:=cordconstnode.create(0,resultdef,true);
exit;
end;
}
end;
end;
end;
end;