1 /*
2  * Copyright (c) 2015, 2018, 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 
25 package org.graalvm.compiler.loop;
26 
27 import org.graalvm.compiler.core.common.type.Stamp;
28 import org.graalvm.compiler.nodes.NodeView;
29 import org.graalvm.compiler.nodes.ValueNode;
30 import org.graalvm.compiler.nodes.calc.IntegerConvertNode;
31 
32 public class DerivedConvertedInductionVariable extends DerivedInductionVariable {
33 
34     private final Stamp stamp;
35     private final ValueNode value;
36 
DerivedConvertedInductionVariable(LoopEx loop, InductionVariable base, Stamp stamp, ValueNode value)37     public DerivedConvertedInductionVariable(LoopEx loop, InductionVariable base, Stamp stamp, ValueNode value) {
38         super(loop, base);
39         this.stamp = stamp;
40         this.value = value;
41     }
42 
43     @Override
valueNode()44     public ValueNode valueNode() {
45         return value;
46     }
47 
48     @Override
direction()49     public Direction direction() {
50         return base.direction();
51     }
52 
53     @Override
initNode()54     public ValueNode initNode() {
55         return IntegerConvertNode.convert(base.initNode(), stamp, graph(), NodeView.DEFAULT);
56     }
57 
58     @Override
strideNode()59     public ValueNode strideNode() {
60         return IntegerConvertNode.convert(base.strideNode(), stamp, graph(), NodeView.DEFAULT);
61     }
62 
63     @Override
isConstantInit()64     public boolean isConstantInit() {
65         return base.isConstantInit();
66     }
67 
68     @Override
isConstantStride()69     public boolean isConstantStride() {
70         return base.isConstantStride();
71     }
72 
73     @Override
constantInit()74     public long constantInit() {
75         return base.constantInit();
76     }
77 
78     @Override
constantStride()79     public long constantStride() {
80         return base.constantStride();
81     }
82 
83     @Override
extremumNode(boolean assumeLoopEntered, Stamp s)84     public ValueNode extremumNode(boolean assumeLoopEntered, Stamp s) {
85         return base.extremumNode(assumeLoopEntered, s);
86     }
87 
88     @Override
exitValueNode()89     public ValueNode exitValueNode() {
90         return IntegerConvertNode.convert(base.exitValueNode(), stamp, graph(), NodeView.DEFAULT);
91     }
92 
93     @Override
isConstantExtremum()94     public boolean isConstantExtremum() {
95         return base.isConstantExtremum();
96     }
97 
98     @Override
constantExtremum()99     public long constantExtremum() {
100         return base.constantExtremum();
101     }
102 
103     @Override
deleteUnusedNodes()104     public void deleteUnusedNodes() {
105     }
106 
107     @Override
toString()108     public String toString() {
109         return String.format("DerivedConvertedInductionVariable base (%s) %s %s", base, value.getNodeClass().shortName(), stamp);
110     }
111 }
112