LGTM if you fix all the other broken instructions.

On Thu, Dec 16, 2010 at 4:03 PM, <[email protected]> wrote:

> Reviewers: Kevin Millikin,
>
> Description:
> HHasInstanceType uses GVN but does not provide a comparison function
> for its data. This leads to elimination of instance type checks that
> should not be eliminated.
>
> Provide the data comparison function.
>
> BUG=995
>
>
> Please review this at http://codereview.chromium.org/5898003/
>
> SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/
>
> Affected files:
>  M     src/hydrogen-instructions.h
>  A     test/mjsunit/regress/regress-995.js
>
>
> Index: src/hydrogen-instructions.h
> ===================================================================
> --- src/hydrogen-instructions.h (revision 6051)
> +++ src/hydrogen-instructions.h (working copy)
> @@ -2134,6 +2134,12 @@
>
>   DECLARE_CONCRETE_INSTRUCTION(HasInstanceType, "has_instance_type")
>
> + protected:
> +  virtual bool DataEquals(HValue* other) const {
> +    HHasInstanceType* b = HHasInstanceType::cast(other);
> +    return (from_ == b->from()) && (to_ == b->to());
> +  }
> +
>  private:
>   InstanceType from_;
>   InstanceType to_;  // Inclusive range, not all combinations work.
> Index: test/mjsunit/regress/regress-995.js
> ===================================================================
> --- test/mjsunit/regress/regress-995.js (revision 0)
> +++ test/mjsunit/regress/regress-995.js (revision 0)
> @@ -0,0 +1,39 @@
> +// Copyright 2010 the V8 project authors. All rights reserved.
> +// Redistribution and use in source and binary forms, with or without
> +// modification, are permitted provided that the following conditions are
> +// met:
> +//
> +//     * Redistributions of source code must retain the above copyright
> +//       notice, this list of conditions and the following disclaimer.
> +//     * Redistributions in binary form must reproduce the above
> +//       copyright notice, this list of conditions and the following
> +//       disclaimer in the documentation and/or other materials provided
> +//       with the distribution.
> +//     * Neither the name of Google Inc. nor the names of its
> +//       contributors may be used to endorse or promote products derived
> +//       from this software without specific prior written permission.
> +//
> +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +//
> +// HHasInstanceType did not correctly compare its data during GVN
> +// causing the %_IsArray in this test to not be executed and its
> +// result assumed to be the same as the %_IsSpecObject result.
> +//
> +// Flags: --allow-natives-syntax
> +
> +function f(value) {
> +  if (%_IsSpecObject(value)) { if ((%_IsArray(value))) assertTrue(false);
> }
> +}
> +
> +f(new String("bar"));
>
>
>

-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to