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.

Reply via email to