| OLD | NEW | 
|     1 // Copyright 2012 the V8 project authors. All rights reserved. |     1 // Copyright 2012 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 2044 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2055   return BitCast<int64_t>(roundtrip_value) == BitCast<int64_t>(value); |  2055   return BitCast<int64_t>(roundtrip_value) == BitCast<int64_t>(value); | 
|  2056 } |  2056 } | 
|  2057  |  2057  | 
|  2058  |  2058  | 
|  2059 HConstant::HConstant(Handle<Object> handle, Representation r) |  2059 HConstant::HConstant(Handle<Object> handle, Representation r) | 
|  2060   : handle_(handle), |  2060   : handle_(handle), | 
|  2061     unique_id_(), |  2061     unique_id_(), | 
|  2062     has_int32_value_(false), |  2062     has_int32_value_(false), | 
|  2063     has_double_value_(false), |  2063     has_double_value_(false), | 
|  2064     is_internalized_string_(false), |  2064     is_internalized_string_(false), | 
 |  2065     is_not_in_new_space_(true), | 
|  2065     boolean_value_(handle->BooleanValue()) { |  2066     boolean_value_(handle->BooleanValue()) { | 
 |  2067   if (handle_->IsHeapObject()) { | 
 |  2068     Heap* heap = Handle<HeapObject>::cast(handle)->GetHeap(); | 
 |  2069     is_not_in_new_space_ = !heap->InNewSpace(*handle); | 
 |  2070   } | 
|  2066   if (handle_->IsNumber()) { |  2071   if (handle_->IsNumber()) { | 
|  2067     double n = handle_->Number(); |  2072     double n = handle_->Number(); | 
|  2068     has_int32_value_ = IsInteger32(n); |  2073     has_int32_value_ = IsInteger32(n); | 
|  2069     int32_value_ = DoubleToInt32(n); |  2074     int32_value_ = DoubleToInt32(n); | 
|  2070     double_value_ = n; |  2075     double_value_ = n; | 
|  2071     has_double_value_ = true; |  2076     has_double_value_ = true; | 
|  2072   } else { |  2077   } else { | 
|  2073     type_from_value_ = HType::TypeFromValue(handle_); |  2078     type_from_value_ = HType::TypeFromValue(handle_); | 
|  2074     is_internalized_string_ = handle_->IsInternalizedString(); |  2079     is_internalized_string_ = handle_->IsInternalizedString(); | 
|  2075   } |  2080   } | 
|  2076   if (r.IsNone()) { |  2081   if (r.IsNone()) { | 
|  2077     if (has_int32_value_) { |  2082     if (has_int32_value_) { | 
|  2078       r = Representation::Integer32(); |  2083       r = Representation::Integer32(); | 
|  2079     } else if (has_double_value_) { |  2084     } else if (has_double_value_) { | 
|  2080       r = Representation::Double(); |  2085       r = Representation::Double(); | 
|  2081     } else { |  2086     } else { | 
|  2082       r = Representation::Tagged(); |  2087       r = Representation::Tagged(); | 
|  2083     } |  2088     } | 
|  2084   } |  2089   } | 
|  2085   Initialize(r); |  2090   Initialize(r); | 
|  2086 } |  2091 } | 
|  2087  |  2092  | 
|  2088  |  2093  | 
|  2089 HConstant::HConstant(Handle<Object> handle, |  2094 HConstant::HConstant(Handle<Object> handle, | 
|  2090                      UniqueValueId unique_id, |  2095                      UniqueValueId unique_id, | 
|  2091                      Representation r, |  2096                      Representation r, | 
|  2092                      HType type, |  2097                      HType type, | 
|  2093                      bool is_internalize_string, |  2098                      bool is_internalize_string, | 
 |  2099                      bool is_not_in_new_space, | 
|  2094                      bool boolean_value) |  2100                      bool boolean_value) | 
|  2095     : handle_(handle), |  2101     : handle_(handle), | 
|  2096       unique_id_(unique_id), |  2102       unique_id_(unique_id), | 
|  2097       has_int32_value_(false), |  2103       has_int32_value_(false), | 
|  2098       has_double_value_(false), |  2104       has_double_value_(false), | 
|  2099       is_internalized_string_(is_internalize_string), |  2105       is_internalized_string_(is_internalize_string), | 
 |  2106       is_not_in_new_space_(is_not_in_new_space), | 
