ValueKey Value::key() const { switch (opcode()) { case FramePointer: return ValueKey(opcode(), type()); case Identity: case Sqrt: case SExt8: case SExt16: case SExt32: case ZExt32: case Clz: case Trunc: case FRound: case IToD: case DToI32: case Check: return ValueKey(opcode(), type(), child(0)); case Add: case Sub: case Mul: case ChillDiv: case Mod: case BitAnd: case BitOr: case BitXor: case Shl: case SShr: case ZShr: case Equal: case NotEqual: case LessThan: case GreaterThan: case Above: case Below: case AboveEqual: case BelowEqual: case Div: case CheckAdd: case CheckSub: case CheckMul: return ValueKey(opcode(), type(), child(0), child(1)); case Select: return ValueKey(opcode(), type(), child(0), child(1), child(2)); case Const32: return ValueKey(Const32, type(), static_cast<int64_t>(asInt32())); case Const64: return ValueKey(Const64, type(), asInt64()); case ConstDouble: return ValueKey(ConstDouble, type(), asDouble()); case ArgumentReg: return ValueKey( ArgumentReg, type(), static_cast<int64_t>(as<ArgumentRegValue>()->argumentReg().index())); default: return ValueKey(); } }
ValueKey ValueKey::intConstant(Type type, int64_t value) { switch (type) { case Int32: return ValueKey(Const32, Int32, value); case Int64: return ValueKey(Const64, Int64, value); default: RELEASE_ASSERT_NOT_REACHED(); return ValueKey(); } }