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

--- Comment #5 from Martin Liška <marxin at gcc dot gnu.org> ---
> However, still talking about the current master only, I see a difference
> with -O3, when I try on the repro example from Bug 103274 and -O3:
> 
> x86_64-w64-mingw32-gcc -c -S -O3 -fno-reorder-blocks-and-partition a.c -o
> nropt.s
> 
> x86_64-w64-mingw32-gcc -c -S -O3 -freorder-blocks-and-partition a.c -o ropt.s
> x86_64-w64-mingw32-gcc -c -S -O3  a.c -o noopt.s
> 
> All of these assembler files are different (and from my non-expert reading,
> noopt.s uses the optimization and does have the invalid unwind information
> as reported in Bug 103274). Is the optimization correctly dropped also with
> -O3 only?

Hmmm, I've just tested the same with the locally built cross-compiler:
~/Programming/gcc/configure --enable-languages=c,c++
--prefix=/home/marxin/bin/gcc --disable-multilib --enable-host-shared
--disable-libsanitizer --enable-valgrind-annotations --disable-bootstrap
--target=x86_64-w64-mingw32

and it works fine, all 3 assembly files are identical.

cat 1.s
        .file   "pr103274.c"
        .text
        .section .rdata,"dr"
.LC0:
        .ascii "factor\0"
        .text
        .p2align 4
        .globl  _Z5dummyP7SEXPREC
        .def    _Z5dummyP7SEXPREC;      .scl    2;      .type   32;     .endef
        .seh_proc       _Z5dummyP7SEXPREC
_Z5dummyP7SEXPREC:
.LFB2:
        pushq   %r13
        .seh_pushreg    %r13
        pushq   %r12
        .seh_pushreg    %r12
        pushq   %rbp
        .seh_pushreg    %rbp
        pushq   %rdi
        .seh_pushreg    %rdi
        pushq   %rsi
        .seh_pushreg    %rsi
        pushq   %rbx
        .seh_pushreg    %rbx
        subq    $40, %rsp
        .seh_stackalloc 40
        .seh_endprologue
        movq    %rcx, %r12
        call    _Z11mypredicateP7SEXPREC
        testl   %eax, %eax
        jne     .L21
.L2:
        movq    .refptr.R_NilValue(%rip), %rax
        movq    (%rax), %rax
        addq    $40, %rsp
        popq    %rbx
        popq    %rsi
        popq    %rdi
        popq    %rbp
        popq    %r12
        popq    %r13
        ret
        .p2align 4,,10
        .p2align 3
.L21:
        movq    %r12, %rcx
        call    _Z11mygetattribP7SEXPREC
        movq    %rax, %rcx
        movq    %rax, %r13
        call    _Z8mylengthP7SEXPREC
        movl    %eax, %ebp
        testl   %eax, %eax
        jle     .L2
        movl    %eax, %r12d
        movl    $1, %esi
        leaq    .LC0(%rip), %rdi
        jmp     .L6
        .p2align 4,,10
        .p2align 3
.L8:
        movq    %rax, %rsi
.L6:
        movzbl  0(%r13), %ebx
        andl    $1, %ebx
        je      .L3
        leal    -1(%rsi), %edx
        movq    %r13, %rcx
        call    _Z11myaltstringP7SEXPRECi
        movq    %rdi, %rdx
        movq    %rax, %rcx
        addq    $8, %rcx
        call    _Z6strcmpPKcS0_
        testl   %eax, %eax
        je      .L5
.L22:
        cmpq    %r12, %rsi
        je      .L2
        leaq    1(%rsi), %rax
        testb   %bl, %bl
        jne     .L8
        movslq  %esi, %rsi
.L7:
        movq    8(%r13,%rsi,8), %rax
        movq    %rdi, %rdx
        leaq    8(%rax), %rcx
        call    _Z6strcmpPKcS0_
        testl   %eax, %eax
        je      .L5
        addq    $1, %rsi
        cmpl    %esi, %ebp
        jg      .L7
        jmp     .L2
        .p2align 4,,10
        .p2align 3
.L3:
        movq    0(%r13,%rsi,8), %rcx
        movq    %rdi, %rdx
        addq    $8, %rcx
        call    _Z6strcmpPKcS0_
        testl   %eax, %eax
        jne     .L22
.L5:
        call    _Z11myerrorcallv
        nop
        .seh_endproc
        .ident  "GCC: (GNU) 12.0.0 20211209 (experimental)"
        .def    _Z11mypredicateP7SEXPREC;       .scl    2;      .type   32;    
.endef
        .def    _Z11mygetattribP7SEXPREC;       .scl    2;      .type   32;    
.endef
        .def    _Z8mylengthP7SEXPREC;   .scl    2;      .type   32;     .endef
        .def    _Z11myaltstringP7SEXPRECi;      .scl    2;      .type   32;    
.endef
        .def    _Z6strcmpPKcS0_;        .scl    2;      .type   32;     .endef
        .def    _Z11myerrorcallv;       .scl    2;      .type   32;     .endef
        .section        .rdata$.refptr.R_NilValue, "dr"
        .globl  .refptr.R_NilValue
        .linkonce       discard
.refptr.R_NilValue:
        .quad   R_NilValue

Reply via email to