1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker public class Main { 18*795d594fSAndroid Build Coastguard Worker 19*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.testNewStringFromBytes() builder (after) 20*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect method_name:java.lang.StringFactory.newStringFromBytes intrinsic:StringNewStringFromBytes 21*795d594fSAndroid Build Coastguard Worker testNewStringFromBytes()22*795d594fSAndroid Build Coastguard Worker public static void testNewStringFromBytes() { 23*795d594fSAndroid Build Coastguard Worker byte[] bytes = { 'f', 'o', 'o' }; 24*795d594fSAndroid Build Coastguard Worker String s = StringFactory.newStringFromBytes(bytes, 0, 0, 3); 25*795d594fSAndroid Build Coastguard Worker System.out.println(s); 26*795d594fSAndroid Build Coastguard Worker } 27*795d594fSAndroid Build Coastguard Worker 28*795d594fSAndroid Build Coastguard Worker // The (native) method 29*795d594fSAndroid Build Coastguard Worker // 30*795d594fSAndroid Build Coastguard Worker // java.lang.StringFactory.newStringFromChars(int offset, int charCount, char[] data) 31*795d594fSAndroid Build Coastguard Worker // 32*795d594fSAndroid Build Coastguard Worker // is recognized as intrinsic StringNewStringFromChars. However, 33*795d594fSAndroid Build Coastguard Worker // because this method is not public, we cannot call it and check 34*795d594fSAndroid Build Coastguard Worker // that the compiler actually intrinsifies it (as it does for the 35*795d594fSAndroid Build Coastguard Worker // StringNewStringFromBytes and StringNewStringFromString 36*795d594fSAndroid Build Coastguard Worker // intrinsics) with Checker. 37*795d594fSAndroid Build Coastguard Worker // 38*795d594fSAndroid Build Coastguard Worker // We can call a public method such as 39*795d594fSAndroid Build Coastguard Worker // 40*795d594fSAndroid Build Coastguard Worker // java.lang.StringFactory.newStringFromChars(char[] data) 41*795d594fSAndroid Build Coastguard Worker // 42*795d594fSAndroid Build Coastguard Worker // which contains a call to the former (non-public) native method. 43*795d594fSAndroid Build Coastguard Worker // After the inliner runs, we can see the inlined call and check 44*795d594fSAndroid Build Coastguard Worker // that the compiler intrinsifies it. 45*795d594fSAndroid Build Coastguard Worker 46*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.testNewStringFromChars() builder (after) 47*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect method_name:java.lang.StringFactory.newStringFromChars intrinsic:None 48*795d594fSAndroid Build Coastguard Worker 49*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.testNewStringFromChars() inliner (after) 50*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect method_name:java.lang.StringFactory.newStringFromChars intrinsic:StringNewStringFromChars 51*795d594fSAndroid Build Coastguard Worker testNewStringFromChars()52*795d594fSAndroid Build Coastguard Worker public static void testNewStringFromChars() { 53*795d594fSAndroid Build Coastguard Worker char[] chars = { 'b', 'a', 'r' }; 54*795d594fSAndroid Build Coastguard Worker String s = StringFactory.newStringFromChars(chars); 55*795d594fSAndroid Build Coastguard Worker System.out.println(s); 56*795d594fSAndroid Build Coastguard Worker } 57*795d594fSAndroid Build Coastguard Worker 58*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.testNewStringFromString() builder (after) 59*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect method_name:java.lang.StringFactory.newStringFromString intrinsic:StringNewStringFromString 60*795d594fSAndroid Build Coastguard Worker testNewStringFromString()61*795d594fSAndroid Build Coastguard Worker public static void testNewStringFromString() { 62*795d594fSAndroid Build Coastguard Worker String s1 = "baz"; 63*795d594fSAndroid Build Coastguard Worker String s2 = StringFactory.newStringFromString(s1); 64*795d594fSAndroid Build Coastguard Worker System.out.println(s2); 65*795d594fSAndroid Build Coastguard Worker } 66*795d594fSAndroid Build Coastguard Worker main(String[] args)67*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) throws Exception { 68*795d594fSAndroid Build Coastguard Worker testNewStringFromBytes(); 69*795d594fSAndroid Build Coastguard Worker testNewStringFromChars(); 70*795d594fSAndroid Build Coastguard Worker testNewStringFromString(); 71*795d594fSAndroid Build Coastguard Worker } 72*795d594fSAndroid Build Coastguard Worker } 73