OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 } | 119 } |
120 return 0xffffffff; | 120 return 0xffffffff; |
121 } | 121 } |
122 | 122 |
123 | 123 |
124 void Range::AddConstant(int32_t value) { | 124 void Range::AddConstant(int32_t value) { |
125 if (value == 0) return; | 125 if (value == 0) return; |
126 bool may_overflow = false; // Overflow is ignored here. | 126 bool may_overflow = false; // Overflow is ignored here. |
127 lower_ = AddWithoutOverflow(lower_, value, &may_overflow); | 127 lower_ = AddWithoutOverflow(lower_, value, &may_overflow); |
128 upper_ = AddWithoutOverflow(upper_, value, &may_overflow); | 128 upper_ = AddWithoutOverflow(upper_, value, &may_overflow); |
| 129 #ifdef DEBUG |
129 Verify(); | 130 Verify(); |
| 131 #endif |
130 } | 132 } |
131 | 133 |
132 | 134 |
133 void Range::Intersect(Range* other) { | 135 void Range::Intersect(Range* other) { |
134 upper_ = Min(upper_, other->upper_); | 136 upper_ = Min(upper_, other->upper_); |
135 lower_ = Max(lower_, other->lower_); | 137 lower_ = Max(lower_, other->lower_); |
136 bool b = CanBeMinusZero() && other->CanBeMinusZero(); | 138 bool b = CanBeMinusZero() && other->CanBeMinusZero(); |
137 set_can_be_minus_zero(b); | 139 set_can_be_minus_zero(b); |
138 } | 140 } |
139 | 141 |
(...skipping 26 matching lines...) Expand all Loading... |
166 } | 168 } |
167 set_can_be_minus_zero(false); | 169 set_can_be_minus_zero(false); |
168 } | 170 } |
169 | 171 |
170 | 172 |
171 bool Range::AddAndCheckOverflow(Range* other) { | 173 bool Range::AddAndCheckOverflow(Range* other) { |
172 bool may_overflow = false; | 174 bool may_overflow = false; |
173 lower_ = AddWithoutOverflow(lower_, other->lower(), &may_overflow); | 175 lower_ = AddWithoutOverflow(lower_, other->lower(), &may_overflow); |
174 upper_ = AddWithoutOverflow(upper_, other->upper(), &may_overflow); | 176 upper_ = AddWithoutOverflow(upper_, other->upper(), &may_overflow); |
175 KeepOrder(); | 177 KeepOrder(); |
| 178 #ifdef DEBUG |
176 Verify(); | 179 Verify(); |
| 180 #endif |
177 return may_overflow; | 181 return may_overflow; |
178 } | 182 } |
179 | 183 |
180 | 184 |
181 bool Range::SubAndCheckOverflow(Range* other) { | 185 bool Range::SubAndCheckOverflow(Range* other) { |
182 bool may_overflow = false; | 186 bool may_overflow = false; |
183 lower_ = SubWithoutOverflow(lower_, other->upper(), &may_overflow); | 187 lower_ = SubWithoutOverflow(lower_, other->upper(), &may_overflow); |
184 upper_ = SubWithoutOverflow(upper_, other->lower(), &may_overflow); | 188 upper_ = SubWithoutOverflow(upper_, other->lower(), &may_overflow); |
185 KeepOrder(); | 189 KeepOrder(); |
| 190 #ifdef DEBUG |
186 Verify(); | 191 Verify(); |
| 192 #endif |
187 return may_overflow; | 193 return may_overflow; |
188 } | 194 } |
189 | 195 |
190 | 196 |
191 void Range::KeepOrder() { | 197 void Range::KeepOrder() { |
192 if (lower_ > upper_) { | 198 if (lower_ > upper_) { |
193 int32_t tmp = lower_; | 199 int32_t tmp = lower_; |
194 lower_ = upper_; | 200 lower_ = upper_; |
195 upper_ = tmp; | 201 upper_ = tmp; |
196 } | 202 } |
197 } | 203 } |
198 | 204 |
199 | 205 |
| 206 #ifdef DEBUG |
200 void Range::Verify() const { | 207 void Range::Verify() const { |
201 ASSERT(lower_ <= upper_); | 208 ASSERT(lower_ <= upper_); |
202 } | 209 } |
| 210 #endif |
203 | 211 |
204 | 212 |
205 bool Range::MulAndCheckOverflow(Range* other) { | 213 bool Range::MulAndCheckOverflow(Range* other) { |
206 bool may_overflow = false; | 214 bool may_overflow = false; |
207 int v1 = MulWithoutOverflow(lower_, other->lower(), &may_overflow); | 215 int v1 = MulWithoutOverflow(lower_, other->lower(), &may_overflow); |
208 int v2 = MulWithoutOverflow(lower_, other->upper(), &may_overflow); | 216 int v2 = MulWithoutOverflow(lower_, other->upper(), &may_overflow); |
209 int v3 = MulWithoutOverflow(upper_, other->lower(), &may_overflow); | 217 int v3 = MulWithoutOverflow(upper_, other->lower(), &may_overflow); |
210 int v4 = MulWithoutOverflow(upper_, other->upper(), &may_overflow); | 218 int v4 = MulWithoutOverflow(upper_, other->upper(), &may_overflow); |
211 lower_ = Min(Min(v1, v2), Min(v3, v4)); | 219 lower_ = Min(Min(v1, v2), Min(v3, v4)); |
212 upper_ = Max(Max(v1, v2), Max(v3, v4)); | 220 upper_ = Max(Max(v1, v2), Max(v3, v4)); |
| 221 #ifdef DEBUG |
213 Verify(); | 222 Verify(); |
| 223 #endif |
214 return may_overflow; | 224 return may_overflow; |
215 } | 225 } |
216 | 226 |
217 | 227 |
218 const char* HType::ToString() { | 228 const char* HType::ToString() { |
219 switch (type_) { | 229 switch (type_) { |
220 case kTagged: return "tagged"; | 230 case kTagged: return "tagged"; |
221 case kTaggedPrimitive: return "primitive"; | 231 case kTaggedPrimitive: return "primitive"; |
222 case kTaggedNumber: return "number"; | 232 case kTaggedNumber: return "number"; |
223 case kSmi: return "smi"; | 233 case kSmi: return "smi"; |
224 case kHeapNumber: return "heap-number"; | 234 case kHeapNumber: return "heap-number"; |
225 case kString: return "string"; | 235 case kString: return "string"; |
226 case kBoolean: return "boolean"; | 236 case kBoolean: return "boolean"; |
227 case kNonPrimitive: return "non-primitive"; | 237 case kNonPrimitive: return "non-primitive"; |
228 case kJSArray: return "array"; | 238 case kJSArray: return "array"; |
229 case kJSObject: return "object"; | 239 case kJSObject: return "object"; |
230 case kUninitialized: return "uninitialized"; | 240 case kUninitialized: return "uninitialized"; |
231 } | 241 } |
232 UNREACHABLE(); | 242 UNREACHABLE(); |
233 return "Unreachable code"; | 243 return "Unreachable code"; |
234 } | 244 } |
235 | 245 |
236 | 246 |
237 const char* HType::ToShortString() { | |
238 switch (type_) { | |
239 case kTagged: return "t"; | |
240 case kTaggedPrimitive: return "p"; | |
241 case kTaggedNumber: return "n"; | |
242 case kSmi: return "m"; | |
243 case kHeapNumber: return "h"; | |
244 case kString: return "s"; | |
245 case kBoolean: return "b"; | |
246 case kNonPrimitive: return "r"; | |
247 case kJSArray: return "a"; | |
248 case kJSObject: return "o"; | |
249 case kUninitialized: return "z"; | |
250 } | |
251 UNREACHABLE(); | |
252 return "Unreachable code"; | |
253 } | |
254 | |
255 | |
256 HType HType::TypeFromValue(Handle<Object> value) { | 247 HType HType::TypeFromValue(Handle<Object> value) { |
257 HType result = HType::Tagged(); | 248 HType result = HType::Tagged(); |
258 if (value->IsSmi()) { | 249 if (value->IsSmi()) { |
259 result = HType::Smi(); | 250 result = HType::Smi(); |
260 } else if (value->IsHeapNumber()) { | 251 } else if (value->IsHeapNumber()) { |
261 result = HType::HeapNumber(); | 252 result = HType::HeapNumber(); |
262 } else if (value->IsString()) { | 253 } else if (value->IsString()) { |
263 result = HType::String(); | 254 result = HType::String(); |
264 } else if (value->IsBoolean()) { | 255 } else if (value->IsBoolean()) { |
265 result = HType::Boolean(); | 256 result = HType::Boolean(); |
(...skipping 1677 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1943 | 1934 |
1944 | 1935 |
1945 void HCheckPrototypeMaps::Verify() { | 1936 void HCheckPrototypeMaps::Verify() { |
1946 HInstruction::Verify(); | 1937 HInstruction::Verify(); |
1947 ASSERT(HasNoUses()); | 1938 ASSERT(HasNoUses()); |
1948 } | 1939 } |
1949 | 1940 |
1950 #endif | 1941 #endif |
1951 | 1942 |
1952 } } // namespace v8::internal | 1943 } } // namespace v8::internal |
OLD | NEW |