Mercurial > hg > graal-compiler
comparison src/share/vm/opto/vectornode.hpp @ 6619:5af51c882207
7192963: assert(_in[req-1] == this) failed: Must pass arg count to 'new'
Summary: Fixed Pack node generation. Not vectorize shift instructions if count is not the same for all shifts and if count is vector.
Reviewed-by: twisti
author | kvn |
---|---|
date | Wed, 22 Aug 2012 11:55:40 -0700 |
parents | 006050192a5a |
children | 859c45fb8cea |
comparison
equal
deleted
inserted
replaced
6618:0bfcb7a3e12d | 6619:5af51c882207 |
---|---|
54 | 54 |
55 static VectorNode* scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t); | 55 static VectorNode* scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t); |
56 | 56 |
57 static VectorNode* make(Compile* C, int opc, Node* n1, Node* n2, uint vlen, BasicType bt); | 57 static VectorNode* make(Compile* C, int opc, Node* n1, Node* n2, uint vlen, BasicType bt); |
58 | 58 |
59 static int opcode(int opc, uint vlen, BasicType bt); | 59 static int opcode(int opc, BasicType bt); |
60 static bool implemented(int opc, uint vlen, BasicType bt); | 60 static bool implemented(int opc, uint vlen, BasicType bt); |
61 static bool is_shift(Node* n); | 61 static bool is_shift(Node* n); |
62 static bool is_invariant_vector(Node* n); | 62 static bool is_invariant_vector(Node* n); |
63 // [Start, end) half-open range defining which operands are vectors | |
64 static void vector_operands(Node* n, uint* start, uint* end); | |
63 }; | 65 }; |
64 | 66 |
65 //===========================Vector=ALU=Operations==================================== | 67 //===========================Vector=ALU=Operations==================================== |
66 | 68 |
67 //------------------------------AddVBNode--------------------------------------- | 69 //------------------------------AddVBNode--------------------------------------- |
438 public: | 440 public: |
439 PackNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} | 441 PackNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} |
440 PackNode(Node* in1, Node* n2, const TypeVect* vt) : VectorNode(in1, n2, vt) {} | 442 PackNode(Node* in1, Node* n2, const TypeVect* vt) : VectorNode(in1, n2, vt) {} |
441 virtual int Opcode() const; | 443 virtual int Opcode() const; |
442 | 444 |
443 void add_opd(uint i, Node* n) { | 445 void add_opd(Node* n) { |
444 init_req(i+1, n); | 446 add_req(n); |
445 } | 447 } |
446 | 448 |
447 // Create a binary tree form for Packs. [lo, hi) (half-open) range | 449 // Create a binary tree form for Packs. [lo, hi) (half-open) range |
448 Node* binaryTreePack(Compile* C, int lo, int hi); | 450 PackNode* binary_tree_pack(Compile* C, int lo, int hi); |
449 | 451 |
450 static PackNode* make(Compile* C, Node* s, uint vlen, BasicType bt); | 452 static PackNode* make(Compile* C, Node* s, uint vlen, BasicType bt); |
451 }; | 453 }; |
452 | 454 |
453 //------------------------------PackBNode--------------------------------------- | 455 //------------------------------PackBNode--------------------------------------- |