[Bug c/66867] New: Suboptimal code generation for C11 atomic_compare_exchange_strong_explicit()

sebastian.huber@embedded-brains.de gcc-bugzilla@gcc.gnu.org
Tue Jul 14 11:17:00 GMT 2015


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

            Bug ID: 66867
           Summary: Suboptimal code generation for C11
                    atomic_compare_exchange_strong_explicit()
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sebastian.huber@embedded-brains.de
  Target Milestone: ---

At least on ARM and PowerPC for the following test case

#include <stdatomic.h>

void f(atomic_uint *a)
{
  unsigned int e = 0;
  atomic_compare_exchange_strong_explicit(a, &e, 1, memory_order_relaxed,
memory_order_relaxed);
}

a superfluous stack frame and store is generated:

        .file   "test-cas.c"
        .machine ppc
        .section        ".text"
        .align 2
        .globl f
        .type   f, @function
f:
        stwu 1,-24(1) <- Superfluous
        li 9,0
        li 10,1
        stw 9,8(1) <- Superfluous
.L2:
        lwarx 9,0,3
        cmpwi 0,9,0
        bne- 0,.L3
        stwcx. 10,0,3
        bne- 0,.L2
.L3:
        addi 1,1,24 <- Superfluous
        blr
        .size   f, .-f
        .ident  "GCC: (GNU) 6.0.0 20150714 (experimental)"



More information about the Gcc-bugs mailing list