[LLVMbugs] [Bug 2182] New: wrong code emitted for volatile accesses

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Sun Mar 30 22:09:00 PDT 2008


           Summary: wrong code emitted for volatile accesses
           Product: new-bugs
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: regehr at cs.utah.edu
                CC: llvmbugs at cs.uiuc.edu

This is for:

regehr at home-linux:~/volatile/tmp0$ llvm-gcc -v
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../configure
--enable-llvm=/home/regehr/llvm-2.2 --enable-languages=c,c++
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5546) (LLVM build)

This code:

volatile int x;
void loop_2 (void) {
  int i;
  for (i=0; i<4; i++) {
    x = x+3;

Compiled like this:

llvm-gcc -O2 -S foo.c

Turns into:

        pushl   %ebp
        movl    %esp, %ebp
        movl    x, %eax
        leal    3(%eax), %ecx
        movl    %ecx, x
        leal    6(%eax), %ecx
        movl    %ecx, x
        leal    9(%eax), %ecx
        movl    %ecx, x
        addl    $12, %eax
        movl    %eax, x
        popl    %ebp

x must be loaded and stored at each loop iteration.  The loads are incorrectly
being optimized away.

Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list