diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-11-23 11:07:21 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-11-23 11:07:21 +0100 |
commit | 8d0d7a63019a7d67943d1867348673e3ca3dc824 (patch) | |
tree | 79ae4d55058430477b7bfe63c4422696e1cb01c9 /gcc/config | |
parent | 1fbf51cb84cb1000fac324ef11554c36084cd537 (diff) | |
download | gcc-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.c | 10 |
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)) |