src/share/vm/opto/vectornode.hpp

Print this page
rev 5661 : 8024921: PPC64 (part 113): Extend Load and Store nodes to know about memory ordering.


 339  public:
 340   OrVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
 341   virtual int Opcode() const;
 342 };
 343 
 344 //------------------------------XorVNode---------------------------------------
 345 // Vector xor integer
 346 class XorVNode : public VectorNode {
 347  public:
 348   XorVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
 349   virtual int Opcode() const;
 350 };
 351 
 352 //================================= M E M O R Y ===============================
 353 
 354 //------------------------------LoadVectorNode---------------------------------
 355 // Load Vector from memory
 356 class LoadVectorNode : public LoadNode {
 357  public:
 358   LoadVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt)
 359     : LoadNode(c, mem, adr, at, vt) {
 360     init_class_id(Class_LoadVector);
 361   }
 362 
 363   const TypeVect* vect_type() const { return type()->is_vect(); }
 364   uint length() const { return vect_type()->length(); } // Vector length
 365 
 366   virtual int Opcode() const;
 367 
 368   virtual uint ideal_reg() const  { return Matcher::vector_ideal_reg(memory_size()); }
 369   virtual BasicType memory_type() const { return T_VOID; }
 370   virtual int memory_size() const { return vect_type()->length_in_bytes(); }
 371 
 372   virtual int store_Opcode() const { return Op_StoreVector; }
 373 
 374   static LoadVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem,
 375                               Node* adr, const TypePtr* atyp, uint vlen, BasicType bt);
 376 };
 377 
 378 //------------------------------StoreVectorNode--------------------------------
 379 // Store Vector to memory
 380 class StoreVectorNode : public StoreNode {
 381  public:
 382   StoreVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
 383     : StoreNode(c, mem, adr, at, val) {
 384     assert(val->is_Vector() || val->is_LoadVector(), "sanity");
 385     init_class_id(Class_StoreVector);
 386   }
 387 
 388   const TypeVect* vect_type() const { return in(MemNode::ValueIn)->bottom_type()->is_vect(); }
 389   uint length() const { return vect_type()->length(); } // Vector length
 390 
 391   virtual int Opcode() const;
 392 
 393   virtual uint ideal_reg() const  { return Matcher::vector_ideal_reg(memory_size()); }
 394   virtual BasicType memory_type() const { return T_VOID; }
 395   virtual int memory_size() const { return vect_type()->length_in_bytes(); }
 396 
 397   static StoreVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem,
 398                                Node* adr, const TypePtr* atyp, Node* val,
 399                                uint vlen);
 400 };
 401 
 402 
 403 //=========================Promote_Scalar_to_Vector============================




 339  public:
 340   OrVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
 341   virtual int Opcode() const;
 342 };
 343 
 344 //------------------------------XorVNode---------------------------------------
 345 // Vector xor integer
 346 class XorVNode : public VectorNode {
 347  public:
 348   XorVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
 349   virtual int Opcode() const;
 350 };
 351 
 352 //================================= M E M O R Y ===============================
 353 
 354 //------------------------------LoadVectorNode---------------------------------
 355 // Load Vector from memory
 356 class LoadVectorNode : public LoadNode {
 357  public:
 358   LoadVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt)
 359     : LoadNode(c, mem, adr, at, vt, LoadNode::unordered) {
 360     init_class_id(Class_LoadVector);
 361   }
 362 
 363   const TypeVect* vect_type() const { return type()->is_vect(); }
 364   uint length() const { return vect_type()->length(); } // Vector length
 365 
 366   virtual int Opcode() const;
 367 
 368   virtual uint ideal_reg() const  { return Matcher::vector_ideal_reg(memory_size()); }
 369   virtual BasicType memory_type() const { return T_VOID; }
 370   virtual int memory_size() const { return vect_type()->length_in_bytes(); }
 371 
 372   virtual int store_Opcode() const { return Op_StoreVector; }
 373 
 374   static LoadVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem,
 375                               Node* adr, const TypePtr* atyp, uint vlen, BasicType bt);
 376 };
 377 
 378 //------------------------------StoreVectorNode--------------------------------
 379 // Store Vector to memory
 380 class StoreVectorNode : public StoreNode {
 381  public:
 382   StoreVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
 383     : StoreNode(c, mem, adr, at, val, StoreNode::unordered) {
 384     assert(val->is_Vector() || val->is_LoadVector(), "sanity");
 385     init_class_id(Class_StoreVector);
 386   }
 387 
 388   const TypeVect* vect_type() const { return in(MemNode::ValueIn)->bottom_type()->is_vect(); }
 389   uint length() const { return vect_type()->length(); } // Vector length
 390 
 391   virtual int Opcode() const;
 392 
 393   virtual uint ideal_reg() const  { return Matcher::vector_ideal_reg(memory_size()); }
 394   virtual BasicType memory_type() const { return T_VOID; }
 395   virtual int memory_size() const { return vect_type()->length_in_bytes(); }
 396 
 397   static StoreVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem,
 398                                Node* adr, const TypePtr* atyp, Node* val,
 399                                uint vlen);
 400 };
 401 
 402 
 403 //=========================Promote_Scalar_to_Vector============================