{
if (e->tag != Iex_Const) return False;
switch (e->Iex.Const.con->tag) {
+ case Ico_U1: return toBool( e->Iex.Const.con->Ico.U1 == True);
case Ico_U8: return toBool( e->Iex.Const.con->Ico.U8 == 0xFF);
case Ico_U16: return toBool( e->Iex.Const.con->Ico.U16 == 0xFFFF);
case Ico_U32: return toBool( e->Iex.Const.con->Ico.U32
break;
/* -- And -- */
+ case Iop_And1:
+ e2 = IRExpr_Const(IRConst_U1(toBool(
+ (e->Iex.Binop.arg1->Iex.Const.con->Ico.U1
+ & e->Iex.Binop.arg2->Iex.Const.con->Ico.U1))));
+ break;
case Iop_And8:
e2 = IRExpr_Const(IRConst_U8(toUChar(
(e->Iex.Binop.arg1->Iex.Const.con->Ico.U8
}
break;
+ case Iop_And1:
case Iop_And8:
case Iop_And16:
case Iop_And32:
case Iop_And64:
- /* And8/And16/And32/And64(x,1---1b) ==> x */
+ /* And1/And8/And16/And32/And64(x,1---1b) ==> x */
if (isOnesU(e->Iex.Binop.arg2)) {
e2 = e->Iex.Binop.arg1;
break;
}
- /* And8/And16/And32/And64(1---1b,x) ==> x */
+ /* And1/And8/And16/And32/And64(1---1b,x) ==> x */
if (isOnesU(e->Iex.Binop.arg1)) {
e2 = e->Iex.Binop.arg2;
break;
}
- /* And8/And16/And32/And64(x,0) ==> 0 */
+ /* And1/And8/And16/And32/And64(x,0) ==> 0 */
if (isZeroU(e->Iex.Binop.arg2)) {
e2 = e->Iex.Binop.arg2;
break;
}
- /* And8/And16/And32/And64(0,x) ==> 0 */
+ /* And1/And8/And16/And32/And64(0,x) ==> 0 */
if (isZeroU(e->Iex.Binop.arg1)) {
e2 = e->Iex.Binop.arg1;
break;
}
- /* And8/And16/And32/And64(t,t) ==> t, for some IRTemp t */
+ /* And1/And8/And16/And32/And64(t,t) ==> t, for some IRTemp t */
if (sameIRExprs(env, e->Iex.Binop.arg1, e->Iex.Binop.arg2)) {
e2 = e->Iex.Binop.arg1;
break;