From: bmeurer Date: Wed, 7 Jan 2015 15:44:13 +0000 (-0800) Subject: [turbofan] Fix bit representation of NumberConstant. X-Git-Tag: upstream/4.7.83~5061 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d1c1a3c48f1a5aa3e14a4bea4930e769856c0e83;p=platform%2Fupstream%2Fv8.git [turbofan] Fix bit representation of NumberConstant. TEST=mjsunit/compiler/regress-bit-number-constant Review URL: https://codereview.chromium.org/839813002 Cr-Commit-Position: refs/heads/master@{#25979} --- diff --git a/src/compiler/representation-change.h b/src/compiler/representation-change.h index e4c257f..8720afd 100644 --- a/src/compiler/representation-change.h +++ b/src/compiler/representation-change.h @@ -296,6 +296,13 @@ class RepresentationChanger { if (value == 0 || value == 1) return node; return jsgraph()->Int32Constant(1); // value != 0 } + case IrOpcode::kNumberConstant: { + double value = OpParameter(node); + if (std::isnan(value) || value == 0.0) { + return jsgraph()->Int32Constant(0); + } + return jsgraph()->Int32Constant(1); + } case IrOpcode::kHeapConstant: { Handle handle = OpParameter >(node).handle(); DCHECK(*handle == isolate()->heap()->true_value() || diff --git a/test/mjsunit/compiler/regress-bit-number-constant.js b/test/mjsunit/compiler/regress-bit-number-constant.js new file mode 100644 index 0000000..d36fe30 --- /dev/null +++ b/test/mjsunit/compiler/regress-bit-number-constant.js @@ -0,0 +1,17 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var stdlib = this; +var buffer = new ArrayBuffer(64 * 1024); +var foreign = {} + +var foo = (function Module(stdlib, foreign, heap) { + "use asm"; + function foo(i) { + return !(i ? 1 : false); + } + return {foo:foo}; +})(stdlib, foreign, buffer).foo; + +assertFalse(foo(1));