1ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil/* 2ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* Copyright (C) 2014 The Android Open Source Project 3ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* 4ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* Licensed under the Apache License, Version 2.0 (the "License"); 5ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* you may not use this file except in compliance with the License. 6ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* You may obtain a copy of the License at 7ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* 8ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* http://www.apache.org/licenses/LICENSE-2.0 9ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* 10ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* Unless required by applicable law or agreed to in writing, software 11ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* distributed under the License is distributed on an "AS IS" BASIS, 12ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* See the License for the specific language governing permissions and 14ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil* limitations under the License. 15ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil*/ 16ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 174846d13744f07e82571d2882acc823d811ec942dDavid Brazdilpublic class Main { 18ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 19b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static void assertIntEquals(int expected, int result) { 20b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames if (expected != result) { 21b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames throw new Error("Expected: " + expected + ", found: " + result); 22b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 23b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 24b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 25b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static void assertLongEquals(long expected, long result) { 26b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames if (expected != result) { 27b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames throw new Error("Expected: " + expected + ", found: " + result); 28b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 29b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 30b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 31ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil /** 32ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * Tiny three-register program exercising int constant folding 33ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * on negation. 34ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil */ 35ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 364846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.IntNegation() constant_folding (before) 37be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const42:i\d+]] IntConstant 42 38be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Neg:i\d+]] Neg [ [[Const42]] ] 39be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[Neg]] ] 40ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 414846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.IntNegation() constant_folding (after) 42be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[ConstN42:i\d+]] IntConstant -42 43be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[ConstN42]] ] 44ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 45ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil public static int IntNegation() { 46ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil int x, y; 47ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil x = 42; 48ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil y = -x; 49ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil return y; 50ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil } 51ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 52ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil /** 53ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * Tiny three-register program exercising int constant folding 54ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * on addition. 55ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil */ 56ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 574846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.IntAddition1() constant_folding (before) 58be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const1:i\d+]] IntConstant 1 59be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const2:i\d+]] IntConstant 2 60be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Add:i\d+]] Add [ [[Const1]] [[Const2]] ] 61be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[Add]] ] 62ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 634846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.IntAddition1() constant_folding (after) 64be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const3:i\d+]] IntConstant 3 65be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[Const3]] ] 66ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 67ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil public static int IntAddition1() { 68ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil int a, b, c; 69ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil a = 1; 70ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil b = 2; 71ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil c = a + b; 72ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil return c; 73ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil } 74ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 75ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil /** 76ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * Small three-register program exercising int constant folding 77ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * on addition. 78ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil */ 79ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 804846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.IntAddition2() constant_folding (before) 81be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const1:i\d+]] IntConstant 1 82be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const2:i\d+]] IntConstant 2 83be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const5:i\d+]] IntConstant 5 84be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const6:i\d+]] IntConstant 6 85be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Add1:i\d+]] Add [ [[Const1]] [[Const2]] ] 86be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Add2:i\d+]] Add [ [[Const5]] [[Const6]] ] 87be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Add3:i\d+]] Add [ [[Add1]] [[Add2]] ] 88be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[Add3]] ] 89ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 904846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.IntAddition2() constant_folding (after) 91be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const14:i\d+]] IntConstant 14 92be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[Const14]] ] 93ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 94ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil public static int IntAddition2() { 95ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil int a, b, c; 96ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil a = 1; 97ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil b = 2; 98ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil a += b; 99ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil b = 5; 100ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil c = 6; 101ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil b += c; 102ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil c = a + b; 103ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil return c; 104ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil } 105ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 106ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil /** 107ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * Tiny three-register program exercising int constant folding 108ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * on subtraction. 109ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil */ 110ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 1114846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.IntSubtraction() constant_folding (before) 1124846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-DAG: [[Const6:i\d+]] IntConstant 6 113be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const2:i\d+]] IntConstant 2 1144846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-DAG: [[Sub:i\d+]] Sub [ [[Const6]] [[Const2]] ] 115be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[Sub]] ] 116ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 1174846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.IntSubtraction() constant_folding (after) 1184846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-DAG: [[Const4:i\d+]] IntConstant 4 1194846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-DAG: Return [ [[Const4]] ] 120ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 121ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil public static int IntSubtraction() { 122ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil int a, b, c; 1234846d13744f07e82571d2882acc823d811ec942dDavid Brazdil a = 6; 124ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil b = 2; 125ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil c = a - b; 126ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil return c; 127ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil } 128ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 129ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil /** 130ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * Tiny three-register program exercising long constant folding 131ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * on addition. 132ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil */ 133ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 1344846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: long Main.LongAddition() constant_folding (before) 135be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const1:j\d+]] LongConstant 1 136be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const2:j\d+]] LongConstant 2 137be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Add:j\d+]] Add [ [[Const1]] [[Const2]] ] 138be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[Add]] ] 139ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 1404846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: long Main.LongAddition() constant_folding (after) 141be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const3:j\d+]] LongConstant 3 142be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[Const3]] ] 143ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 144ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil public static long LongAddition() { 145ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil long a, b, c; 146ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil a = 1L; 147ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil b = 2L; 148ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil c = a + b; 149ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil return c; 150ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil } 151ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 152ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil /** 153ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * Tiny three-register program exercising long constant folding 154ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * on subtraction. 155ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil */ 156ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 1574846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: long Main.LongSubtraction() constant_folding (before) 1584846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-DAG: [[Const6:j\d+]] LongConstant 6 159be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const2:j\d+]] LongConstant 2 1604846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-DAG: [[Sub:j\d+]] Sub [ [[Const6]] [[Const2]] ] 161be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[Sub]] ] 162ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 1634846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: long Main.LongSubtraction() constant_folding (after) 1644846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-DAG: [[Const4:j\d+]] LongConstant 4 1654846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-DAG: Return [ [[Const4]] ] 166ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 167ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil public static long LongSubtraction() { 168ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil long a, b, c; 1694846d13744f07e82571d2882acc823d811ec942dDavid Brazdil a = 6L; 170ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil b = 2L; 171ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil c = a - b; 172ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil return c; 173ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil } 174ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 175ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil /** 176ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * Three-register program with a constant (static) condition. 177ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil */ 178ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 1794846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.StaticCondition() constant_folding (before) 1804846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-DAG: [[Const7:i\d+]] IntConstant 7 181be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const2:i\d+]] IntConstant 2 1824846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-DAG: [[Cond:z\d+]] GreaterThanOrEqual [ [[Const7]] [[Const2]] ] 183be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: If [ [[Cond]] ] 184ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 1854846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.StaticCondition() constant_folding (after) 186be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const1:i\d+]] IntConstant 1 187be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: If [ [[Const1]] ] 188ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 189ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil public static int StaticCondition() { 190ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil int a, b, c; 1914846d13744f07e82571d2882acc823d811ec942dDavid Brazdil a = 7; 192ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil b = 2; 193ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil if (a < b) 194ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil c = a + b; 195ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil else 196ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil c = a - b; 197ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil return c; 198ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil } 199ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 200ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil /** 201ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * Four-variable program with jumps leading to the creation of many 202ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * blocks. 203ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * 204ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * The intent of this test is to ensure that all constant expressions 205ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * are actually evaluated at compile-time, thanks to the reverse 206ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil * (forward) post-order traversal of the the dominator tree. 207ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil */ 208ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 2094846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (before) 210be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const2:i\d+]] IntConstant 2 211be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const5:i\d+]] IntConstant 5 212be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Add:i\d+]] Add [ [[Const5]] [[Const2]] ] 213be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Sub:i\d+]] Sub [ [[Const5]] [[Const2]] ] 214be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Phi:i\d+]] Phi [ [[Add]] [[Sub]] ] 215be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[Phi]] ] 216ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 2174846d13744f07e82571d2882acc823d811ec942dDavid Brazdil // CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (after) 218be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const3:i\d+]] IntConstant 3 219be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Const7:i\d+]] IntConstant 7 220be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: [[Phi:i\d+]] Phi [ [[Const7]] [[Const3]] ] 221be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil // CHECK-DAG: Return [ [[Phi]] ] 222ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil 223ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil public static int JumpsAndConditionals(boolean cond) { 224ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil int a, b, c; 225ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil a = 5; 226ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil b = 2; 227ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil if (cond) 228ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil c = a + b; 229ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil else 230ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil c = a - b; 231ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil return c; 232ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil } 2334846d13744f07e82571d2882acc823d811ec942dDavid Brazdil 234b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames /** 235b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames * Test optimizations of arithmetic identities yielding a constant result. 236b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames */ 2374846d13744f07e82571d2882acc823d811ec942dDavid Brazdil 238b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.And0(int) constant_folding (before) 239b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 240b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:i\d+]] IntConstant 0 241b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[And:i\d+]] And [ [[Arg]] [[Const0]] ] 242b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[And]] ] 2434846d13744f07e82571d2882acc823d811ec942dDavid Brazdil 244b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.And0(int) constant_folding (after) 245b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 246b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:i\d+]] IntConstant 0 247b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-NOT: And 248b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Const0]] ] 2494846d13744f07e82571d2882acc823d811ec942dDavid Brazdil 250b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static int And0(int arg) { 251b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames return arg & 0; 252b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 2534846d13744f07e82571d2882acc823d811ec942dDavid Brazdil 254b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: long Main.Mul0(long) constant_folding (before) 255b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:j\d+]] ParameterValue 256b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:j\d+]] LongConstant 0 257b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Mul:j\d+]] Mul [ [[Arg]] [[Const0]] ] 258b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Mul]] ] 2594846d13744f07e82571d2882acc823d811ec942dDavid Brazdil 260b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: long Main.Mul0(long) constant_folding (after) 261b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:j\d+]] ParameterValue 262b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:j\d+]] LongConstant 0 263b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-NOT: Mul 264b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Const0]] ] 2654846d13744f07e82571d2882acc823d811ec942dDavid Brazdil 266b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static long Mul0(long arg) { 267b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames return arg * 0; 268b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 2694846d13744f07e82571d2882acc823d811ec942dDavid Brazdil 270b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.OrAllOnes(int) constant_folding (before) 271b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 272b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[ConstF:i\d+]] IntConstant -1 273b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Or:i\d+]] Or [ [[Arg]] [[ConstF]] ] 274b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Or]] ] 2754846d13744f07e82571d2882acc823d811ec942dDavid Brazdil 276b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.OrAllOnes(int) constant_folding (after) 277b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[ConstF:i\d+]] IntConstant -1 278b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-NOT: Or 279b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[ConstF]] ] 280b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 281b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static int OrAllOnes(int arg) { 282b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames return arg | -1; 283b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 284b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 285b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: long Main.Rem0(long) constant_folding (before) 286b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:j\d+]] ParameterValue 287b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:j\d+]] LongConstant 0 288b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[DivZeroCheck:j\d+]] DivZeroCheck [ [[Arg]] ] 289b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Rem:j\d+]] Rem [ [[Const0]] [[DivZeroCheck]] ] 290b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Rem]] ] 291b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 292b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: long Main.Rem0(long) constant_folding (after) 293b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:j\d+]] LongConstant 0 294b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-NOT: Rem 295b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Const0]] ] 296b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 297b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static long Rem0(long arg) { 298b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames return 0 % arg; 299b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 300b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 301b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.Rem1(int) constant_folding (before) 302b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 303b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const1:i\d+]] IntConstant 1 304b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Rem:i\d+]] Rem [ [[Arg]] [[Const1]] ] 305b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Rem]] ] 306b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 307b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.Rem1(int) constant_folding (after) 308b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:i\d+]] IntConstant 0 309b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-NOT: Rem 310b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Const0]] ] 311b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 312b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static int Rem1(int arg) { 313b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames return arg % 1; 314b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 315b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 316b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: long Main.RemN1(long) constant_folding (before) 317b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:j\d+]] ParameterValue 318b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[ConstN1:j\d+]] LongConstant -1 319b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[DivZeroCheck:j\d+]] DivZeroCheck [ [[Arg]] ] 320b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Rem:j\d+]] Rem [ [[Arg]] [[DivZeroCheck]] ] 321b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Rem]] ] 322b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 323b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: long Main.RemN1(long) constant_folding (after) 324b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:j\d+]] LongConstant 0 325b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-NOT: Rem 326b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Const0]] ] 327b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 328b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static long RemN1(long arg) { 329b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames return arg % -1; 330b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 331b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 332b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.Shl0(int) constant_folding (before) 333b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 334b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:i\d+]] IntConstant 0 335b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Shl:i\d+]] Shl [ [[Const0]] [[Arg]] ] 336b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Shl]] ] 337b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 338b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.Shl0(int) constant_folding (after) 339b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 340b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:i\d+]] IntConstant 0 341b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-NOT: Shl 342b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Const0]] ] 343b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 344b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static int Shl0(int arg) { 345b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames return 0 << arg; 346b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 347b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 348b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: long Main.Shr0(int) constant_folding (before) 349b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 350b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:j\d+]] LongConstant 0 351b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Shr:j\d+]] Shr [ [[Const0]] [[Arg]] ] 352b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Shr]] ] 353b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 354b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: long Main.Shr0(int) constant_folding (after) 355b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 356b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:j\d+]] LongConstant 0 357b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-NOT: Shr 358b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Const0]] ] 359b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 360b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static long Shr0(int arg) { 361b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames return (long)0 >> arg; 362b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 363b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 364b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: long Main.SubSameLong(long) constant_folding (before) 365b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:j\d+]] ParameterValue 366b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Sub:j\d+]] Sub [ [[Arg]] [[Arg]] ] 367b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Sub]] ] 368b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 369b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: long Main.SubSameLong(long) constant_folding (after) 370b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:j\d+]] ParameterValue 371b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:j\d+]] LongConstant 0 372b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-NOT: Sub 373b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Const0]] ] 374b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 375b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static long SubSameLong(long arg) { 376b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames return arg - arg; 377b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 378b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 379b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.UShr0(int) constant_folding (before) 380b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 381b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:i\d+]] IntConstant 0 382b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[UShr:i\d+]] UShr [ [[Const0]] [[Arg]] ] 383b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[UShr]] ] 384b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 385b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.UShr0(int) constant_folding (after) 386b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 387b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:i\d+]] IntConstant 0 388b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-NOT: UShr 389b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Const0]] ] 390b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 391b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static int UShr0(int arg) { 392b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames return 0 >>> arg; 393b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 394b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 395b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.XorSameInt(int) constant_folding (before) 396b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 397b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Xor:i\d+]] Xor [ [[Arg]] [[Arg]] ] 398b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Xor]] ] 399b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 400b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-START: int Main.XorSameInt(int) constant_folding (after) 401b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Arg:i\d+]] ParameterValue 402b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: [[Const0:i\d+]] IntConstant 0 403b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-NOT: Xor 404b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames // CHECK-DAG: Return [ [[Const0]] ] 405b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 406b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static int XorSameInt(int arg) { 407b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames return arg ^ arg; 408b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames } 409b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames 410b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames public static void main(String[] args) { 411b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(IntNegation(), -42); 412b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(IntAddition1(), 3); 413b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(IntAddition2(), 14); 414b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(IntSubtraction(), 4); 415b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertLongEquals(LongAddition(), 3L); 416b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertLongEquals(LongSubtraction(), 4L); 417b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(StaticCondition(), 5); 418b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(JumpsAndConditionals(true), 7); 419b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(JumpsAndConditionals(false), 3); 420b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames int random = 123456; // Chosen randomly. 421b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(And0(random), 0); 422b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertLongEquals(Mul0(random), 0); 423b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(OrAllOnes(random), -1); 424b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertLongEquals(Rem0(random), 0); 425b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(Rem1(random), 0); 426b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertLongEquals(RemN1(random), 0); 427b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(Shl0(random), 0); 428b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertLongEquals(Shr0(random), 0); 429b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertLongEquals(SubSameLong(random), 0); 430b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(UShr0(random), 0); 431b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames assertIntEquals(XorSameInt(random), 0); 4324846d13744f07e82571d2882acc823d811ec942dDavid Brazdil } 433ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil} 434