mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-11 00:39:41 +01:00
* Don't widen boolean operands of taddnode if they will be converted to pasbool8 immediately thereafter, doing so only causes generation of useless code. Mantis #20843.
git-svn-id: trunk@20376 -
This commit is contained in:
parent
f8f5c3cd23
commit
eda5511ef9
@ -1206,28 +1206,29 @@ implementation
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ 2 booleans? Make them equal to the largest boolean }
|
{ 2 booleans? }
|
||||||
if (is_boolean(ld) and is_boolean(rd)) then
|
if (is_boolean(ld) and is_boolean(rd)) then
|
||||||
begin
|
begin
|
||||||
if (torddef(left.resultdef).size>torddef(right.resultdef).size) or
|
|
||||||
(is_cbool(left.resultdef) and not is_cbool(right.resultdef)) then
|
|
||||||
begin
|
|
||||||
right:=ctypeconvnode.create_internal(right,left.resultdef);
|
|
||||||
ttypeconvnode(right).convtype:=tc_bool_2_bool;
|
|
||||||
typecheckpass(right);
|
|
||||||
end
|
|
||||||
else if (torddef(left.resultdef).size<torddef(right.resultdef).size) or
|
|
||||||
(not is_cbool(left.resultdef) and is_cbool(right.resultdef)) then
|
|
||||||
begin
|
|
||||||
left:=ctypeconvnode.create_internal(left,right.resultdef);
|
|
||||||
ttypeconvnode(left).convtype:=tc_bool_2_bool;
|
|
||||||
typecheckpass(left);
|
|
||||||
end;
|
|
||||||
case nodetype of
|
case nodetype of
|
||||||
xorn,
|
xorn,
|
||||||
andn,
|
andn,
|
||||||
orn:
|
orn:
|
||||||
begin
|
begin
|
||||||
|
{ Make sides equal to the largest boolean }
|
||||||
|
if (torddef(left.resultdef).size>torddef(right.resultdef).size) or
|
||||||
|
(is_cbool(left.resultdef) and not is_cbool(right.resultdef)) then
|
||||||
|
begin
|
||||||
|
right:=ctypeconvnode.create_internal(right,left.resultdef);
|
||||||
|
ttypeconvnode(right).convtype:=tc_bool_2_bool;
|
||||||
|
typecheckpass(right);
|
||||||
|
end
|
||||||
|
else if (torddef(left.resultdef).size<torddef(right.resultdef).size) or
|
||||||
|
(not is_cbool(left.resultdef) and is_cbool(right.resultdef)) then
|
||||||
|
begin
|
||||||
|
left:=ctypeconvnode.create_internal(left,right.resultdef);
|
||||||
|
ttypeconvnode(left).convtype:=tc_bool_2_bool;
|
||||||
|
typecheckpass(left);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
ltn,
|
ltn,
|
||||||
lten,
|
lten,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user