For more detail what happens and why this conditional handling is necessary:
The sample code is:
int
foo (int a, int b)
{
return (a ? b != 3 : 0);
}
leads for variant without condition boolifying of arms to:
;; Function foo (foo)
foo (int a, int b)
{
int D.1991;
int D.1990;
int D.1989;
<bb 2>:
D.1990_2 = a_1(D) != 0;
D.1991_4 = b_3(D) != 3;
D.1989_5 = D.1991_4 & D.1990_2;
return D.1989_5;
}
with this code we see
;; Function foo (foo)
foo (int a, int b)
{
_Bool D.1992;
_Bool D.1991;
_Bool D.1990;
int D.1989;
<bb 2>:
D.1990_2 = a_1(D) != 0;
D.1991_4 = b_3(D) != 3;
D.1992_5 = D.1991_4 & D.1990_2;
D.1989_6 = (int) D.1992_5;
return D.1989_6;
}
So you see that by this, the SSA variable having _Bool type, as to be
wished, and not being handled as int.
Regards,
Kai