|  2100       boolean_value_(boolean_value), |  2107       boolean_value_(boolean_value), | 
|  2101       type_from_value_(type) { |  2108       type_from_value_(type) { | 
|  2102   ASSERT(!handle.is_null()); |  2109   ASSERT(!handle.is_null()); | 
|  2103   ASSERT(!type.IsUninitialized()); |  2110   ASSERT(!type.IsUninitialized()); | 
|  2104   ASSERT(!type.IsTaggedNumber()); |  2111   ASSERT(!type.IsTaggedNumber()); | 
|  2105   Initialize(r); |  2112   Initialize(r); | 
|  2106 } |  2113 } | 
|  2107  |  2114  | 
|  2108  |  2115  | 
|  2109 HConstant::HConstant(int32_t integer_value, |  2116 HConstant::HConstant(int32_t integer_value, | 
|  2110                      Representation r, |  2117                      Representation r, | 
 |  2118                      bool is_not_in_new_space, | 
|  2111                      Handle<Object> optional_handle) |  2119                      Handle<Object> optional_handle) | 
|  2112     : handle_(optional_handle), |  2120     : handle_(optional_handle), | 
|  2113       unique_id_(), |  2121       unique_id_(), | 
|  2114       has_int32_value_(true), |  2122       has_int32_value_(true), | 
|  2115       has_double_value_(true), |  2123       has_double_value_(true), | 
|  2116       is_internalized_string_(false), |  2124       is_internalized_string_(false), | 
 |  2125       is_not_in_new_space_(is_not_in_new_space), | 
|  2117       boolean_value_(integer_value != 0), |  2126       boolean_value_(integer_value != 0), | 
|  2118       int32_value_(integer_value), |  2127       int32_value_(integer_value), | 
|  2119       double_value_(FastI2D(integer_value)) { |  2128       double_value_(FastI2D(integer_value)) { | 
|  2120   Initialize(r); |  2129   Initialize(r); | 
|  2121 } |  2130 } | 
|  2122  |  2131  | 
|  2123  |  2132  | 
|  2124 HConstant::HConstant(double double_value, |  2133 HConstant::HConstant(double double_value, | 
|  2125                      Representation r, |  2134                      Representation r, | 
 |  2135                      bool is_not_in_new_space, | 
|  2126                      Handle<Object> optional_handle) |  2136                      Handle<Object> optional_handle) | 
|  2127     : handle_(optional_handle), |  2137     : handle_(optional_handle), | 
|  2128       unique_id_(), |  2138       unique_id_(), | 
|  2129       has_int32_value_(IsInteger32(double_value)), |  2139       has_int32_value_(IsInteger32(double_value)), | 
|  2130       has_double_value_(true), |  2140       has_double_value_(true), | 
|  2131       is_internalized_string_(false), |  2141       is_internalized_string_(false), | 
 |  2142       is_not_in_new_space_(is_not_in_new_space), | 
