< prev index next >

src/share/vm/opto/castnode.cpp

Print this page




 112             jlong lo_long = min_jint;
 113             jlong hi_long = max_jint;
 114             if (m == BoolTest::le || m == BoolTest::lt) {
 115               hi_long = in2_t->_hi;
 116               if (m == BoolTest::lt) {
 117                 hi_long -= 1;
 118               }
 119             } else if (m == BoolTest::ge || m == BoolTest::gt) {
 120               lo_long = in2_t->_lo;
 121               if (m == BoolTest::gt) {
 122                 lo_long += 1;
 123               }
 124             } else if (m == BoolTest::eq) {
 125               lo_long = in2_t->_lo;
 126               hi_long = in2_t->_hi;
 127             } else if (m == BoolTest::ne) {
 128               // can't do any better
 129             } else {
 130               stringStream ss;
 131               test.dump_on(&ss);
 132               fatal(err_msg_res("unexpected comparison %s", ss.as_string()));
 133             }
 134             int lo_int = (int)lo_long;
 135             int hi_int = (int)hi_long;
 136 
 137             if (lo_long != (jlong)lo_int) {
 138               lo_int = min_jint;
 139             }
 140             if (hi_long != (jlong)hi_int) {
 141               hi_int = max_jint;
 142             }
 143 
 144             t = TypeInt::make(lo_int, hi_int, Type::WidenMax);
 145 
 146             res = res->filter_speculative(t);
 147 
 148             return res;
 149           }
 150         }
 151       }
 152     }




 112             jlong lo_long = min_jint;
 113             jlong hi_long = max_jint;
 114             if (m == BoolTest::le || m == BoolTest::lt) {
 115               hi_long = in2_t->_hi;
 116               if (m == BoolTest::lt) {
 117                 hi_long -= 1;
 118               }
 119             } else if (m == BoolTest::ge || m == BoolTest::gt) {
 120               lo_long = in2_t->_lo;
 121               if (m == BoolTest::gt) {
 122                 lo_long += 1;
 123               }
 124             } else if (m == BoolTest::eq) {
 125               lo_long = in2_t->_lo;
 126               hi_long = in2_t->_hi;
 127             } else if (m == BoolTest::ne) {
 128               // can't do any better
 129             } else {
 130               stringStream ss;
 131               test.dump_on(&ss);
 132               fatal("unexpected comparison %s", ss.as_string());
 133             }
 134             int lo_int = (int)lo_long;
 135             int hi_int = (int)hi_long;
 136 
 137             if (lo_long != (jlong)lo_int) {
 138               lo_int = min_jint;
 139             }
 140             if (hi_long != (jlong)hi_int) {
 141               hi_int = max_jint;
 142             }
 143 
 144             t = TypeInt::make(lo_int, hi_int, Type::WidenMax);
 145 
 146             res = res->filter_speculative(t);
 147 
 148             return res;
 149           }
 150         }
 151       }
 152     }


< prev index next >