1ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// Copyright 2011 the V8 project authors. All rights reserved. 243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Redistribution and use in source and binary forms, with or without 343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// modification, are permitted provided that the following conditions are 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// met: 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions of source code must retain the above copyright 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// notice, this list of conditions and the following disclaimer. 843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions in binary form must reproduce the above 943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// copyright notice, this list of conditions and the following 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// disclaimer in the documentation and/or other materials provided 1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// with the distribution. 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Neither the name of Google Inc. nor the names of its 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// contributors may be used to endorse or promote products derived 1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// from this software without specific prior written permission. 1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgfunction g(y) { assertEquals(y, 12); } 29ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 30ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgvar X = 0; 31ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 32ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgfunction foo () { 33ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org var cnt = 0; 34ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org var l = -1; 35ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org var x = 0; 36ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org while (1) switch (l) { 37ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org case -1: 38ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org var y = x + 12; 39ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org l = 0; 40ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org break; 41ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org case 0: 42ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Loop for to hit OSR. 43ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org if (cnt++ < 10000000) { 44ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org l = 0; 45ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org break; 46ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else { 47ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org l = 1; 48ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org break; 49ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 50ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org case 1: 51ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // This case will contain deoptimization 52ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // because it has no type feedback. 53ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org g(y); 54ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return; 55ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org }; 56ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 57ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 58ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgfoo(); 59