17979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// Copyright 2011 the V8 project authors. All rights reserved.
27979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// Redistribution and use in source and binary forms, with or without
37979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// modification, are permitted provided that the following conditions are
47979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// met:
57979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org//
67979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org//     * Redistributions of source code must retain the above copyright
77979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org//       notice, this list of conditions and the following disclaimer.
87979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org//     * Redistributions in binary form must reproduce the above
97979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org//       copyright notice, this list of conditions and the following
107979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org//       disclaimer in the documentation and/or other materials provided
117979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org//       with the distribution.
127979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org//     * Neither the name of Google Inc. nor the names of its
137979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org//       contributors may be used to endorse or promote products derived
147979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org//       from this software without specific prior written permission.
157979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org//
167979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
177979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
187979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
197979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
207979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
217979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
227979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
237979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
247979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
257979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
267979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
277979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org
28a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org// Flags: --allow-natives-syntax
29a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org
307979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// Regression test for GVN on field loads.
317979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org
327979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgfunction bar() {}
337979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org
347979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// Make sure there is a transition on adding "bar" inobject property.
357979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgvar b = new bar();
367979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgb.bar = "bar";
377979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org
387979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgfunction test(a) {
397979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org  var b = new Array(10);
407979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org  for (var i = 0; i < 10; i++) {
417979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org    b[i] = new bar();
427979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org  }
437979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org
447979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org  for (var i = 0; i < 10; i++) {
457979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org    b[i].bar = a.foo;
467979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org  }
477979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org}
487979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org
497979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// Create an object with fast backing store properties.
507979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgvar a = {};
517979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p1 = "";
527979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p2 = "";
537979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p3 = "";
547979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p4 = "";
557979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p5 = "";
567979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p6 = "";
577979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p7 = "";
587979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p8 = "";
597979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p9 = "";
607979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p10 = "";
617979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p11 = "";
627979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.foo = "foo";
63a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.orgfor (var i = 0; i < 5; i++) {
647979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org test(a);
657979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org}
66a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org%OptimizeFunctionOnNextCall(test);
67a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.orgtest(a);
687979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org
697979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgtest("");
70