On Wed, 28 Aug 2019 at 11:42, Kyrill Tkachov <kyrylo.tkac...@foss.arm.com> wrote: > > > On 8/28/19 10:38 AM, Bernd Edlinger wrote: > > On 8/27/19 11:25 AM, Kyrill Tkachov wrote: > >> Hi Bernd, > >> > >> On 8/15/19 8:47 PM, Bernd Edlinger wrote: > >>> Hi, > >>> > >>> this is the split out part from the "Fix not 8-byte aligned ldrd/strd on > >>> ARMv5 (PR 89544)" > >>> which is sanitizing the middle-end interface to the back-end for strict > >>> alignment, > >>> and a couple of bug-fixes that are necessary to survive boot-strap. > >>> It is intended to be applied after the PR 89544 fix. > >>> > >>> I think it would be possible to change the default implementation of > >>> STACK_SLOT_ALIGNMENT > >>> to make all stack variables always naturally aligned instead of doing > >>> that only > >>> in assign_parm_setup_stack, but would still like to avoid changing too > >>> many things > >>> that do not seem to have a problem. Since this would affect many > >>> targets, and more > >>> kinds of variables that may probably not have a strict alignment problem. > >>> But I am ready to take your advice though. > >>> > >>> > >>> Boot-strapped and reg-tested on x86_64-pc-linux-gnu and > >>> arm-linux-gnueabihf > >>> Is it OK for trunk? > >> I'm not opposed to the checks but... > >> > >> > >>> Thanks > >>> Bernd. > >>> > >> Index: gcc/config/arm/vec-common.md > >> =================================================================== > >> --- gcc/config/arm/vec-common.md (Revision 274531) > >> +++ gcc/config/arm/vec-common.md (Arbeitskopie) > >> @@ -26,6 +26,12 @@ > >> "TARGET_NEON > >> || (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (<MODE>mode))" > >> { > >> + gcc_checking_assert (!MEM_P (operands[0]) > >> + || MEM_ALIGN (operands[0]) > >> + >= GET_MODE_ALIGNMENT (<MODE>mode)); > >> + gcc_checking_assert (!MEM_P (operands[1]) > >> + || MEM_ALIGN (operands[1]) > >> + >= GET_MODE_ALIGNMENT (<MODE>mode)); > >> if (can_create_pseudo_p ()) > >> { > >> if (!REG_P (operands[0])) > >> > >> ... can we please factor the (!MEM_P (operands[0]) || MEM_ALIGN > >> (operands[0]) >= GET_MODE_ALIGNMENT (<MODE>mode)) checks into a common > >> function and use that? > >> > > Sure, good idea. How about converting it to a predicate? > > This creates 1:1 equivalent code to the open coded assertions. > > > > Is it OK for trunk? > > > > > > Thanks > > Bernd. > > > patch-strict-align.diff > > 2019-08-15 Bernd Edlinger<bernd.edlin...@hotmail.de> > Richard Biener<rguent...@suse.de> > > * expr.c (expand_assignment): Handle misaligned DECLs. > (expand_expr_real_1): Handle FUNCTION_DECL as unaligned. > * function.c (assign_parm_adjust_stack_rtl): Check movmisalign optab > too. > (assign_parm_setup_stack): Allocate properly aligned stack slots. > * varasm.c (build_constant_desc): Align constants of misaligned types. > * config/arm/predicates.md (aligned_operand): New predicate. > * config/arm/arm.md (movdi, movsi, movhi, movhf, movsf, movdf): Use > sligned_operand to check restrictions on memory addresses. > > typo in "aligned_operand" > > * config/arm/neon.md (movti, mov<VSTRUCT>, mov<VH>): Likewise. > * config/arm/vec-common.md (mov<VALL>): Likewise. > > > Looks good now. >
Hi, This patch causes an ICE when building libgcc's unwind-arm.o when configuring GCC: --target arm-none-linux-gnueabihf --with-mode thumb --with-cpu cortex-a15 --with-fpu neon-vfpv4: The build works for the same target, but --with-mode arm --with-cpu cortex a9 --with-fpu vfp In file included from /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgcc/config/arm/unwind-arm.c:144: /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgcc/unwind-arm-common.inc: In function 'get_eit_entry': /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgcc/unwind-arm-common.inc:245:29: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual] 245 | ucbp->pr_cache.ehtp = (_Unwind_EHT_Header *)&eitp->content; | ^ during RTL pass: expand /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgcc/unwind-arm-common.inc: In function 'unwind_phase2_forced': /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgcc/unwind-arm-common.inc:319:18: internal compiler error: in gen_movdi, at config/arm/arm.md:5235 319 | saved_vrs.core = entry_vrs->core; | ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ 0x126530f gen_movdi(rtx_def*, rtx_def*) /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/config/arm/arm.md:5235 0x896d92 insn_gen_fn::operator()(rtx_def*, rtx_def*) const /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/recog.h:318 0x896d92 emit_move_insn_1(rtx_def*, rtx_def*) /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:3694 0x897083 emit_move_insn(rtx_def*, rtx_def*) /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:3790 0xfc25d6 gen_cpymem_ldrd_strd(rtx_def**) /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/config/arm/arm.c:14582 0x126a1f1 gen_cpymemqi(rtx_def*, rtx_def*, rtx_def*, rtx_def*) /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/config/arm/arm.md:6688 0xb0bc08 maybe_expand_insn(insn_code, unsigned int, expand_operand*) /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/optabs.c:7440 0x89ba1e emit_block_move_via_cpymem /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:1808 0x89ba1e emit_block_move_hints(rtx_def*, rtx_def*, rtx_def*, block_op_methods, unsigned int, long, unsigned long, unsigned long, unsigned long, bool, bool*) /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:1627 0x89c383 emit_block_move(rtx_def*, rtx_def*, rtx_def*, block_op_methods) /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:1667 0x89fb4e store_expr(tree_node*, rtx_def*, int, bool, bool) /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:5845 0x88c1f9 store_field /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:7149 0x8a0c22 expand_assignment(tree_node*, tree_node*, bool) /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:5304 0x761964 expand_gimple_stmt_1 /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/cfgexpand.c:3779 0x761964 expand_gimple_stmt /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/cfgexpand.c:3875 0x768583 expand_gimple_basic_block /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/cfgexpand.c:5915 0x76abc6 execute /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/cfgexpand.c:6538 Christophe > Ok, thanks! > > Kyrill >