|  2132       boolean_value_(double_value != 0 && !std::isnan(double_value)), |  2143       boolean_value_(double_value != 0 && !std::isnan(double_value)), | 
|  2133       int32_value_(DoubleToInt32(double_value)), |  2144       int32_value_(DoubleToInt32(double_value)), | 
|  2134       double_value_(double_value) { |  2145       double_value_(double_value) { | 
|  2135   Initialize(r); |  2146   Initialize(r); | 
|  2136 } |  2147 } | 
|  2137  |  2148  | 
|  2138  |  2149  | 
|  2139 void HConstant::Initialize(Representation r) { |  2150 void HConstant::Initialize(Representation r) { | 
|  2140   set_representation(r); |  2151   set_representation(r); | 
|  2141   SetFlag(kUseGVN); |  2152   SetFlag(kUseGVN); | 
|  2142   if (representation().IsInteger32()) { |  2153   if (representation().IsInteger32()) { | 
|  2143     ClearGVNFlag(kDependsOnOsrEntries); |  2154     ClearGVNFlag(kDependsOnOsrEntries); | 
|  2144   } |  2155   } | 
|  2145 } |  2156 } | 
|  2146  |  2157  | 
|  2147  |  2158  | 
|  2148 HConstant* HConstant::CopyToRepresentation(Representation r, Zone* zone) const { |  2159 HConstant* HConstant::CopyToRepresentation(Representation r, Zone* zone) const { | 
|  2149   if (r.IsInteger32() && !has_int32_value_) return NULL; |  2160   if (r.IsInteger32() && !has_int32_value_) return NULL; | 
|  2150   if (r.IsDouble() && !has_double_value_) return NULL; |  2161   if (r.IsDouble() && !has_double_value_) return NULL; | 
|  2151   if (has_int32_value_) return new(zone) HConstant(int32_value_, r, handle_); |  2162   if (has_int32_value_) { | 
|  2152   if (has_double_value_) return new(zone) HConstant(double_value_, r, handle_); |  2163     return new(zone) HConstant(int32_value_, r, is_not_in_new_space_, handle_); | 
 |  2164   } | 
 |  2165   if (has_double_value_) { | 
 |  2166     return new(zone) HConstant(double_value_, r, is_not_in_new_space_, handle_); | 
 |  2167   } | 
|  2153   ASSERT(!handle_.is_null()); |  2168   ASSERT(!handle_.is_null()); | 
|  2154   return new(zone) HConstant(handle_, |  2169   return new(zone) HConstant(handle_, | 
|  2155                              unique_id_, |  2170                              unique_id_, | 
|  2156                              r, |  2171                              r, | 
|  2157                              type_from_value_, |  2172                              type_from_value_, | 
|  2158                              is_internalized_string_, |  2173                              is_internalized_string_, | 
 |  2174                              is_not_in_new_space_, | 
|  2159                              boolean_value_); |  2175                              boolean_value_); | 
|  2160 } |  2176 } | 
|  2161  |  2177  | 
|  2162  |  2178  | 
|  2163 HConstant* HConstant::CopyToTruncatedInt32(Zone* zone) const { |  2179 HConstant* HConstant::CopyToTruncatedInt32(Zone* zone) const { | 
|  2164   if (has_int32_value_) { |  2180   if (has_int32_value_) { | 
|  2165     return new(zone) HConstant( |  2181     return new(zone) HConstant(int32_value_, | 
|  2166         int32_value_, Representation::Integer32(), handle_); |  2182                                Representation::Integer32(), | 
 |  2183                                is_not_in_new_space_, | 
 |  2184                                handle_); | 
|  2167   } |  2185   } | 
|  2168   if (has_double_value_) { |  2186   if (has_double_value_) { | 
|  2169     return new(zone) HConstant( |  2187     return new(zone) HConstant(DoubleToInt32(double_value_), | 
|  2170         DoubleToInt32(double_value_), Representation::Integer32(), handle_); |  2188                                Representation::Integer32(), | 
 |  2189                                is_not_in_new_space_, | 
 |  2190                                handle_); | 
|  2171   } |  2191   } | 
|  2172   return NULL; |  2192   return NULL; | 
|  2173 } |  2193 } | 
|  2174  |  2194  | 
|  2175  |  2195  | 
|  2176 void HConstant::PrintDataTo(StringStream* stream) { |  2196 void HConstant::PrintDataTo(StringStream* stream) { | 
|  2177   if (has_int32_value_) { |  2197   if (has_int32_value_) { | 
|  2178     stream->Add("%d ", int32_value_); |  2198     stream->Add("%d ", int32_value_); | 
|  2179   } else if (has_double_value_) { |  2199   } else if (has_double_value_) { | 
|  2180     stream->Add("%f ", FmtElm(double_value_)); |  2200     stream->Add("%f ", FmtElm(double_value_)); | 
| (...skipping 1446 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  3627  |  3647  | 
|  3628  |  3648  | 
|  3629 void HCheckFunction::Verify() { |  3649 void HCheckFunction::Verify() { | 
|  3630   HInstruction::Verify(); |  3650   HInstruction::Verify(); | 
|  3631   ASSERT(HasNoUses()); |  3651   ASSERT(HasNoUses()); | 
|  3632 } |  3652 } | 
|  3633  |  3653  | 
|  3634 #endif |  3654 #endif | 
|  3635  |  3655  | 
|  3636 } }  // namespace v8::internal |  3656 } }  // namespace v8::internal | 
| OLD | NEW |