diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-12-02 09:44:42 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-12-02 09:44:42 +0100 |
commit | 60ebe8ce1d029cbff8ef80c967f98ba43d746f3b (patch) | |
tree | d0c90b780983a3a4c1d8282028a2bf718f76ca35 /gcc/config | |
parent | a717444986a981b21b42fccfd982dcb6ebe42254 (diff) | |
download | gcc-60ebe8ce1d029cbff8ef80c967f98ba43d746f3b.zip gcc-60ebe8ce1d029cbff8ef80c967f98ba43d746f3b.tar.gz gcc-60ebe8ce1d029cbff8ef80c967f98ba43d746f3b.tar.bz2 |
re PR rtl-optimization/78547 (ICE: in loc_cmp, at var-tracking.c:3417 with -Os -g -mstringop-strategy=libcall -freorder-blocks-algorithm=simple)
PR rtl-optimization/78547
* emit-rtl.c (unshare_all_rtl): Make sure DECL_RTL and
DECL_INCOMING_RTL is not shared.
* config/i386/i386.c (convert_scalars_to_vectors): If any
insns have been converted, adjust all parameter's DEC_RTL and
DECL_INCOMING_RTL back from V1TImode to TImode if the parameters have
TImode.
* gcc.dg/pr78547.c: New test.
From-SVN: r243165
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/i386/i386.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 5226e454..5678fa2 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -4075,6 +4075,28 @@ convert_scalars_to_vector () crtl->stack_alignment_needed = 128; if (crtl->stack_alignment_estimated < 128) crtl->stack_alignment_estimated = 128; + /* Fix up DECL_RTL/DECL_INCOMING_RTL of arguments. */ + if (TARGET_64BIT) + for (tree parm = DECL_ARGUMENTS (current_function_decl); + parm; parm = DECL_CHAIN (parm)) + { + if (TYPE_MODE (TREE_TYPE (parm)) != TImode) + continue; + if (DECL_RTL_SET_P (parm) + && GET_MODE (DECL_RTL (parm)) == V1TImode) + { + rtx r = DECL_RTL (parm); + if (REG_P (r)) + SET_DECL_RTL (parm, gen_rtx_SUBREG (TImode, r, 0)); + } + if (DECL_INCOMING_RTL (parm) + && GET_MODE (DECL_INCOMING_RTL (parm)) == V1TImode) + { + rtx r = DECL_INCOMING_RTL (parm); + if (REG_P (r)) + DECL_INCOMING_RTL (parm) = gen_rtx_SUBREG (TImode, r, 0); + } + } } return 0; |