Main.java revision be0cc08fb4faed1ab69361fcd030af65f9020393
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
17ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdilpublic class ConstantFolding {
18ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
19ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
20ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * Tiny three-register program exercising int constant folding
21ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * on negation.
22ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
23ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
24ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.IntNegation() constant_folding (before)
25be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const42:i\d+]]  IntConstant 42
26be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Neg:i\d+]]      Neg [ [[Const42]] ]
27be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                       Return [ [[Neg]] ]
28ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
29ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.IntNegation() constant_folding (after)
30be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[ConstN42:i\d+]] IntConstant -42
31be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                       Return [ [[ConstN42]] ]
32ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
33ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static int IntNegation() {
34ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    int x, y;
35ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    x = 42;
36ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    y = -x;
37ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return y;
38ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
39ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
40ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
41ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * Tiny three-register program exercising int constant folding
42ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * on addition.
43ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
44ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
45ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.IntAddition1() constant_folding (before)
46be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const1:i\d+]]  IntConstant 1
47be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const2:i\d+]]  IntConstant 2
48be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Add:i\d+]]     Add [ [[Const1]] [[Const2]] ]
49be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Add]] ]
50ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
51ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.IntAddition1() constant_folding (after)
52be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const3:i\d+]]  IntConstant 3
53be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Const3]] ]
54ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
55ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static int IntAddition1() {
56ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    int a, b, c;
57ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    a = 1;
58ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    b = 2;
59ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    c = a + b;
60ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
61ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
62ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
63ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil /**
64ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  * Small three-register program exercising int constant folding
65ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  * on addition.
66ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  */
67ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
68ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.IntAddition2() constant_folding (before)
69be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const1:i\d+]]  IntConstant 1
70be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const2:i\d+]]  IntConstant 2
71be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const5:i\d+]]  IntConstant 5
72be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const6:i\d+]]  IntConstant 6
73be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Add1:i\d+]]    Add [ [[Const1]] [[Const2]] ]
74be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Add2:i\d+]]    Add [ [[Const5]] [[Const6]] ]
75be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Add3:i\d+]]    Add [ [[Add1]] [[Add2]] ]
76be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Add3]] ]
77ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
78ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.IntAddition2() constant_folding (after)
79be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const14:i\d+]] IntConstant 14
80be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Const14]] ]
81ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
82ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static int IntAddition2() {
83ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    int a, b, c;
84ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    a = 1;
85ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    b = 2;
86ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    a += b;
87ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    b = 5;
88ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    c = 6;
89ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    b += c;
90ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    c = a + b;
91ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
92ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
93ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
94ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
95ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * Tiny three-register program exercising int constant folding
96ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * on subtraction.
97ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
98ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
99ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.IntSubtraction() constant_folding (before)
100be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const5:i\d+]]  IntConstant 5
101be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const2:i\d+]]  IntConstant 2
102be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Sub:i\d+]]     Sub [ [[Const5]] [[Const2]] ]
103be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Sub]] ]
104ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
105ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.IntSubtraction() constant_folding (after)
106be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const3:i\d+]]  IntConstant 3
107be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Const3]] ]
108ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
109ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static int IntSubtraction() {
110ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    int a, b, c;
111ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    a = 5;
112ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    b = 2;
113ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    c = a - b;
114ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
115ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
116ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
117ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
118ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * Tiny three-register program exercising long constant folding
119ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * on addition.
120ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
121ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
122ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: long ConstantFolding.LongAddition() constant_folding (before)
123be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const1:j\d+]]  LongConstant 1
124be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const2:j\d+]]  LongConstant 2
125be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Add:j\d+]]     Add [ [[Const1]] [[Const2]] ]
126be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Add]] ]
127ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
128ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: long ConstantFolding.LongAddition() constant_folding (after)
129be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const3:j\d+]]  LongConstant 3
130be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Const3]] ]
131ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
132ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static long LongAddition() {
133ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    long a, b, c;
134ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    a = 1L;
135ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    b = 2L;
136ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    c = a + b;
137ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
138ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
139ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
140ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
141ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * Tiny three-register program exercising long constant folding
142ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * on subtraction.
143ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
144ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
145ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: long ConstantFolding.LongSubtraction() constant_folding (before)
146be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const5:j\d+]]  LongConstant 5
147be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const2:j\d+]]  LongConstant 2
148be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Sub:j\d+]]     Sub [ [[Const5]] [[Const2]] ]
149be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Sub]] ]
150ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
151ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: long ConstantFolding.LongSubtraction() constant_folding (after)
152be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const3:j\d+]]  LongConstant 3
153be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Const3]] ]
154ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
155ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static long LongSubtraction() {
156ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    long a, b, c;
157ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    a = 5L;
158ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    b = 2L;
159ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    c = a - b;
160ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
161ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
162ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
163ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
164ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * Three-register program with a constant (static) condition.
165ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
166ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
167ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.StaticCondition() constant_folding (before)
168be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const5:i\d+]]  IntConstant 5
169be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const2:i\d+]]  IntConstant 2
170be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Cond:z\d+]]    GreaterThanOrEqual [ [[Const5]] [[Const2]] ]
171be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      If [ [[Cond]] ]
172ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
173ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.StaticCondition() constant_folding (after)
174be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const1:i\d+]]  IntConstant 1
175be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      If [ [[Const1]] ]
176ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
177ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static int StaticCondition() {
178ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    int a, b, c;
179ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    a = 5;
180ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    b = 2;
181ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    if (a < b)
182ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil      c = a + b;
183ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    else
184ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil      c = a - b;
185ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
186ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
187ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
188ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
189ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * Four-variable program with jumps leading to the creation of many
190ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * blocks.
191ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   *
192ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * The intent of this test is to ensure that all constant expressions
193ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * are actually evaluated at compile-time, thanks to the reverse
194ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * (forward) post-order traversal of the the dominator tree.
195ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
196ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
197ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.JumpsAndConditionals(boolean) constant_folding (before)
198be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const2:i\d+]]  IntConstant 2
199be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const5:i\d+]]  IntConstant 5
200be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Add:i\d+]]     Add [ [[Const5]] [[Const2]] ]
201be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Sub:i\d+]]     Sub [ [[Const5]] [[Const2]] ]
202be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Phi:i\d+]]     Phi [ [[Add]] [[Sub]] ]
203be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Phi]] ]
204ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
205ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  // CHECK-START: int ConstantFolding.JumpsAndConditionals(boolean) constant_folding (after)
206be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const3:i\d+]]  IntConstant 3
207be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Const7:i\d+]]  IntConstant 7
208be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:     [[Phi:i\d+]]     Phi [ [[Const7]] [[Const3]] ]
209be0cc08fb4faed1ab69361fcd030af65f9020393David Brazdil  // CHECK-DAG:                      Return [ [[Phi]] ]
210ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
211ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static int JumpsAndConditionals(boolean cond) {
212ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    int a, b, c;
213ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    a = 5;
214ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    b = 2;
215ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    if (cond)
216ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil      c = a + b;
217ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    else
218ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil      c = a - b;
219ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
220ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
221ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil}
222