Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(240)

Side by Side Diff: src/hydrogen-instructions.cc

Issue 382153003: Make UBSan happy. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: rebased Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/runtime.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/double.h" 7 #include "src/double.h"
8 #include "src/factory.h" 8 #include "src/factory.h"
9 #include "src/hydrogen-infer-representation.h" 9 #include "src/hydrogen-infer-representation.h"
10 #include "src/property-details-inl.h" 10 #include "src/property-details-inl.h"
(...skipping 1904 matching lines...) Expand 10 before | Expand all | Expand 10 after
1915 if (!b->CanBeZero()) { 1915 if (!b->CanBeZero()) {
1916 ClearFlag(kCanBeDivByZero); 1916 ClearFlag(kCanBeDivByZero);
1917 } 1917 }
1918 return result; 1918 return result;
1919 } else { 1919 } else {
1920 return HValue::InferRange(zone); 1920 return HValue::InferRange(zone);
1921 } 1921 }
1922 } 1922 }
1923 1923
1924 1924
1925 // Returns the absolute value of its argument minus one, avoiding undefined
1926 // behavior at kMinInt.
1927 static int32_t AbsMinus1(int32_t a) { return a < 0 ? -(a + 1) : (a - 1); }
1928
1929
1925 Range* HMod::InferRange(Zone* zone) { 1930 Range* HMod::InferRange(Zone* zone) {
1926 if (representation().IsInteger32()) { 1931 if (representation().IsInteger32()) {
1927 Range* a = left()->range(); 1932 Range* a = left()->range();
1928 Range* b = right()->range(); 1933 Range* b = right()->range();
1929 1934
1930 // The magnitude of the modulus is bounded by the right operand. Note that 1935 // The magnitude of the modulus is bounded by the right operand.
1931 // apart for the cases involving kMinInt, the calculation below is the same 1936 int32_t positive_bound = Max(AbsMinus1(b->lower()), AbsMinus1(b->upper()));
1932 // as Max(Abs(b->lower()), Abs(b->upper())) - 1.
1933 int32_t positive_bound = -(Min(NegAbs(b->lower()), NegAbs(b->upper())) + 1);
1934 1937
1935 // The result of the modulo operation has the sign of its left operand. 1938 // The result of the modulo operation has the sign of its left operand.
1936 bool left_can_be_negative = a->CanBeMinusZero() || a->CanBeNegative(); 1939 bool left_can_be_negative = a->CanBeMinusZero() || a->CanBeNegative();
1937 Range* result = new(zone) Range(left_can_be_negative ? -positive_bound : 0, 1940 Range* result = new(zone) Range(left_can_be_negative ? -positive_bound : 0,
1938 a->CanBePositive() ? positive_bound : 0); 1941 a->CanBePositive() ? positive_bound : 0);
1939 1942
1940 result->set_can_be_minus_zero(!CheckFlag(kAllUsesTruncatingToInt32) && 1943 result->set_can_be_minus_zero(!CheckFlag(kAllUsesTruncatingToInt32) &&
1941 left_can_be_negative); 1944 left_can_be_negative);
1942 1945
1943 if (!a->CanBeNegative()) { 1946 if (!a->CanBeNegative()) {
(...skipping 2825 matching lines...) Expand 10 before | Expand all | Expand 10 after
4769 break; 4772 break;
4770 case HObjectAccess::kExternalMemory: 4773 case HObjectAccess::kExternalMemory:
4771 os << "[external-memory]"; 4774 os << "[external-memory]";
4772 break; 4775 break;
4773 } 4776 }
4774 4777
4775 return os << "@" << access.offset(); 4778 return os << "@" << access.offset();
4776 } 4779 }
4777 4780
4778 } } // namespace v8::internal 4781 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/runtime.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698