Mercurial > hg > truffle
annotate src/share/vm/opto/vectornode.hpp @ 17820:248ff38d2950
8035828: Turn on @Stable support in VM
Reviewed-by: jrose, twisti
author | vlivanov |
---|---|
date | Fri, 28 Mar 2014 10:13:37 -0700 |
parents | 2113136690bc |
children | 4ca6dc0799b6 |
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) |
14429
2113136690bc
8024921: PPC64 (part 113): Extend Load and Store nodes to know about memory ordering
goetz
parents:
6823
diff
changeset
|
359 : LoadNode(c, mem, adr, at, vt, MemNode::unordered) { |
6179
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) |
14429
2113136690bc
8024921: PPC64 (part 113): Extend Load and Store nodes to know about memory ordering
goetz
parents:
6823
diff
changeset
|
383 : StoreNode(c, mem, adr, at, val, MemNode::unordered) { |
6179
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 |