https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102281
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Last reconfirmed| |2021-09-13 Status|UNCONFIRMED |NEW CC| |jakub at gcc dot gnu.org, | |qing.zhao at oracle dot com, | |rguenth at gcc dot gnu.org --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed, works with the C frontend. The issue is that we do _mm_set_epi64x___q0.0_1 = _mm_set_epi64x___q0; D.2371 = {_mm_set_epi64x___q0.0_1}; __builtin_clear_padding (&D.2371, 0B, 1); return D.2371; so __builtin_clear_padding marks the object addressable which in turn makes it no longer a is_gimple_val and thus it cannot be returned directly. I wonder if we can have a more friendly __builtin_clear_padding as internal-function doing sth like val = .IFN_CLEAR_PADDING (val, 0B, 1); thus embedding a RMW cycle on an actual value?