private static void boolean_cmp (OPT_Instruction s, OPT_IR ir) {
private static void boolean_cmp (OPT_Instruction s, OPT_IR ir, boolean cmp32Bit) {
  private static void boolean_cmp (OPT_Instruction s, OPT_IR ir) {    // undo the optimization because it cannot efficiently be generated    OPT_Register res = BooleanCmp.getClearResult(s).register;    OPT_RegisterOperand one = (OPT_RegisterOperand)BooleanCmp.getClearVal1(s);    OPT_Operand two = BooleanCmp.getClearVal2(s);    OPT_ConditionOperand cond = BooleanCmp.getClearCond(s);    res.setSpansBasicBlock();    OPT_BasicBlock BB1 = s.getBasicBlock();    OPT_BasicBlock BB4 = BB1.splitNodeAt(s, ir);    s = s.remove();    OPT_BasicBlock BB2 = BB1.createSubBlock(0, ir);    OPT_BasicBlock BB3 = BB1.createSubBlock(0, ir);    OPT_RegisterOperand t = ir.regpool.makeTempInt();    t.register.setCondition();    OPT_Operator op;    if (two instanceof OPT_IntConstantOperand) {      op = cond.isUNSIGNED() ? PPC_CMPLI : PPC_CMPI;    } else {       op = cond.isUNSIGNED() ? PPC_CMPL : PPC_CMP;    }    BB1.appendInstruction(MIR_Binary.create(op, t, one, two));    BB1.appendInstruction(MIR_CondBranch.create(PPC_BCOND, t.copyD2U(),                                                 OPT_PowerPCConditionOperand.get(cond), BB3.makeJumpTarget(),                                                new OPT_BranchProfileOperand()));    BB2.appendInstruction(MIR_Unary.create(PPC_LDI, I(res), IC(0)));    BB2.appendInstruction(MIR_Branch.create(PPC_B, BB4.makeJumpTarget()));    BB3.appendInstruction(MIR_Unary.create(PPC_LDI, I(res), IC(1)));    // fix CFG    BB1.insertOut(BB2);    BB1.insertOut(BB3);    BB2.insertOut(BB4);    BB3.insertOut(BB4);    ir.cfg.linkInCodeOrder(BB1, BB2);    ir.cfg.linkInCodeOrder(BB2, BB3);    ir.cfg.linkInCodeOrder(BB3, BB4);  }