* avoid some unnecessary bool->int->bool type conversions

git-svn-id: trunk@3184 -
This commit is contained in:
Jonas Maebe 2006-04-09 18:33:05 +00:00
parent bd27a09918
commit 039e7143f4
3 changed files with 22 additions and 9 deletions

View File

@ -818,13 +818,13 @@ implementation
if torddef(left.resulttype.def).size>torddef(right.resulttype.def).size then
begin
right:=ctypeconvnode.create_internal(right,left.resulttype);
ttypeconvnode(right).convtype:=tc_bool_2_int;
ttypeconvnode(right).convtype:=tc_bool_2_bool;
resulttypepass(right);
end
else if torddef(left.resulttype.def).size<torddef(right.resulttype.def).size then
begin
left:=ctypeconvnode.create_internal(left,right.resulttype);
ttypeconvnode(left).convtype:=tc_bool_2_int;
ttypeconvnode(left).convtype:=tc_bool_2_bool;
resulttypepass(left);
end;
case nodetype of

View File

@ -392,10 +392,18 @@ interface
the bits that define the true status can be outside the limits
of the new size and truncating the register can result in a 0
value }
if resulttype.def.size<left.resulttype.def.size then
second_int_to_bool
else
second_bool_to_int;
if (left.expectloc in [LOC_FLAGS,LOC_JUMP]) then
begin
secondpass(left);
if (left.location.loc <> left.expectloc) then
internalerror(20060409);
location_copy(location,left.location);
end
else
if resulttype.def.size<left.resulttype.def.size then
second_int_to_bool
else
second_bool_to_int;
end;

View File

@ -2023,9 +2023,14 @@ implementation
function ttypeconvnode.first_bool_to_bool : tnode;
begin
first_bool_to_bool:=nil;
expectloc:=LOC_REGISTER;
if registersint<1 then
registersint:=1;
if (left.expectloc in [LOC_FLAGS,LOC_JUMP]) then
expectloc := left.expectloc
else
begin
expectloc:=LOC_REGISTER;
if registersint<1 then
registersint:=1;
end;
end;