< prev index next > src/hotspot/share/ci/ciConstant.cpp
Print this page
/*
! * Copyright (c) 1999, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
/*
! * Copyright (c) 1999, 2026, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
// ciConstant
//
// This class represents a constant value.
+ ciConstant ciConstant::make_zero_or_null(BasicType bt) {
+ switch (bt) {
+ case T_FLOAT: return ciConstant((jfloat).0f);
+ case T_DOUBLE: return ciConstant((jdouble).0);
+ case T_LONG: return ciConstant((jlong)0L);
+ case T_BOOLEAN:
+ case T_CHAR:
+ case T_BYTE:
+ case T_SHORT:
+ case T_INT:
+ return ciConstant(bt, 0);
+ case T_OBJECT:
+ case T_ARRAY:
+ return ciConstant(bt, CURRENT_ENV->get_object(nullptr));
+ default:
+ ShouldNotReachHere();
+ return ciConstant();
+ }
+ }
+
// ------------------------------------------------------------------
// ciConstant::is_null_or_zero
+ // This assumes `this->is_valid()`, otherwise, `as_object` will assert.
bool ciConstant::is_null_or_zero() const {
if (!is_java_primitive(basic_type())) {
return as_object()->is_null_object();
} else if (type2size[basic_type()] == 1) {
// treat float bits as int, to avoid comparison with -0 and NaN
return false;
}
// ------------------------------------------------------------------
// ciConstant::print
! void ciConstant::print() {
tty->print("<ciConstant type=%s value=",
basictype_to_str(basic_type()));
switch (basic_type()) {
case T_BOOLEAN:
tty->print("%s", bool_to_str(_value._int != 0));
return false;
}
// ------------------------------------------------------------------
// ciConstant::print
! void ciConstant::print() const {
tty->print("<ciConstant type=%s value=",
basictype_to_str(basic_type()));
switch (basic_type()) {
case T_BOOLEAN:
tty->print("%s", bool_to_str(_value._int != 0));
< prev index next >