166 int higher_equal( const Type *t ) const { return !cmp(meet(t),t); } |
166 int higher_equal( const Type *t ) const { return !cmp(meet(t),t); } |
167 |
167 |
168 // MEET operation; lower in lattice. |
168 // MEET operation; lower in lattice. |
169 const Type *meet( const Type *t ) const; |
169 const Type *meet( const Type *t ) const; |
170 // WIDEN: 'widens' for Ints and other range types |
170 // WIDEN: 'widens' for Ints and other range types |
171 virtual const Type *widen( const Type *old ) const { return this; } |
171 virtual const Type *widen( const Type *old, const Type* limit ) const { return this; } |
172 // NARROW: complement for widen, used by pessimistic phases |
172 // NARROW: complement for widen, used by pessimistic phases |
173 virtual const Type *narrow( const Type *old ) const { return this; } |
173 virtual const Type *narrow( const Type *old ) const { return this; } |
174 |
174 |
175 // DUAL operation: reflect around lattice centerline. Used instead of |
175 // DUAL operation: reflect around lattice centerline. Used instead of |
176 // join to ensure my lattice is symmetric up and down. |
176 // join to ensure my lattice is symmetric up and down. |
407 |
407 |
408 virtual bool is_finite() const; // Has a finite value |
408 virtual bool is_finite() const; // Has a finite value |
409 |
409 |
410 virtual const Type *xmeet( const Type *t ) const; |
410 virtual const Type *xmeet( const Type *t ) const; |
411 virtual const Type *xdual() const; // Compute dual right now. |
411 virtual const Type *xdual() const; // Compute dual right now. |
412 virtual const Type *widen( const Type *t ) const; |
412 virtual const Type *widen( const Type *t, const Type* limit_type ) const; |
413 virtual const Type *narrow( const Type *t ) const; |
413 virtual const Type *narrow( const Type *t ) const; |
414 // Do not kill _widen bits. |
414 // Do not kill _widen bits. |
415 virtual const Type *filter( const Type *kills ) const; |
415 virtual const Type *filter( const Type *kills ) const; |
416 // Convenience common pre-built types. |
416 // Convenience common pre-built types. |
417 static const TypeInt *MINUS_1; |
417 static const TypeInt *MINUS_1; |
463 |
463 |
464 virtual bool is_finite() const; // Has a finite value |
464 virtual bool is_finite() const; // Has a finite value |
465 |
465 |
466 virtual const Type *xmeet( const Type *t ) const; |
466 virtual const Type *xmeet( const Type *t ) const; |
467 virtual const Type *xdual() const; // Compute dual right now. |
467 virtual const Type *xdual() const; // Compute dual right now. |
468 virtual const Type *widen( const Type *t ) const; |
468 virtual const Type *widen( const Type *t, const Type* limit_type ) const; |
469 virtual const Type *narrow( const Type *t ) const; |
469 virtual const Type *narrow( const Type *t ) const; |
470 // Do not kill _widen bits. |
470 // Do not kill _widen bits. |
471 virtual const Type *filter( const Type *kills ) const; |
471 virtual const Type *filter( const Type *kills ) const; |
472 // Convenience common pre-built types. |
472 // Convenience common pre-built types. |
473 static const TypeLong *MINUS_1; |
473 static const TypeLong *MINUS_1; |