https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103275
--- Comment #10 from Hongtao.liu <crazylht at gmail dot com> ---
I'm working on a patch which adds a new memory constraint "Bk" which will
exclude TLS UNSPECs for mask register alternative.
The UNSPEC i'm excluding is like below, any other UNSPEC needs to be added?
bool
ix86_notls_memory (rtx mem)
{
gcc_assert (MEM_P (mem));
rtx addr = XEXP (mem, 0);
subrtx_var_iterator::array_type array;
FOR_EACH_SUBRTX_VAR (iter, array, addr, ALL)
{
rtx op = *iter;
if (GET_CODE (op) == UNSPEC)
switch (XINT (op, 1))
{
case UNSPEC_GOTTPOFF:
case UNSPEC_GOTNTPOFF:
case UNSPEC_TP:
case UNSPEC_TLS_GD:
case UNSPEC_TLS_LD_BASE:
case UNSPEC_TLSDESC:
case UNSPEC_TLS_IE_SUN:
return false;
default:
break;
}
/* Should iter.skip_subrtxes ();
if there's no inner UNSPEC in addr???. */
}
return true;
}