1 /*
   2  * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 package org.graalvm.compiler.jtt.optimize;
  24 
  25 import org.junit.Test;
  26 
  27 import org.graalvm.compiler.jtt.JTTTest;
  28 
  29 /**
  30  * test some stamps in combination with full loop unrolling and shifts.
  31  */
  32 public class InferStamp01 extends JTTTest {
  33 
  34     public static int testi0(int arg) {
  35         int a = arg;
  36         for (int i = 0; i < 2; i++) {
  37             a = a >> 16;
  38         }
  39         return a;
  40     }
  41 
  42     @Test
  43     public void runi0() throws Throwable {
  44         runTest("testi0", 0x7788_99aa);
  45     }
  46 
  47     @Test
  48     public void runi0neg() throws Throwable {
  49         runTest("testi0", 0xf788_99aa);
  50     }
  51 
  52     public static int testi1(int arg) {
  53         int a = arg;
  54         for (int i = 0; i < 2; i++) {
  55             a = a >>> 16;
  56         }
  57         return a;
  58     }
  59 
  60     @Test
  61     public void runi1() throws Throwable {
  62         runTest("testi1", 0x7788_99aa);
  63     }
  64 
  65     @Test
  66     public void runi1neg() throws Throwable {
  67         runTest("testi1", 0xf788_99aa);
  68     }
  69 
  70     public static int testi2(int arg) {
  71         int a = arg;
  72         for (int i = 0; i < 2; i++) {
  73             a = a << 16;
  74         }
  75         return a;
  76     }
  77 
  78     @Test
  79     public void runi2() throws Throwable {
  80         runTest("testi2", 0x7788_99aa);
  81     }
  82 
  83     @Test
  84     public void runi2neg() throws Throwable {
  85         runTest("testi2", 0xf788_99aa);
  86     }
  87 
  88     public static long testl0(long arg) {
  89         long a = arg;
  90         for (long i = 0; i < 2; i++) {
  91             a = a >> 32;
  92         }
  93         return a;
  94     }
  95 
  96     @Test
  97     public void runl0() throws Throwable {
  98         runTest("testl0", 0x3344_5566_7788_99aaL);
  99     }
 100 
 101     @Test
 102     public void runl0neg() throws Throwable {
 103         runTest("testl0", 0xf344_5566_7788_99aaL);
 104     }
 105 
 106     public static long testl1(long arg) {
 107         long a = arg;
 108         for (long i = 0; i < 2; i++) {
 109             a = a >>> 32;
 110         }
 111         return a;
 112     }
 113 
 114     @Test
 115     public void runl1() throws Throwable {
 116         runTest("testl1", 0x3344_5566_7788_99aaL);
 117     }
 118 
 119     @Test
 120     public void runl1neg() throws Throwable {
 121         runTest("testl1", 0xf344_5566_7788_99aaL);
 122     }
 123 
 124     public static long testl2(long arg) {
 125         long a = arg;
 126         for (long i = 0; i < 2; i++) {
 127             a = a << 32;
 128         }
 129         return a;
 130     }
 131 
 132     @Test
 133     public void runl2() throws Throwable {
 134         runTest("testl2", 0x3344_5566_7788_99aaL);
 135     }
 136 
 137     @Test
 138     public void runl2neg() throws Throwable {
 139         runTest("testl2", 0xf344_5566_7788_99aaL);
 140     }
 141 }