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