< prev index next >

src/hotspot/share/opto/divnode.hpp

Print this page

230   virtual Node* Identity(PhaseGVN* phase) { return this; }
231   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape) { return nullptr; }
232   virtual const Type* Value(PhaseGVN* phase)  const { return bottom_type(); }
233   virtual uint hash() const { return Node::hash(); }
234   virtual bool is_CFG() const  { return false; }
235   virtual uint ideal_reg() const { return NotAMachineReg; }
236 
237   static DivModNode* make(Node* div_or_mod, BasicType bt, bool is_unsigned);
238 
239   ProjNode* div_proj() { return proj_out_or_null(div_proj_num); }
240   ProjNode* mod_proj() { return proj_out_or_null(mod_proj_num); }
241 };
242 
243 //------------------------------DivModINode---------------------------------------
244 // Integer division with remainder result.
245 class DivModINode : public DivModNode {
246 public:
247   DivModINode( Node *c, Node *dividend, Node *divisor ) : DivModNode(c, dividend, divisor) {}
248   virtual int Opcode() const;
249   virtual const Type *bottom_type() const { return TypeTuple::INT_PAIR; }
250   virtual Node *match( const ProjNode *proj, const Matcher *m );
251 
252   // Make a divmod and associated projections from a div or mod.
253   static DivModINode* make(Node* div_or_mod);
254 };
255 
256 //------------------------------DivModLNode---------------------------------------
257 // Long division with remainder result.
258 class DivModLNode : public DivModNode {
259 public:
260   DivModLNode( Node *c, Node *dividend, Node *divisor ) : DivModNode(c, dividend, divisor) {}
261   virtual int Opcode() const;
262   virtual const Type *bottom_type() const { return TypeTuple::LONG_PAIR; }
263   virtual Node *match( const ProjNode *proj, const Matcher *m );
264 
265   // Make a divmod and associated projections from a div or mod.
266   static DivModLNode* make(Node* div_or_mod);
267 };
268 
269 
270 //------------------------------UDivModINode---------------------------------------
271 // Unsigend integer division with remainder result.
272 class UDivModINode : public DivModNode {
273 public:
274   UDivModINode( Node *c, Node *dividend, Node *divisor ) : DivModNode(c, dividend, divisor) {}
275   virtual int Opcode() const;
276   virtual const Type *bottom_type() const { return TypeTuple::INT_PAIR; }
277   virtual Node *match( const ProjNode *proj, const Matcher *m );
278 
279   // Make a divmod and associated projections from a div or mod.
280   static UDivModINode* make(Node* div_or_mod);
281 };
282 
283 //------------------------------UDivModLNode---------------------------------------
284 // Unsigned long division with remainder result.
285 class UDivModLNode : public DivModNode {
286 public:
287   UDivModLNode( Node *c, Node *dividend, Node *divisor ) : DivModNode(c, dividend, divisor) {}
288   virtual int Opcode() const;
289   virtual const Type *bottom_type() const { return TypeTuple::LONG_PAIR; }
290   virtual Node *match( const ProjNode *proj, const Matcher *m );
291 
292   // Make a divmod and associated projections from a div or mod.
293   static UDivModLNode* make(Node* div_or_mod);
294 };
295 
296 #endif // SHARE_OPTO_DIVNODE_HPP

230   virtual Node* Identity(PhaseGVN* phase) { return this; }
231   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape) { return nullptr; }
232   virtual const Type* Value(PhaseGVN* phase)  const { return bottom_type(); }
233   virtual uint hash() const { return Node::hash(); }
234   virtual bool is_CFG() const  { return false; }
235   virtual uint ideal_reg() const { return NotAMachineReg; }
236 
237   static DivModNode* make(Node* div_or_mod, BasicType bt, bool is_unsigned);
238 
239   ProjNode* div_proj() { return proj_out_or_null(div_proj_num); }
240   ProjNode* mod_proj() { return proj_out_or_null(mod_proj_num); }
241 };
242 
243 //------------------------------DivModINode---------------------------------------
244 // Integer division with remainder result.
245 class DivModINode : public DivModNode {
246 public:
247   DivModINode( Node *c, Node *dividend, Node *divisor ) : DivModNode(c, dividend, divisor) {}
248   virtual int Opcode() const;
249   virtual const Type *bottom_type() const { return TypeTuple::INT_PAIR; }
250   virtual Node *match(const ProjNode *proj, const Matcher *m, const RegMask* mask);
251 
252   // Make a divmod and associated projections from a div or mod.
253   static DivModINode* make(Node* div_or_mod);
254 };
255 
256 //------------------------------DivModLNode---------------------------------------
257 // Long division with remainder result.
258 class DivModLNode : public DivModNode {
259 public:
260   DivModLNode( Node *c, Node *dividend, Node *divisor ) : DivModNode(c, dividend, divisor) {}
261   virtual int Opcode() const;
262   virtual const Type *bottom_type() const { return TypeTuple::LONG_PAIR; }
263   virtual Node *match(const ProjNode *proj, const Matcher *m, const RegMask* mask);
264 
265   // Make a divmod and associated projections from a div or mod.
266   static DivModLNode* make(Node* div_or_mod);
267 };
268 
269 
270 //------------------------------UDivModINode---------------------------------------
271 // Unsigend integer division with remainder result.
272 class UDivModINode : public DivModNode {
273 public:
274   UDivModINode( Node *c, Node *dividend, Node *divisor ) : DivModNode(c, dividend, divisor) {}
275   virtual int Opcode() const;
276   virtual const Type *bottom_type() const { return TypeTuple::INT_PAIR; }
277   virtual Node* match(const ProjNode* proj, const Matcher* m, const RegMask* mask);
278 
279   // Make a divmod and associated projections from a div or mod.
280   static UDivModINode* make(Node* div_or_mod);
281 };
282 
283 //------------------------------UDivModLNode---------------------------------------
284 // Unsigned long division with remainder result.
285 class UDivModLNode : public DivModNode {
286 public:
287   UDivModLNode( Node *c, Node *dividend, Node *divisor ) : DivModNode(c, dividend, divisor) {}
288   virtual int Opcode() const;
289   virtual const Type *bottom_type() const { return TypeTuple::LONG_PAIR; }
290   virtual Node* match(const ProjNode* proj, const Matcher* m, const RegMask* mask);
291 
292   // Make a divmod and associated projections from a div or mod.
293   static UDivModLNode* make(Node* div_or_mod);
294 };
295 
296 #endif // SHARE_OPTO_DIVNODE_HPP
< prev index next >