aboutsummaryrefslogtreecommitdiff
path: root/gcc/rtl.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-04-24 17:49:36 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-04-24 17:49:36 +0200
commit73f1289e49d2c1c6d23278dc7a1c70f80cd1e6b4 (patch)
tree533a4515fd04b33b51b59a7bb72a345adb016276 /gcc/rtl.c
parentfb8b3e2993f4f1bb646369feab59b3bd80d1d0e1 (diff)
downloadgcc-73f1289e49d2c1c6d23278dc7a1c70f80cd1e6b4.zip
gcc-73f1289e49d2c1c6d23278dc7a1c70f80cd1e6b4.tar.gz
gcc-73f1289e49d2c1c6d23278dc7a1c70f80cd1e6b4.tar.bz2
re PR target/90193 (asm goto with TLS "m" input operand generates incorrect assembler in O1 and O2)
PR target/90193 * rtl.c (classify_insn): Return JUMP_INSN for asm goto. * emit-rtl.c (try_split): Copy over REG_LABEL_TARGET. * gcc.target/i386/pr90193.c: New test. From-SVN: r270550
Diffstat (limited to 'gcc/rtl.c')
-rw-r--r--gcc/rtl.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/rtl.c b/gcc/rtl.c
index 8a89777..d7b8e98 100644
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -746,6 +746,8 @@ classify_insn (rtx x)
return CALL_INSN;
if (ANY_RETURN_P (x))
return JUMP_INSN;
+ if (GET_CODE (x) == ASM_OPERANDS && ASM_OPERANDS_LABEL_VEC (x))
+ return JUMP_INSN;
if (GET_CODE (x) == SET)
{
if (GET_CODE (SET_DEST (x)) == PC)
@@ -772,6 +774,9 @@ classify_insn (rtx x)
return CALL_INSN;
if (has_return_p)
return JUMP_INSN;
+ if (GET_CODE (XVECEXP (x, 0, 0)) == ASM_OPERANDS
+ && ASM_OPERANDS_LABEL_VEC (XVECEXP (x, 0, 0)))
+ return JUMP_INSN;
}
#ifdef GENERATOR_FILE
if (GET_CODE (x) == MATCH_OPERAND