1 /* 2 * Copyright (c) 2024, 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 24 import java.lang.runtime.CodeReflection; 25 26 /* 27 * @test 28 * @summary Smoke test for code reflection with local variables. 29 * @build LocalVarTest 30 * @build CodeReflectionTester 31 * @run main CodeReflectionTester LocalVarTest 32 */ 33 34 public class LocalVarTest { 35 36 @CodeReflection 37 @IR(""" 38 func @"test1" (%0 : LocalVarTest)int -> { 39 %1 : int = constant @"1"; 40 %2 : Var<int> = var %1 @"x"; 41 %3 : int = constant @"2"; 42 %4 : Var<int> = var %3 @"y"; 43 %5 : int = var.load %2; 44 %6 : int = var.load %4; 45 %7 : int = add %5 %6; 46 return %7; 47 }; 48 """) 49 int test1() { 50 int x = 1; 51 int y = 2; 52 return x + y; 53 } 54 55 @CodeReflection 56 @IR(""" 57 func @"test2" (%0 : LocalVarTest, %1 : int, %2 : int)int -> { 58 %3 : Var<int> = var %1 @"x"; 59 %4 : Var<int> = var %2 @"y"; 60 %5 : int = var.load %3; 61 %6 : int = var.load %4; 62 %7 : int = add %5 %6; 63 return %7; 64 }; 65 """) 66 int test2(int x, int y) { 67 return x + y; 68 } 69 70 @CodeReflection 71 @IR(""" 72 func @"test3" (%0 : LocalVarTest)int -> { 73 %1 : int = constant @"0"; 74 %2 : Var<int> = var %1 @"x"; 75 %3 : int = constant @"0"; 76 %4 : Var<int> = var %3 @"y"; 77 %5 : int = constant @"1"; 78 var.store %2 %5; 79 %6 : int = constant @"2"; 80 var.store %4 %6; 81 %7 : int = var.load %2; 82 %8 : int = var.load %4; 83 %9 : int = add %7 %8; 84 return %9; 85 }; 86 """) 87 int test3() { 88 int x; 89 int y; 90 x = 1; 91 y = 2; 92 return x + y; 93 } 94 95 @CodeReflection 96 @IR(""" 97 func @"test4" (%0 : LocalVarTest)int -> { 98 %1 : int = constant @"1"; 99 %2 : Var<int> = var %1 @"x"; 100 %3 : int = var.load %2; 101 %4 : int = constant @"1"; 102 %5 : int = add %3 %4; 103 %6 : Var<int> = var %5 @"y"; 104 %7 : int = var.load %6; 105 return %7; 106 }; 107 """) 108 int test4() { 109 int x = 1; 110 int y = x + 1; 111 return y; 112 } 113 114 @CodeReflection 115 @IR(""" 116 func @"test5" (%0 : LocalVarTest)int -> { 117 %1 : int = constant @"1"; 118 %2 : Var<int> = var %1 @"x"; 119 %3 : int = var.load %2; 120 %4 : Var<int> = var %3 @"y"; 121 %5 : int = var.load %4; 122 return %5; 123 }; 124 """) 125 int test5() { 126 int x = 1; 127 int y = x; 128 return y; 129 } 130 131 @CodeReflection 132 @IR(""" 133 func @"test6" (%0 : LocalVarTest)int -> { 134 %1 : int = constant @"1"; 135 %2 : Var<int> = var %1 @"x"; 136 %3 : int = constant @"1"; 137 %4 : Var<int> = var %3 @"y"; 138 %5 : int = constant @"1"; 139 %6 : Var<int> = var %5 @"z"; 140 %7 : int = var.load %2; 141 var.store %4 %7; 142 var.store %6 %7; 143 %8 : int = var.load %6; 144 return %8; 145 }; 146 """) 147 int test6() { 148 int x = 1; 149 int y = 1; 150 int z = 1; 151 z = y = x; 152 return z; 153 } 154 155 @CodeReflection 156 @IR(""" 157 func @"test7" (%0 : LocalVarTest)int -> { 158 %1 : int = constant @"1"; 159 %2 : Var<int> = var %1 @"x"; 160 %3 : int = var.load %2; 161 %4 : int = constant @"2"; 162 %5 : int = add %3 %4; 163 var.store %2 %5; 164 %6 : Var<int> = var %5 @"y"; 165 %7 : int = var.load %6; 166 %8 : int = constant @"3"; 167 %9 : int = add %7 %8; 168 var.store %6 %9; 169 %10 : int = var.load %2; 170 %11 : int = constant @"4"; 171 %12 : int = add %10 %11; 172 var.store %2 %12; 173 %13 : int = add %9 %12; 174 return %13; 175 }; 176 """) 177 int test7() { 178 int x = 1; 179 int y = x += 2; 180 return (y += 3) + (x += 4); 181 } 182 183 @CodeReflection 184 @IR(""" 185 func @"test8" (%0 : LocalVarTest, %1 : int)void -> { 186 %2 : Var<int> = var %1 @"i"; 187 %3 : int = var.load %2; 188 %4 : int = constant @"1"; 189 %5 : int = add %3 %4; 190 var.store %2 %5; 191 %6 : Var<int> = var %3 @"x"; 192 %7 : int = var.load %2; 193 %8 : int = constant @"1"; 194 %9 : int = sub %7 %8; 195 var.store %2 %9; 196 %10 : Var<int> = var %7 @"y"; 197 return; 198 }; 199 """) 200 void test8(int i) { 201 int x = i++; 202 int y = i--; 203 } 204 205 @CodeReflection 206 @IR(""" 207 func @"test9" (%0 : LocalVarTest, %1 : int)void -> { 208 %2 : Var<int> = var %1 @"i"; 209 %3 : int = var.load %2; 210 %4 : int = constant @"1"; 211 %5 : int = add %3 %4; 212 var.store %2 %5; 213 %6 : Var<int> = var %5 @"x"; 214 %7 : int = var.load %2; 215 %8 : int = constant @"1"; 216 %9 : int = sub %7 %8; 217 var.store %2 %9; 218 %10 : Var<int> = var %9 @"y"; 219 return; 220 }; 221 """) 222 void test9(int i) { 223 int x = ++i; 224 int y = --i; 225 } 226 }