* 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 if torddef(left.resulttype.def).size>torddef(right.resulttype.def).size then
begin begin
right:=ctypeconvnode.create_internal(right,left.resulttype); right:=ctypeconvnode.create_internal(right,left.resulttype);
ttypeconvnode(right).convtype:=tc_bool_2_int; ttypeconvnode(right).convtype:=tc_bool_2_bool;
resulttypepass(right); resulttypepass(right);
end end
else if torddef(left.resulttype.def).size<torddef(right.resulttype.def).size then else if torddef(left.resulttype.def).size<torddef(right.resulttype.def).size then
begin begin
left:=ctypeconvnode.create_internal(left,right.resulttype); left:=ctypeconvnode.create_internal(left,right.resulttype);
ttypeconvnode(left).convtype:=tc_bool_2_int; ttypeconvnode(left).convtype:=tc_bool_2_bool;
resulttypepass(left); resulttypepass(left);
end; end;
case nodetype of case nodetype of

View File

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

View File

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