PR96791 is happening because DSE is trying to truncate a POImode reg down to DImode. The POImode is created by a structure copy that gets inline expanded using lxvp/stxvp which we have defined using POImode. DSE recognizes that a following load overlaps with the stxvp and can be satisfied by a truncation of the POImode reg used for the stxvp.
The intention of using POImode was to avoid having to fully define OImode and it seems like defining these truncations would be the first step along that path. If I haven't misrepresented it, I believe that is Segher's position on this. The function extract_low_bits() in expmed.c does some querying of the target hook modes_tieable_p but not in any way that allows us to tell it not to allow truncation of POImode to a smaller mode. As a result we run into the ICE because the patterns are not provided to do this. So, I put it to the community: Is there an existing way to do this? Or, do we need another target hook of some kind to check this sort of thing? Thanks, Aaron Aaron Sawdey, Ph.D. saw...@linux.ibm.com IBM Linux on POWER Toolchain