annotate src/share/vm/opto/vectornode.hpp @ 9126:bc26f978b0ce

HotSpotResolvedObjectType: implement hasFinalizeSubclass() correctly don't use the (wrong) cached value, but ask the runtime on each request. Fixes regression on xml.* benchmarks @ specjvm2008. The problem was: After the constructor of Object was deoptimized due to an assumption violation, it was recompiled again after some time. However, on recompilation, the value of hasFinalizeSubclass for the class was not updated and it was compiled again with a, now wrong, assumption, which then triggers deoptimization again. This was repeated until it hit the recompilation limit (defined by PerMethodRecompilationCutoff), and therefore only executed by the interpreter from now on, causing the performance regression.
author Bernhard Urban <bernhard.urban@jku.at>
date Mon, 15 Apr 2013 19:54:58 +0200
parents 859c45fb8cea
children 2113136690bc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
2 * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 */
a61af66fc99e Initial load
duke
parents:
diff changeset
23
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
24 #ifndef SHARE_VM_OPTO_VECTORNODE_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
25 #define SHARE_VM_OPTO_VECTORNODE_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
27 #include "opto/matcher.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
28 #include "opto/memnode.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
29 #include "opto/node.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
30 #include "opto/opcodes.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
31
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
32 //------------------------------VectorNode-------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
33 // Vector Operation
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
34 class VectorNode : public TypeNode {
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
35 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
36
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
37 VectorNode(Node* n1, const TypeVect* vt) : TypeNode(vt, 2) {
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
38 init_class_id(Class_Vector);
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
39 init_req(1, n1);
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
40 }
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
41 VectorNode(Node* n1, Node* n2, const TypeVect* vt) : TypeNode(vt, 3) {
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
42 init_class_id(Class_Vector);
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
43 init_req(1, n1);
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
44 init_req(2, n2);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
45 }
a61af66fc99e Initial load
duke
parents:
diff changeset
46
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
47 const TypeVect* vect_type() const { return type()->is_vect(); }
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
48 uint length() const { return vect_type()->length(); } // Vector length
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
49 uint length_in_bytes() const { return vect_type()->length_in_bytes(); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
50
a61af66fc99e Initial load
duke
parents:
diff changeset
51 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
52
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
53 virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(vect_type()->length_in_bytes()); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
54
a61af66fc99e Initial load
duke
parents:
diff changeset
55 static VectorNode* scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t);
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
56 static VectorNode* shift_count(Compile* C, Node* shift, Node* cnt, uint vlen, BasicType bt);
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
57 static VectorNode* make(Compile* C, int opc, Node* n1, Node* n2, uint vlen, BasicType bt);
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
58
6619
5af51c882207 7192963: assert(_in[req-1] == this) failed: Must pass arg count to 'new'
kvn
parents: 6614
diff changeset
59 static int opcode(int opc, BasicType bt);
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
60 static bool implemented(int opc, uint vlen, BasicType bt);
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
61 static bool is_shift(Node* n);
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
62 static bool is_invariant_vector(Node* n);
6619
5af51c882207 7192963: assert(_in[req-1] == this) failed: Must pass arg count to 'new'
kvn
parents: 6614
diff changeset
63 // [Start, end) half-open range defining which operands are vectors
5af51c882207 7192963: assert(_in[req-1] == this) failed: Must pass arg count to 'new'
kvn
parents: 6614
diff changeset
64 static void vector_operands(Node* n, uint* start, uint* end);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
65 };
a61af66fc99e Initial load
duke
parents:
diff changeset
66
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
67 //===========================Vector=ALU=Operations=============================
0
a61af66fc99e Initial load
duke
parents:
diff changeset
68
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
69 //------------------------------AddVBNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
70 // Vector add byte
a61af66fc99e Initial load
duke
parents:
diff changeset
71 class AddVBNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
72 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
73 AddVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
74 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
75 };
a61af66fc99e Initial load
duke
parents:
diff changeset
76
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
77 //------------------------------AddVSNode--------------------------------------
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
78 // Vector add char/short
0
a61af66fc99e Initial load
duke
parents:
diff changeset
79 class AddVSNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
80 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
81 AddVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
82 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
83 };
a61af66fc99e Initial load
duke
parents:
diff changeset
84
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
85 //------------------------------AddVINode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
86 // Vector add int
a61af66fc99e Initial load
duke
parents:
diff changeset
87 class AddVINode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
88 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
89 AddVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
90 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
91 };
a61af66fc99e Initial load
duke
parents:
diff changeset
92
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
93 //------------------------------AddVLNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
94 // Vector add long
a61af66fc99e Initial load
duke
parents:
diff changeset
95 class AddVLNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
96 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
97 AddVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
98 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
99 };
a61af66fc99e Initial load
duke
parents:
diff changeset
100
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
101 //------------------------------AddVFNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
102 // Vector add float
a61af66fc99e Initial load
duke
parents:
diff changeset
103 class AddVFNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
104 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
105 AddVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
106 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
107 };
a61af66fc99e Initial load
duke
parents:
diff changeset
108
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
109 //------------------------------AddVDNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
110 // Vector add double
a61af66fc99e Initial load
duke
parents:
diff changeset
111 class AddVDNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
112 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
113 AddVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
114 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
115 };
a61af66fc99e Initial load
duke
parents:
diff changeset
116
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
117 //------------------------------SubVBNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
118 // Vector subtract byte
a61af66fc99e Initial load
duke
parents:
diff changeset
119 class SubVBNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
120 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
121 SubVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
122 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
123 };
a61af66fc99e Initial load
duke
parents:
diff changeset
124
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
125 //------------------------------SubVSNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
126 // Vector subtract short
a61af66fc99e Initial load
duke
parents:
diff changeset
127 class SubVSNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
128 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
129 SubVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
130 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
131 };
a61af66fc99e Initial load
duke
parents:
diff changeset
132
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
133 //------------------------------SubVINode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
134 // Vector subtract int
a61af66fc99e Initial load
duke
parents:
diff changeset
135 class SubVINode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
136 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
137 SubVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
138 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
139 };
a61af66fc99e Initial load
duke
parents:
diff changeset
140
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
141 //------------------------------SubVLNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
142 // Vector subtract long
a61af66fc99e Initial load
duke
parents:
diff changeset
143 class SubVLNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
144 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
145 SubVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
146 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
147 };
a61af66fc99e Initial load
duke
parents:
diff changeset
148
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
149 //------------------------------SubVFNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
150 // Vector subtract float
a61af66fc99e Initial load
duke
parents:
diff changeset
151 class SubVFNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
152 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
153 SubVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
154 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
155 };
a61af66fc99e Initial load
duke
parents:
diff changeset
156
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
157 //------------------------------SubVDNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
158 // Vector subtract double
a61af66fc99e Initial load
duke
parents:
diff changeset
159 class SubVDNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
160 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
161 SubVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
162 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
163 };
a61af66fc99e Initial load
duke
parents:
diff changeset
164
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
165 //------------------------------MulVSNode--------------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
166 // Vector multiply short
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
167 class MulVSNode : public VectorNode {
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
168 public:
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
169 MulVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
170 virtual int Opcode() const;
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
171 };
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
172
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
173 //------------------------------MulVINode--------------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
174 // Vector multiply int
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
175 class MulVINode : public VectorNode {
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
176 public:
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
177 MulVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
178 virtual int Opcode() const;
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
179 };
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
180
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
181 //------------------------------MulVFNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
182 // Vector multiply float
a61af66fc99e Initial load
duke
parents:
diff changeset
183 class MulVFNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
184 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
185 MulVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
186 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
187 };
a61af66fc99e Initial load
duke
parents:
diff changeset
188
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
189 //------------------------------MulVDNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
190 // Vector multiply double
a61af66fc99e Initial load
duke
parents:
diff changeset
191 class MulVDNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
192 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
193 MulVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
194 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
195 };
a61af66fc99e Initial load
duke
parents:
diff changeset
196
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
197 //------------------------------DivVFNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
198 // Vector divide float
a61af66fc99e Initial load
duke
parents:
diff changeset
199 class DivVFNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
200 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
201 DivVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
202 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
203 };
a61af66fc99e Initial load
duke
parents:
diff changeset
204
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
205 //------------------------------DivVDNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
206 // Vector Divide double
a61af66fc99e Initial load
duke
parents:
diff changeset
207 class DivVDNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
208 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
209 DivVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
210 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
211 };
a61af66fc99e Initial load
duke
parents:
diff changeset
212
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
213 //------------------------------LShiftVBNode-----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
214 // Vector left shift bytes
0
a61af66fc99e Initial load
duke
parents:
diff changeset
215 class LShiftVBNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
216 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
217 LShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
218 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
219 };
a61af66fc99e Initial load
duke
parents:
diff changeset
220
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
221 //------------------------------LShiftVSNode-----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
222 // Vector left shift shorts
0
a61af66fc99e Initial load
duke
parents:
diff changeset
223 class LShiftVSNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
224 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
225 LShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
226 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
227 };
a61af66fc99e Initial load
duke
parents:
diff changeset
228
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
229 //------------------------------LShiftVINode-----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
230 // Vector left shift ints
0
a61af66fc99e Initial load
duke
parents:
diff changeset
231 class LShiftVINode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
232 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
233 LShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
234 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
235 };
a61af66fc99e Initial load
duke
parents:
diff changeset
236
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
237 //------------------------------LShiftVLNode-----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
238 // Vector left shift longs
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
239 class LShiftVLNode : public VectorNode {
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
240 public:
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
241 LShiftVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
242 virtual int Opcode() const;
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
243 };
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
244
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
245 //------------------------------RShiftVBNode-----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
246 // Vector right arithmetic (signed) shift bytes
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
247 class RShiftVBNode : public VectorNode {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
248 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
249 RShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
250 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
251 };
a61af66fc99e Initial load
duke
parents:
diff changeset
252
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
253 //------------------------------RShiftVSNode-----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
254 // Vector right arithmetic (signed) shift shorts
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
255 class RShiftVSNode : public VectorNode {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
256 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
257 RShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
258 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
259 };
a61af66fc99e Initial load
duke
parents:
diff changeset
260
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
261 //------------------------------RShiftVINode-----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
262 // Vector right arithmetic (signed) shift ints
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
263 class RShiftVINode : public VectorNode {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
264 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
265 RShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
266 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
267 };
a61af66fc99e Initial load
duke
parents:
diff changeset
268
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
269 //------------------------------RShiftVLNode-----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
270 // Vector right arithmetic (signed) shift longs
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
271 class RShiftVLNode : public VectorNode {
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
272 public:
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
273 RShiftVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
274 virtual int Opcode() const;
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
275 };
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
276
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
277 //------------------------------URShiftVBNode----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
278 // Vector right logical (unsigned) shift bytes
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
279 class URShiftVBNode : public VectorNode {
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
280 public:
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
281 URShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
282 virtual int Opcode() const;
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
283 };
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
284
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
285 //------------------------------URShiftVSNode----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
286 // Vector right logical (unsigned) shift shorts
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
287 class URShiftVSNode : public VectorNode {
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
288 public:
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
289 URShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
290 virtual int Opcode() const;
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
291 };
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
292
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
293 //------------------------------URShiftVINode----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
294 // Vector right logical (unsigned) shift ints
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
295 class URShiftVINode : public VectorNode {
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
296 public:
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
297 URShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
298 virtual int Opcode() const;
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
299 };
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
300
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
301 //------------------------------URShiftVLNode----------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
302 // Vector right logical (unsigned) shift longs
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
303 class URShiftVLNode : public VectorNode {
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
304 public:
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
305 URShiftVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
306 virtual int Opcode() const;
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
307 };
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
308
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
309 //------------------------------LShiftCntVNode---------------------------------
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
310 // Vector left shift count
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
311 class LShiftCntVNode : public VectorNode {
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
312 public:
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
313 LShiftCntVNode(Node* cnt, const TypeVect* vt) : VectorNode(cnt,vt) {}
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
314 virtual int Opcode() const;
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
315 virtual uint ideal_reg() const { return Matcher::vector_shift_count_ideal_reg(vect_type()->length_in_bytes()); }
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
316 };
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
317
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
318 //------------------------------RShiftCntVNode---------------------------------
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
319 // Vector right shift count
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
320 class RShiftCntVNode : public VectorNode {
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
321 public:
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
322 RShiftCntVNode(Node* cnt, const TypeVect* vt) : VectorNode(cnt,vt) {}
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
323 virtual int Opcode() const;
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
324 virtual uint ideal_reg() const { return Matcher::vector_shift_count_ideal_reg(vect_type()->length_in_bytes()); }
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
325 };
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
326
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
327
0
a61af66fc99e Initial load
duke
parents:
diff changeset
328 //------------------------------AndVNode---------------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
329 // Vector and integer
0
a61af66fc99e Initial load
duke
parents:
diff changeset
330 class AndVNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
331 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
332 AndVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
333 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
334 };
a61af66fc99e Initial load
duke
parents:
diff changeset
335
a61af66fc99e Initial load
duke
parents:
diff changeset
336 //------------------------------OrVNode---------------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
337 // Vector or integer
0
a61af66fc99e Initial load
duke
parents:
diff changeset
338 class OrVNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
339 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
340 OrVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
341 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
342 };
a61af66fc99e Initial load
duke
parents:
diff changeset
343
a61af66fc99e Initial load
duke
parents:
diff changeset
344 //------------------------------XorVNode---------------------------------------
6614
006050192a5a 6340864: Implement vectorization optimizations in hotspot-server
kvn
parents: 6179
diff changeset
345 // Vector xor integer
0
a61af66fc99e Initial load
duke
parents:
diff changeset
346 class XorVNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
347 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
348 XorVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
349 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
350 };
a61af66fc99e Initial load
duke
parents:
diff changeset
351
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
352 //================================= M E M O R Y ===============================
0
a61af66fc99e Initial load
duke
parents:
diff changeset
353
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
354 //------------------------------LoadVectorNode---------------------------------
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
355 // Load Vector from memory
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
356 class LoadVectorNode : public LoadNode {
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
357 public:
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
358 LoadVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt)
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
359 : LoadNode(c, mem, adr, at, vt) {
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
360 init_class_id(Class_LoadVector);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
361 }
a61af66fc99e Initial load
duke
parents:
diff changeset
362
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
363 const TypeVect* vect_type() const { return type()->is_vect(); }
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
364 uint length() const { return vect_type()->length(); } // Vector length
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
365
0
a61af66fc99e Initial load
duke
parents:
diff changeset
366 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
367
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
368 virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
369 virtual BasicType memory_type() const { return T_VOID; }
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
370 virtual int memory_size() const { return vect_type()->length_in_bytes(); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
371
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
372 virtual int store_Opcode() const { return Op_StoreVector; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
373
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
374 static LoadVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem,
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
375 Node* adr, const TypePtr* atyp, uint vlen, BasicType bt);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
376 };
a61af66fc99e Initial load
duke
parents:
diff changeset
377
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
378 //------------------------------StoreVectorNode--------------------------------
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
379 // Store Vector to memory
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
380 class StoreVectorNode : public StoreNode {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
381 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
382 StoreVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
383 : StoreNode(c, mem, adr, at, val) {
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
384 assert(val->is_Vector() || val->is_LoadVector(), "sanity");
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
385 init_class_id(Class_StoreVector);
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
386 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
387
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
388 const TypeVect* vect_type() const { return in(MemNode::ValueIn)->bottom_type()->is_vect(); }
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
389 uint length() const { return vect_type()->length(); } // Vector length
0
a61af66fc99e Initial load
duke
parents:
diff changeset
390
a61af66fc99e Initial load
duke
parents:
diff changeset
391 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
392
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
393 virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); }
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
394 virtual BasicType memory_type() const { return T_VOID; }
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
395 virtual int memory_size() const { return vect_type()->length_in_bytes(); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
396
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
397 static StoreVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem,
3842
c7b60b601eb4 7069452: Cleanup NodeFlags
kvn
parents: 2445
diff changeset
398 Node* adr, const TypePtr* atyp, Node* val,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
399 uint vlen);
a61af66fc99e Initial load
duke
parents:
diff changeset
400 };
a61af66fc99e Initial load
duke
parents:
diff changeset
401
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
402
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
403 //=========================Promote_Scalar_to_Vector============================
0
a61af66fc99e Initial load
duke
parents:
diff changeset
404
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
405 //------------------------------ReplicateBNode---------------------------------
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
406 // Replicate byte scalar to be vector
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
407 class ReplicateBNode : public VectorNode {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
408 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
409 ReplicateBNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
410 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
411 };
a61af66fc99e Initial load
duke
parents:
diff changeset
412
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
413 //------------------------------ReplicateSNode---------------------------------
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
414 // Replicate short scalar to be vector
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
415 class ReplicateSNode : public VectorNode {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
416 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
417 ReplicateSNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
418 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
419 };
a61af66fc99e Initial load
duke
parents:
diff changeset
420
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
421 //------------------------------ReplicateINode---------------------------------
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
422 // Replicate int scalar to be vector
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
423 class ReplicateINode : public VectorNode {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
424 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
425 ReplicateINode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
426 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
427 };
a61af66fc99e Initial load
duke
parents:
diff changeset
428
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
429 //------------------------------ReplicateLNode---------------------------------
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
430 // Replicate long scalar to be vector
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
431 class ReplicateLNode : public VectorNode {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
432 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
433 ReplicateLNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
434 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
435 };
a61af66fc99e Initial load
duke
parents:
diff changeset
436
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
437 //------------------------------ReplicateFNode---------------------------------
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
438 // Replicate float scalar to be vector
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
439 class ReplicateFNode : public VectorNode {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
440 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
441 ReplicateFNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
442 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
443 };
a61af66fc99e Initial load
duke
parents:
diff changeset
444
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
445 //------------------------------ReplicateDNode---------------------------------
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
446 // Replicate double scalar to be vector
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
447 class ReplicateDNode : public VectorNode {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
448 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
449 ReplicateDNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
450 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
451 };
a61af66fc99e Initial load
duke
parents:
diff changeset
452
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
453 //========================Pack_Scalars_into_a_Vector===========================
0
a61af66fc99e Initial load
duke
parents:
diff changeset
454
a61af66fc99e Initial load
duke
parents:
diff changeset
455 //------------------------------PackNode---------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
456 // Pack parent class (not for code generation).
a61af66fc99e Initial load
duke
parents:
diff changeset
457 class PackNode : public VectorNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
458 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
459 PackNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {}
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
460 PackNode(Node* in1, Node* n2, const TypeVect* vt) : VectorNode(in1, n2, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
461 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
462
6619
5af51c882207 7192963: assert(_in[req-1] == this) failed: Must pass arg count to 'new'
kvn
parents: 6614
diff changeset
463 void add_opd(Node* n) {
5af51c882207 7192963: assert(_in[req-1] == this) failed: Must pass arg count to 'new'
kvn
parents: 6614
diff changeset
464 add_req(n);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
465 }
a61af66fc99e Initial load
duke
parents:
diff changeset
466
a61af66fc99e Initial load
duke
parents:
diff changeset
467 // Create a binary tree form for Packs. [lo, hi) (half-open) range
6619
5af51c882207 7192963: assert(_in[req-1] == this) failed: Must pass arg count to 'new'
kvn
parents: 6614
diff changeset
468 PackNode* binary_tree_pack(Compile* C, int lo, int hi);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
469
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
470 static PackNode* make(Compile* C, Node* s, uint vlen, BasicType bt);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
471 };
a61af66fc99e Initial load
duke
parents:
diff changeset
472
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
473 //------------------------------PackBNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
474 // Pack byte scalars into vector
a61af66fc99e Initial load
duke
parents:
diff changeset
475 class PackBNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
476 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
477 PackBNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
478 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
479 };
a61af66fc99e Initial load
duke
parents:
diff changeset
480
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
481 //------------------------------PackSNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
482 // Pack short scalars into a vector
a61af66fc99e Initial load
duke
parents:
diff changeset
483 class PackSNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
484 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
485 PackSNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {}
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
486 PackSNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
487 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
488 };
a61af66fc99e Initial load
duke
parents:
diff changeset
489
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
490 //------------------------------PackINode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
491 // Pack integer scalars into a vector
a61af66fc99e Initial load
duke
parents:
diff changeset
492 class PackINode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
493 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
494 PackINode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {}
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
495 PackINode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
496 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
497 };
a61af66fc99e Initial load
duke
parents:
diff changeset
498
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
499 //------------------------------PackLNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
500 // Pack long scalars into a vector
a61af66fc99e Initial load
duke
parents:
diff changeset
501 class PackLNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
502 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
503 PackLNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {}
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
504 PackLNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {}
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
505 virtual int Opcode() const;
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
506 };
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
507
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
508 //------------------------------Pack2LNode-------------------------------------
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
509 // Pack 2 long scalars into a vector
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
510 class Pack2LNode : public PackNode {
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
511 public:
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
512 Pack2LNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
513 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
514 };
a61af66fc99e Initial load
duke
parents:
diff changeset
515
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
516 //------------------------------PackFNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
517 // Pack float scalars into vector
a61af66fc99e Initial load
duke
parents:
diff changeset
518 class PackFNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
519 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
520 PackFNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {}
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
521 PackFNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
522 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
523 };
a61af66fc99e Initial load
duke
parents:
diff changeset
524
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
525 //------------------------------PackDNode--------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
526 // Pack double scalars into a vector
a61af66fc99e Initial load
duke
parents:
diff changeset
527 class PackDNode : public PackNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
528 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
529 PackDNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {}
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
530 PackDNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
531 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
532 };
a61af66fc99e Initial load
duke
parents:
diff changeset
533
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
534 //------------------------------Pack2DNode-------------------------------------
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
535 // Pack 2 double scalars into a vector
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
536 class Pack2DNode : public PackNode {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
537 public:
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
538 Pack2DNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
539 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
540 };
a61af66fc99e Initial load
duke
parents:
diff changeset
541
a61af66fc99e Initial load
duke
parents:
diff changeset
542
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
543 //========================Extract_Scalar_from_Vector===========================
0
a61af66fc99e Initial load
duke
parents:
diff changeset
544
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
545 //------------------------------ExtractNode------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
546 // Extract a scalar from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
547 class ExtractNode : public Node {
a61af66fc99e Initial load
duke
parents:
diff changeset
548 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
549 ExtractNode(Node* src, ConINode* pos) : Node(NULL, src, (Node*)pos) {
a61af66fc99e Initial load
duke
parents:
diff changeset
550 assert(in(2)->get_int() >= 0, "positive constants");
a61af66fc99e Initial load
duke
parents:
diff changeset
551 }
a61af66fc99e Initial load
duke
parents:
diff changeset
552 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
553 uint pos() const { return in(2)->get_int(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
554
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
555 static Node* make(Compile* C, Node* v, uint position, BasicType bt);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
556 };
a61af66fc99e Initial load
duke
parents:
diff changeset
557
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
558 //------------------------------ExtractBNode-----------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
559 // Extract a byte from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
560 class ExtractBNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
561 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
562 ExtractBNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
563 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
564 virtual const Type *bottom_type() const { return TypeInt::INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
565 virtual uint ideal_reg() const { return Op_RegI; }
a61af66fc99e Initial load
duke
parents:
diff changeset
566 };
a61af66fc99e Initial load
duke
parents:
diff changeset
567
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
568 //------------------------------ExtractUBNode----------------------------------
6179
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
569 // Extract a boolean from a vector at position "pos"
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
570 class ExtractUBNode : public ExtractNode {
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
571 public:
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
572 ExtractUBNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
573 virtual int Opcode() const;
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
574 virtual const Type *bottom_type() const { return TypeInt::INT; }
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
575 virtual uint ideal_reg() const { return Op_RegI; }
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
576 };
8c92982cbbc4 7119644: Increase superword's vector size up to 256 bits
kvn
parents: 3842
diff changeset
577
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
578 //------------------------------ExtractCNode-----------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
579 // Extract a char from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
580 class ExtractCNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
581 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
582 ExtractCNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
583 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
584 virtual const Type *bottom_type() const { return TypeInt::INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
585 virtual uint ideal_reg() const { return Op_RegI; }
a61af66fc99e Initial load
duke
parents:
diff changeset
586 };
a61af66fc99e Initial load
duke
parents:
diff changeset
587
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
588 //------------------------------ExtractSNode-----------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
589 // Extract a short from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
590 class ExtractSNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
591 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
592 ExtractSNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
593 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
594 virtual const Type *bottom_type() const { return TypeInt::INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
595 virtual uint ideal_reg() const { return Op_RegI; }
a61af66fc99e Initial load
duke
parents:
diff changeset
596 };
a61af66fc99e Initial load
duke
parents:
diff changeset
597
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
598 //------------------------------ExtractINode-----------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
599 // Extract an int from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
600 class ExtractINode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
601 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
602 ExtractINode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
603 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
604 virtual const Type *bottom_type() const { return TypeInt::INT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
605 virtual uint ideal_reg() const { return Op_RegI; }
a61af66fc99e Initial load
duke
parents:
diff changeset
606 };
a61af66fc99e Initial load
duke
parents:
diff changeset
607
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
608 //------------------------------ExtractLNode-----------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
609 // Extract a long from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
610 class ExtractLNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
611 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
612 ExtractLNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
613 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
614 virtual const Type *bottom_type() const { return TypeLong::LONG; }
a61af66fc99e Initial load
duke
parents:
diff changeset
615 virtual uint ideal_reg() const { return Op_RegL; }
a61af66fc99e Initial load
duke
parents:
diff changeset
616 };
a61af66fc99e Initial load
duke
parents:
diff changeset
617
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
618 //------------------------------ExtractFNode-----------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
619 // Extract a float from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
620 class ExtractFNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
621 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
622 ExtractFNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
623 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
624 virtual const Type *bottom_type() const { return Type::FLOAT; }
a61af66fc99e Initial load
duke
parents:
diff changeset
625 virtual uint ideal_reg() const { return Op_RegF; }
a61af66fc99e Initial load
duke
parents:
diff changeset
626 };
a61af66fc99e Initial load
duke
parents:
diff changeset
627
6823
859c45fb8cea 7201026: add vector for shift count
kvn
parents: 6619
diff changeset
628 //------------------------------ExtractDNode-----------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
629 // Extract a double from a vector at position "pos"
a61af66fc99e Initial load
duke
parents:
diff changeset
630 class ExtractDNode : public ExtractNode {
a61af66fc99e Initial load
duke
parents:
diff changeset
631 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
632 ExtractDNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
633 virtual int Opcode() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
634 virtual const Type *bottom_type() const { return Type::DOUBLE; }
a61af66fc99e Initial load
duke
parents:
diff changeset
635 virtual uint ideal_reg() const { return Op_RegD; }
a61af66fc99e Initial load
duke
parents:
diff changeset
636 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
637
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
638 #endif // SHARE_VM_OPTO_VECTORNODE_HPP