private:
pointer_mux (char *ptr) : m_ptr (ptr) {}
- // The pointer value for A pointers, or the pointer value + 1 for B pointers.
- // Using a pointer rather than a uintptr_t tells the compiler that second ()
- // can never return null, and that second_or_null () is only null if
- // is_first ().
+ // Points to the first byte of an object for A pointers or the second
+ // byte of an object for B pointers. Using a pointer rather than a
+ // uintptr_t tells the compiler that second () can never return null,
+ // and that second_or_null () is only null if is_first ().
char *m_ptr;
};
/* Check whether instruction pattern PAT contains a SET with the following
properties:
- - the SET is executed unconditionally;
- - the destination of the SET is write-only rather than read-write; and
+ - the SET is executed unconditionally; and
- either:
- the destination of the SET is a REG that contains REGNO; or
- - the destination of the SET is a SUBREG of such a REG.
+ - both:
+ - the destination of the SET is a SUBREG of such a REG; and
+ - writing to the subreg clobbers all of the SUBREG_REG
+ (in other words, read_modify_subreg_p is false).
If PAT does have a SET like that, return the set, otherwise return null.