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 }
|