Mercurial > hg > truffle
view test/compiler/6823354/Test6823354.java @ 12353:562a3d356de6 hs25-b53
Merge
author | amurillo |
---|---|
date | Fri, 04 Oct 2013 14:10:08 -0700 |
parents | c18cbe5936b8 |
children |
line wrap: on
line source
/* * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /** * @test * @bug 6823354 * @summary These methods can be instrinsified by using bit scan, bit test, and population count instructions. * * @run main/othervm -Xcomp -XX:CompileOnly=Test6823354.lzcomp,Test6823354.tzcomp,.dolzcomp,.dotzcomp Test6823354 */ import java.net.URLClassLoader; public class Test6823354 { // Arrays of corner case values. static final int[] ia = new int[] { 0, 1, -1, Integer.MIN_VALUE, Integer.MAX_VALUE }; static final long[] la = new long[] { 0L, 1L, -1L, Long.MIN_VALUE, Long.MAX_VALUE }; public static void main(String[] args) throws Exception { // Load the classes and the methods. Integer.numberOfLeadingZeros(0); Integer.numberOfTrailingZeros(0); Long.numberOfLeadingZeros(0); Long.numberOfTrailingZeros(0); lz(); tz(); } static void lz() throws Exception { // int // Test corner cases. for (int i = 0; i < ia.length; i++) { int x = ia[i]; check(x, lzcomp(x), lzint(x)); } // Test all possible return values. for (int i = 0; i < Integer.SIZE; i++) { int x = 1 << i; check(x, lzcomp(x), lzint(x)); } String classname = "Test6823354$lzconI"; // Test Ideal optimizations (constant values). for (int i = 0; i < ia.length; i++) { testclass(classname, ia[i]); } // Test Ideal optimizations (constant values). for (int i = 0; i < Integer.SIZE; i++) { int x = 1 << i; testclass(classname, x); } // long // Test corner cases. for (int i = 0; i < ia.length; i++) { long x = la[i]; check(x, lzcomp(x), lzint(x)); } // Test all possible return values. for (int i = 0; i < Long.SIZE; i++) { long x = 1L << i; check(x, lzcomp(x), lzint(x)); } classname = "Test6823354$lzconL"; // Test Ideal optimizations (constant values). for (int i = 0; i < la.length; i++) { testclass(classname, la[i]); } // Test Ideal optimizations (constant values). for (int i = 0; i < Long.SIZE; i++) { long x = 1L << i; testclass(classname, x); } } static void tz() throws Exception { // int // Test corner cases. for (int i = 0; i < ia.length; i++) { int x = ia[i]; check(x, tzcomp(x), tzint(x)); } // Test all possible return values. for (int i = 0; i < Integer.SIZE; i++) { int x = 1 << i; check(x, tzcomp(x), tzint(x)); } String classname = "Test6823354$tzconI"; // Test Ideal optimizations (constant values). for (int i = 0; i < ia.length; i++) { testclass(classname, ia[i]); } // Test Ideal optimizations (constant values). for (int i = 0; i < Integer.SIZE; i++) { int x = 1 << i; testclass(classname, x); } // long // Test corner cases. for (int i = 0; i < la.length; i++) { long x = la[i]; check(x, tzcomp(x), tzint(x)); } // Test all possible return values. for (int i = 0; i < Long.SIZE; i++) { long x = 1L << i; check(x, tzcomp(x), tzint(x)); } classname = "Test6823354$tzconL"; // Test Ideal optimizations (constant values). for (int i = 0; i < la.length; i++) { testclass(classname, la[i]); } // Test Ideal optimizations (constant values). for (int i = 0; i < Long.SIZE; i++) { long x = 1L << i; testclass(classname, x); } } static void check(int value, int result, int expected) { //System.out.println(value + ": " + result + ", " + expected); if (result != expected) throw new InternalError(value + " failed: " + result + " != " + expected); } static void check(long value, long result, long expected) { //System.out.println(value + ": " + result + ", " + expected); if (result != expected) throw new InternalError(value + " failed: " + result + " != " + expected); } static int lzint( int i) { return Integer.numberOfLeadingZeros(i); } static int lzcomp(int i) { return Integer.numberOfLeadingZeros(i); } static int lzint( long l) { return Long.numberOfLeadingZeros(l); } static int lzcomp(long l) { return Long.numberOfLeadingZeros(l); } static int tzint( int i) { return Integer.numberOfTrailingZeros(i); } static int tzcomp(int i) { return Integer.numberOfTrailingZeros(i); } static int tzint( long l) { return Long.numberOfTrailingZeros(l); } static int tzcomp(long l) { return Long.numberOfTrailingZeros(l); } static void testclass(String classname, int x) throws Exception { System.setProperty("value", "" + x); loadandrunclass(classname); } static void testclass(String classname, long x) throws Exception { System.setProperty("value", "" + x); loadandrunclass(classname); } static void loadandrunclass(String classname) throws Exception { Class cl = Class.forName(classname); URLClassLoader apploader = (URLClassLoader) cl.getClassLoader(); ClassLoader loader = new URLClassLoader(apploader.getURLs(), apploader.getParent()); Class c = loader.loadClass(classname); Runnable r = (Runnable) c.newInstance(); r.run(); } public static class lzconI implements Runnable { static final int VALUE; static { int value = 0; try { value = Integer.decode(System.getProperty("value")); } catch (Throwable e) {} VALUE = value; } public void run() { check(VALUE, lzint(VALUE), dolzcomp()); } static int dolzcomp() { return lzcomp(VALUE); } } public static class lzconL implements Runnable { static final long VALUE; static { long value = 0; try { value = Long.decode(System.getProperty("value")); } catch (Throwable e) {} VALUE = value; } public void run() { check(VALUE, lzint(VALUE), dolzcomp()); } static int dolzcomp() { return lzcomp(VALUE); } } public static class tzconI implements Runnable { static final int VALUE; static { int value = 0; try { value = Integer.decode(System.getProperty("value")); } catch (Throwable e) {} VALUE = value; } public void run() { check(VALUE, tzint(VALUE), dotzcomp()); } static int dotzcomp() { return tzcomp(VALUE); } } public static class tzconL implements Runnable { static final long VALUE; static { long value = 0; try { value = Long.decode(System.getProperty("value")); } catch (Throwable e) {} VALUE = value; } public void run() { check(VALUE, tzint(VALUE), dotzcomp()); } static int dotzcomp() { return tzcomp(VALUE); } } }