private static LogicNode findSynonym(LogicNode value) { if (value instanceof LogicConstantNode) { LogicConstantNode logicConstantNode = (LogicConstantNode) value; return LogicConstantNode.forBoolean(!logicConstantNode.getValue()); } else if (value instanceof LogicNegationNode) { return ((LogicNegationNode) value).getValue(); } return null; }
private void registerIfNode(IfNode ifNode, BeginNode begin) { final boolean isThenBranch = (begin == ifNode.trueSuccessor()); if (ifNode.condition() instanceof LogicConstantNode) { final LogicConstantNode constCond = (LogicConstantNode) ifNode.condition(); if (isThenBranch != constCond.getValue()) { state.impossiblePath(); // let IfNode(constant) prune the dead-code control-path } } if (state.isUnreachable) { if (!(ifNode.condition() instanceof LogicConstantNode)) { // if condition constant, no need to add a Deopt node postponedDeopts.addDeoptAfter(begin, UnreachedCode); } } else { state.addFact(isThenBranch, ifNode.condition(), begin); } }