< prev index next >
src/hotspot/share/opto/compile.cpp
Print this page
rev 54102 : 8261812: C2 compilation fails with assert(!had_error) failed: bad dominance
Reviewed-by: kvn, thartmann
@@ -4808,10 +4808,34 @@
bool Compile::randomized_select(int count) {
assert(count > 0, "only positive");
return (os::random() & RANDOMIZED_DOMAIN_MASK) < (RANDOMIZED_DOMAIN / count);
}
+Node* Compile::narrow_value(BasicType bt, Node* value, const Type* type, PhaseGVN* phase, bool transform_res) {
+ if (type != NULL && phase->type(value)->higher_equal(type)) {
+ return value;
+ }
+ Node* result = NULL;
+ if (bt == T_BYTE) {
+ result = phase->transform(new LShiftINode(value, phase->intcon(24)));
+ result = new RShiftINode(result, phase->intcon(24));
+ } else if (bt == T_BOOLEAN) {
+ result = new AndINode(value, phase->intcon(0xFF));
+ } else if (bt == T_CHAR) {
+ result = new AndINode(value,phase->intcon(0xFFFF));
+ } else {
+ assert(bt == T_SHORT, "unexpected narrow type");
+ result = phase->transform(new LShiftINode(value, phase->intcon(16)));
+ result = new RShiftINode(result, phase->intcon(16));
+ }
+ if (transform_res) {
+ result = phase->transform(result);
+ }
+ return result;
+}
+
+
CloneMap& Compile::clone_map() { return _clone_map; }
void Compile::set_clone_map(Dict* d) { _clone_map._dict = d; }
void NodeCloneInfo::dump() const {
tty->print(" {%d:%d} ", idx(), gen());
< prev index next >