https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89290
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |jakub at gcc dot gnu.org --- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I think the right fix is: --- gcc/config/i386/predicates.md.jj 2019-01-01 12:37:32.267727037 +0100 +++ gcc/config/i386/predicates.md 2019-02-12 17:07:15.937097266 +0100 @@ -182,7 +182,7 @@ rtx op1 = XEXP (XEXP (op, 0), 0); rtx op2 = XEXP (XEXP (op, 0), 1); - if (ix86_cmodel == CM_LARGE) + if (ix86_cmodel == CM_LARGE && GET_CODE (op1) != UNSPEC) return false; if (!CONST_INT_P (op2)) return false; Even with -mcmodel=large, it is ok to offset the TLS LE by signed 32-bit constants, we don't really support > 2GB thread local segments, we don't have relocations for that etc. and nobody with sane mind should expect that to work.