19e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko/* 29e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * Copyright (C) 2015 The Android Open Source Project 39e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * 49e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * Licensed under the Apache License, Version 2.0 (the "License"); 59e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * you may not use this file except in compliance with the License. 69e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * You may obtain a copy of the License at 79e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * 89e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * http://www.apache.org/licenses/LICENSE-2.0 99e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * 109e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * Unless required by applicable law or agreed to in writing, software 119e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * distributed under the License is distributed on an "AS IS" BASIS, 129e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * See the License for the specific language governing permissions and 149e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko * limitations under the License. 159e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko */ 169e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 179e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Markopublic class Main { 189e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 199e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko private void inlinedForNull(Iterable it) { 209e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko if (it != null) { 219e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko // We're not inlining invoke-interface at the moment. 229e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko it.iterator(); 239e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko } 249e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko } 259e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 269e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko private void inlinedForFalse(boolean value, Iterable it) { 279e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko if (value) { 289e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko // We're not inlining invoke-interface at the moment. 299e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko it.iterator(); 309e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko } 319e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko } 329e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 339e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-START: void Main.testInlinedForFalseInlined(java.lang.Iterable) inliner (before) 349e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK: InvokeStaticOrDirect 359e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 369e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-START: void Main.testInlinedForFalseInlined(java.lang.Iterable) inliner (after) 379e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-NOT: InvokeStaticOrDirect 389e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-NOT: InvokeInterface 399e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 409e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko public void testInlinedForFalseInlined(Iterable it) { 419e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko inlinedForFalse(false, it); 429e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko } 439e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 449e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-START: void Main.testInlinedForFalseNotInlined(java.lang.Iterable) inliner (before) 459e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK: InvokeStaticOrDirect 469e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 479e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-START: void Main.testInlinedForFalseNotInlined(java.lang.Iterable) inliner (after) 489e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK: InvokeStaticOrDirect 499e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 509e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko public void testInlinedForFalseNotInlined(Iterable it) { 519e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko inlinedForFalse(true, it); 529e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko } 539e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 549e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-START: void Main.testInlinedForNullInlined(java.lang.Iterable) inliner (before) 559e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK: InvokeStaticOrDirect 569e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 579e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-START: void Main.testInlinedForNullInlined(java.lang.Iterable) inliner (after) 589e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-NOT: InvokeStaticOrDirect 599e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-NOT: InvokeInterface 609e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 619e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko public void testInlinedForNullInlined(Iterable it) { 629e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko inlinedForNull(null); 639e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko } 649e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 659e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-START: void Main.testInlinedForNullNotInlined(java.lang.Iterable) inliner (before) 669e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK: InvokeStaticOrDirect 679e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 689e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK-START: void Main.testInlinedForNullNotInlined(java.lang.Iterable) inliner (after) 699e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko /// CHECK: InvokeStaticOrDirect 709e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 719e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko public void testInlinedForNullNotInlined(Iterable it) { 729e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko inlinedForNull(it); 739e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko } 749e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko 759e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko public static void main(String[] args) { 769e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko Main m = new Main(); 779e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko Iterable it = new Iterable() { 789e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko public java.util.Iterator iterator() { return null; } 799e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko }; 809e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko m.testInlinedForFalseInlined(it); 819e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko m.testInlinedForFalseNotInlined(it); 829e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko m.testInlinedForNullInlined(it); 839e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko m.testInlinedForNullNotInlined(it); 849e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko } 859e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko} 86