Mercurial > hg > truffle
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 |
rev | line source |
---|---|
0 | 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 | 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 * | |
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 | 22 */ |
23 | |
1972 | 24 #ifndef SHARE_VM_OPTO_VECTORNODE_HPP |
25 #define SHARE_VM_OPTO_VECTORNODE_HPP | |
26 | |
27 #include "opto/matcher.hpp" | |
28 #include "opto/memnode.hpp" | |
29 #include "opto/node.hpp" | |
30 #include "opto/opcodes.hpp" | |
31 | |
6823 | 32 //------------------------------VectorNode------------------------------------- |
0 | 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 | 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 | 45 } |
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 | 50 |
51 virtual int Opcode() const; | |
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 | 54 |
55 static VectorNode* scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t); | |
6823 | 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 | 65 }; |
66 | |
6823 | 67 //===========================Vector=ALU=Operations============================= |
0 | 68 |
6823 | 69 //------------------------------AddVBNode-------------------------------------- |
0 | 70 // Vector add byte |
71 class AddVBNode : public VectorNode { | |
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 | 74 virtual int Opcode() const; |
75 }; | |
76 | |
6823 | 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 | 79 class AddVSNode : public VectorNode { |
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 | 82 virtual int Opcode() const; |
83 }; | |
84 | |
6823 | 85 //------------------------------AddVINode-------------------------------------- |
0 | 86 // Vector add int |
87 class AddVINode : public VectorNode { | |
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 | 90 virtual int Opcode() const; |
91 }; | |
92 | |
6823 | 93 //------------------------------AddVLNode-------------------------------------- |
0 | 94 // Vector add long |
95 class AddVLNode : public VectorNode { | |
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 | 98 virtual int Opcode() const; |
99 }; | |
100 | |
6823 | 101 //------------------------------AddVFNode-------------------------------------- |
0 | 102 // Vector add float |
103 class AddVFNode : public VectorNode { | |
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 | 106 virtual int Opcode() const; |
107 }; | |
108 | |
6823 | 109 //------------------------------AddVDNode-------------------------------------- |
0 | 110 // Vector add double |
111 class AddVDNode : public VectorNode { | |
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 | 114 virtual int Opcode() const; |
115 }; | |
116 | |
6823 | 117 //------------------------------SubVBNode-------------------------------------- |
0 | 118 // Vector subtract byte |
119 class SubVBNode : public VectorNode { | |
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 | 122 virtual int Opcode() const; |
123 }; | |
124 | |
6823 | 125 //------------------------------SubVSNode-------------------------------------- |
0 | 126 // Vector subtract short |
127 class SubVSNode : public VectorNode { | |
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 | 130 virtual int Opcode() const; |
131 }; | |
132 | |
6823 | 133 //------------------------------SubVINode-------------------------------------- |
0 | 134 // Vector subtract int |
135 class SubVINode : public VectorNode { | |
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 | 138 virtual int Opcode() const; |
139 }; | |
140 | |
6823 | 141 //------------------------------SubVLNode-------------------------------------- |
0 | 142 // Vector subtract long |
143 class SubVLNode : public VectorNode { | |
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 | 146 virtual int Opcode() const; |
147 }; | |
148 | |
6823 | 149 //------------------------------SubVFNode-------------------------------------- |
0 | 150 // Vector subtract float |
151 class SubVFNode : public VectorNode { | |
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 | 154 virtual int Opcode() const; |
155 }; | |
156 | |
6823 | 157 //------------------------------SubVDNode-------------------------------------- |
0 | 158 // Vector subtract double |
159 class SubVDNode : public VectorNode { | |
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 | 162 virtual int Opcode() const; |
163 }; | |
164 | |
6823 | 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 | 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 | 181 //------------------------------MulVFNode-------------------------------------- |
0 | 182 // Vector multiply float |
183 class MulVFNode : public VectorNode { | |
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 | 186 virtual int Opcode() const; |
187 }; | |
188 | |
6823 | 189 //------------------------------MulVDNode-------------------------------------- |
0 | 190 // Vector multiply double |
191 class MulVDNode : public VectorNode { | |
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 | 194 virtual int Opcode() const; |
195 }; | |
196 | |
6823 | 197 //------------------------------DivVFNode-------------------------------------- |
0 | 198 // Vector divide float |
199 class DivVFNode : public VectorNode { | |
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 | 202 virtual int Opcode() const; |
203 }; | |
204 | |
6823 | 205 //------------------------------DivVDNode-------------------------------------- |
0 | 206 // Vector Divide double |
207 class DivVDNode : public VectorNode { | |
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 | 210 virtual int Opcode() const; |
211 }; | |
212 | |
6823 | 213 //------------------------------LShiftVBNode----------------------------------- |
6614
006050192a5a
6340864: Implement vectorization optimizations in hotspot-server
kvn
parents:
6179
diff
changeset
|
214 // Vector left shift bytes |
0 | 215 class LShiftVBNode : public VectorNode { |
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 | 218 virtual int Opcode() const; |
219 }; | |
220 | |
6823 | 221 //------------------------------LShiftVSNode----------------------------------- |
6614
006050192a5a
6340864: Implement vectorization optimizations in hotspot-server
kvn
parents:
6179
diff
changeset
|
222 // Vector left shift shorts |
0 | 223 class LShiftVSNode : public VectorNode { |
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 | 226 virtual int Opcode() const; |
227 }; | |
228 | |
6823 | 229 //------------------------------LShiftVINode----------------------------------- |
6614
006050192a5a
6340864: Implement vectorization optimizations in hotspot-server
kvn
parents:
6179
diff
changeset
|
230 // Vector left shift ints |
0 | 231 class LShiftVINode : public VectorNode { |
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 | 234 virtual int Opcode() const; |
235 }; | |
236 | |
6823 | 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 | 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 | 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 | 250 virtual int Opcode() const; |
251 }; | |
252 | |
6823 | 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 | 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 | 258 virtual int Opcode() const; |
259 }; | |
260 | |
6823 | 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 | 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 | 266 virtual int Opcode() const; |
267 }; | |
268 | |
6823 | 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 | 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 | 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 | 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 | 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 | 309 //------------------------------LShiftCntVNode--------------------------------- |
310 // Vector left shift count | |
311 class LShiftCntVNode : public VectorNode { | |
312 public: | |
313 LShiftCntVNode(Node* cnt, const TypeVect* vt) : VectorNode(cnt,vt) {} | |
314 virtual int Opcode() const; | |
315 virtual uint ideal_reg() const { return Matcher::vector_shift_count_ideal_reg(vect_type()->length_in_bytes()); } | |
316 }; | |
317 | |
318 //------------------------------RShiftCntVNode--------------------------------- | |
319 // Vector right shift count | |
320 class RShiftCntVNode : public VectorNode { | |
321 public: | |
322 RShiftCntVNode(Node* cnt, const TypeVect* vt) : VectorNode(cnt,vt) {} | |
323 virtual int Opcode() const; | |
324 virtual uint ideal_reg() const { return Matcher::vector_shift_count_ideal_reg(vect_type()->length_in_bytes()); } | |
325 }; | |
326 | |
6614
006050192a5a
6340864: Implement vectorization optimizations in hotspot-server
kvn
parents:
6179
diff
changeset
|
327 |
0 | 328 //------------------------------AndVNode--------------------------------------- |
6614
006050192a5a
6340864: Implement vectorization optimizations in hotspot-server
kvn
parents:
6179
diff
changeset
|
329 // Vector and integer |
0 | 330 class AndVNode : public VectorNode { |
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 | 333 virtual int Opcode() const; |
334 }; | |
335 | |
336 //------------------------------OrVNode--------------------------------------- | |
6614
006050192a5a
6340864: Implement vectorization optimizations in hotspot-server
kvn
parents:
6179
diff
changeset
|
337 // Vector or integer |
0 | 338 class OrVNode : public VectorNode { |
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 | 341 virtual int Opcode() const; |
342 }; | |
343 | |
344 //------------------------------XorVNode--------------------------------------- | |
6614
006050192a5a
6340864: Implement vectorization optimizations in hotspot-server
kvn
parents:
6179
diff
changeset
|
345 // Vector xor integer |
0 | 346 class XorVNode : public VectorNode { |
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 | 349 virtual int Opcode() const; |
350 }; | |
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 | 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 | 361 } |
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 | 366 virtual int Opcode() const; |
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 | 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 | 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 | 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 | 376 }; |
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 | 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 | 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 | 390 |
391 virtual int Opcode() const; | |
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 | 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 | 398 Node* adr, const TypePtr* atyp, Node* val, |
0 | 399 uint vlen); |
400 }; | |
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 | 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 | 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 | 410 virtual int Opcode() const; |
411 }; | |
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 | 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 | 418 virtual int Opcode() const; |
419 }; | |
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 | 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 | 426 virtual int Opcode() const; |
427 }; | |
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 | 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 | 434 virtual int Opcode() const; |
435 }; | |
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 | 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 | 442 virtual int Opcode() const; |
443 }; | |
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 | 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 | 450 virtual int Opcode() const; |
451 }; | |
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 | 454 |
455 //------------------------------PackNode--------------------------------------- | |
456 // Pack parent class (not for code generation). | |
457 class PackNode : public VectorNode { | |
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 | 461 virtual int Opcode() const; |
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 | 465 } |
466 | |
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 | 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 | 471 }; |
472 | |
6823 | 473 //------------------------------PackBNode-------------------------------------- |
0 | 474 // Pack byte scalars into vector |
475 class PackBNode : public PackNode { | |
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 | 478 virtual int Opcode() const; |
479 }; | |
480 | |
6823 | 481 //------------------------------PackSNode-------------------------------------- |
0 | 482 // Pack short scalars into a vector |
483 class PackSNode : public PackNode { | |
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 | 487 virtual int Opcode() const; |
488 }; | |
489 | |
6823 | 490 //------------------------------PackINode-------------------------------------- |
0 | 491 // Pack integer scalars into a vector |
492 class PackINode : public PackNode { | |
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 | 496 virtual int Opcode() const; |
497 }; | |
498 | |
6823 | 499 //------------------------------PackLNode-------------------------------------- |
0 | 500 // Pack long scalars into a vector |
501 class PackLNode : public PackNode { | |
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 | 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 | 513 virtual int Opcode() const; |
514 }; | |
515 | |
6823 | 516 //------------------------------PackFNode-------------------------------------- |
0 | 517 // Pack float scalars into vector |
518 class PackFNode : public PackNode { | |
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 | 522 virtual int Opcode() const; |
523 }; | |
524 | |
6823 | 525 //------------------------------PackDNode-------------------------------------- |
0 | 526 // Pack double scalars into a vector |
527 class PackDNode : public PackNode { | |
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 | 531 virtual int Opcode() const; |
532 }; | |
533 | |
6823 | 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 | 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 | 539 virtual int Opcode() const; |
540 }; | |
541 | |
542 | |
6823 | 543 //========================Extract_Scalar_from_Vector=========================== |
0 | 544 |
6823 | 545 //------------------------------ExtractNode------------------------------------ |
0 | 546 // Extract a scalar from a vector at position "pos" |
547 class ExtractNode : public Node { | |
548 public: | |
549 ExtractNode(Node* src, ConINode* pos) : Node(NULL, src, (Node*)pos) { | |
550 assert(in(2)->get_int() >= 0, "positive constants"); | |
551 } | |
552 virtual int Opcode() const; | |
553 uint pos() const { return in(2)->get_int(); } | |
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 | 556 }; |
557 | |
6823 | 558 //------------------------------ExtractBNode----------------------------------- |
0 | 559 // Extract a byte from a vector at position "pos" |
560 class ExtractBNode : public ExtractNode { | |
561 public: | |
562 ExtractBNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {} | |
563 virtual int Opcode() const; | |
564 virtual const Type *bottom_type() const { return TypeInt::INT; } | |
565 virtual uint ideal_reg() const { return Op_RegI; } | |
566 }; | |
567 | |
6823 | 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 | 578 //------------------------------ExtractCNode----------------------------------- |
0 | 579 // Extract a char from a vector at position "pos" |
580 class ExtractCNode : public ExtractNode { | |
581 public: | |
582 ExtractCNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {} | |
583 virtual int Opcode() const; | |
584 virtual const Type *bottom_type() const { return TypeInt::INT; } | |
585 virtual uint ideal_reg() const { return Op_RegI; } | |
586 }; | |
587 | |
6823 | 588 //------------------------------ExtractSNode----------------------------------- |
0 | 589 // Extract a short from a vector at position "pos" |
590 class ExtractSNode : public ExtractNode { | |
591 public: | |
592 ExtractSNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {} | |
593 virtual int Opcode() const; | |
594 virtual const Type *bottom_type() const { return TypeInt::INT; } | |
595 virtual uint ideal_reg() const { return Op_RegI; } | |
596 }; | |
597 | |
6823 | 598 //------------------------------ExtractINode----------------------------------- |
0 | 599 // Extract an int from a vector at position "pos" |
600 class ExtractINode : public ExtractNode { | |
601 public: | |
602 ExtractINode(Node* src, ConINode* pos) : ExtractNode(src, pos) {} | |
603 virtual int Opcode() const; | |
604 virtual const Type *bottom_type() const { return TypeInt::INT; } | |
605 virtual uint ideal_reg() const { return Op_RegI; } | |
606 }; | |
607 | |
6823 | 608 //------------------------------ExtractLNode----------------------------------- |
0 | 609 // Extract a long from a vector at position "pos" |
610 class ExtractLNode : public ExtractNode { | |
611 public: | |
612 ExtractLNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {} | |
613 virtual int Opcode() const; | |
614 virtual const Type *bottom_type() const { return TypeLong::LONG; } | |
615 virtual uint ideal_reg() const { return Op_RegL; } | |
616 }; | |
617 | |
6823 | 618 //------------------------------ExtractFNode----------------------------------- |
0 | 619 // Extract a float from a vector at position "pos" |
620 class ExtractFNode : public ExtractNode { | |
621 public: | |
622 ExtractFNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {} | |
623 virtual int Opcode() const; | |
624 virtual const Type *bottom_type() const { return Type::FLOAT; } | |
625 virtual uint ideal_reg() const { return Op_RegF; } | |
626 }; | |
627 | |
6823 | 628 //------------------------------ExtractDNode----------------------------------- |
0 | 629 // Extract a double from a vector at position "pos" |
630 class ExtractDNode : public ExtractNode { | |
631 public: | |
632 ExtractDNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {} | |
633 virtual int Opcode() const; | |
634 virtual const Type *bottom_type() const { return Type::DOUBLE; } | |
635 virtual uint ideal_reg() const { return Op_RegD; } | |
636 }; | |
1972 | 637 |
638 #endif // SHARE_VM_OPTO_VECTORNODE_HPP |