aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-11-23 11:07:21 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2019-11-23 11:07:21 +0100
commit8d0d7a63019a7d67943d1867348673e3ca3dc824 (patch)
tree79ae4d55058430477b7bfe63c4422696e1cb01c9 /gcc/config
parent1fbf51cb84cb1000fac324ef11554c36084cd537 (diff)
downloadgcc-8d0d7a63019a7d67943d1867348673e3ca3dc824.zip
gcc-8d0d7a63019a7d67943d1867348673e3ca3dc824.tar.gz
gcc-8d0d7a63019a7d67943d1867348673e3ca3dc824.tar.bz2
re PR inline-asm/92615 (ICE in extract_insn)
PR target/92615 * config/i386/i386.c (ix86_md_asm_adjust): If dest_mode is GET_MODE (dest), is not QImode, using ZERO_EXTEND and dest is not register_operand, force x into register before storing it into dest. Formatting fix. * gcc.target/i386/pr92615.c: New test. From-SVN: r278642
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/i386/i386.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 7115ec4..780ebb8 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -20819,11 +20819,15 @@ ix86_md_asm_adjust (vec<rtx> &outputs, vec<rtx> &/*inputs*/,
{
x = force_reg (dest_mode, const0_rtx);
- emit_insn (gen_movstrictqi
- (gen_lowpart (QImode, x), destqi));
+ emit_insn (gen_movstrictqi (gen_lowpart (QImode, x), destqi));
}
else
- x = gen_rtx_ZERO_EXTEND (dest_mode, destqi);
+ {
+ x = gen_rtx_ZERO_EXTEND (dest_mode, destqi);
+ if (dest_mode == GET_MODE (dest)
+ && !register_operand (dest, GET_MODE (dest)))
+ x = force_reg (dest_mode, x);
+ }
}
if (dest_mode != GET_MODE (dest))