https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114566

--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Seems like vectorizer bug to me.  The _42 + 128 store is to
MEM <vector(16) float> [(float *)_42 + 128B];
aka:
 <target_mem_ref 0x7fffea146580
    type <vector_type 0x7fffea038930
        type <real_type 0x7fffea1532a0 float sizes-gimplified SF
            size <integer_cst 0x7fffea12cfd8 constant 32>
            unit-size <integer_cst 0x7fffea14f000 constant 4>
            align:32 warn_if_not_align:0 symtab:0 alias-set 1 canonical-type
0x7fffea1532a0 precision:32
            pointer_to_this <pointer_type 0x7fffea153930>>
        V16SF
        size <integer_cst 0x7fffea14f480 constant 512>
        unit-size <integer_cst 0x7fffea299960 constant 64>
        user align:32 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea2ac2a0 nunits:16
        pointer_to_this <pointer_type 0x7fffea038888>>

    arg:0 <ssa_name 0x7fffea03fee8
        type <pointer_type 0x7fffea153000 type <void_type 0x7fffea14bf18 void>
            public unsigned DI
            size <integer_cst 0x7fffea12cd98 constant 64>
            unit-size <integer_cst 0x7fffea12cdb0 constant 8>
            align:64 warn_if_not_align:0 symtab:0 alias-set 2 canonical-type
0x7fffea153000
            pointer_to_this <pointer_type 0x7fffea15b9d8>>

        def_stmt _42 = (void *) ivtmp.49_58;
        version:42
        ptr-info 0x7fffea068540>
    arg:1 <integer_cst 0x7fffea047c30 type <pointer_type 0x7fffea153930>
constant 128>>
so has 32-bit alignment there, so it uses movmisalign optab.
The _42 + 192 store is
MEM <vector(8) float> [(float *)_42 + 192B];
aka
 <target_mem_ref 0x7fffea146600
    type <vector_type 0x7fffea2a4f18
        type <real_type 0x7fffea1532a0 float sizes-gimplified SF
            size <integer_cst 0x7fffea12cfd8 constant 32>
            unit-size <integer_cst 0x7fffea14f000 constant 4>
            align:32 warn_if_not_align:0 symtab:0 alias-set 1 canonical-type
0x7fffea1532a0 precision:32
            pointer_to_this <pointer_type 0x7fffea153930>>
        V8SF
        size <integer_cst 0x7fffea14f108 constant 256>
        unit-size <integer_cst 0x7fffea14f1f8 constant 32>
        align:256 warn_if_not_align:0 symtab:0 alias-set 1 canonical-type
0x7fffea2a4f18 nunits:8
        pointer_to_this <pointer_type 0x7fffea2a7e70>>

    arg:0 <ssa_name 0x7fffea03fee8
        type <pointer_type 0x7fffea153000 type <void_type 0x7fffea14bf18 void>
            public unsigned DI
            size <integer_cst 0x7fffea12cd98 constant 64>
            unit-size <integer_cst 0x7fffea12cdb0 constant 8>
            align:64 warn_if_not_align:0 symtab:0 alias-set 2 canonical-type
0x7fffea153000
            pointer_to_this <pointer_type 0x7fffea15b9d8>>

        def_stmt _42 = (void *) ivtmp.49_58;
        version:42
        ptr-info 0x7fffea068540>
    arg:1 <integer_cst 0x7fffea0682e8 type <pointer_type 0x7fffea153930>
constant 192>>
and so it expects 256-bit alignment (despite only 128-bit being guaranteed).

Reply via email to