3303 {
3304 if (!HasUses() && !CanDeoptimize()) return nullptr;
3305
3306
3309 return value_defn;
3310 }
3311
3313 if (box_defn != nullptr) {
3314
3316 return box_defn->value()->definition();
3317 }
3318
3319 if ((box_defn->from_representation() == kUnboxedDouble) &&
3321 Definition* replacement = new DoubleToFloatInstr(
3324 return replacement;
3325 }
3326
3327 if ((box_defn->from_representation() == kUnboxedFloat) &&
3329 Definition* replacement = new FloatToDoubleInstr(
3332 return replacement;
3333 }
3334 }
3335
3338 if (val.IsInteger()) {
3340 flow_graph->zone(),
3342 return flow_graph->GetConstant(double_val, kUnboxedDouble);
3343 } else if (val.IsDouble()) {
3344 return flow_graph->GetConstant(val, kUnboxedDouble);
3345 }
3346 }
3347
3350 if (val.IsInteger()) {
3351 double narrowed_val =
3352 static_cast<float>(Integer::Cast(val).AsDoubleValue());
3353 return flow_graph->GetConstant(
3355 kUnboxedFloat);
3356 } else if (val.IsDouble()) {
3357 double narrowed_val = static_cast<float>(Double::Cast(val).value());
3358 return flow_graph->GetConstant(
3360 kUnboxedFloat);
3361 }
3362 }
3363
3364 return this;
3365}
static constexpr intptr_t kNone
static DoublePtr NewCanonical(double d)
static Object & ZoneHandle()
const Object & BoundConstant() const
Definition * definition() const