[LLVMbugs] [Bug 1435] NEW: licm ignores volatile store
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Thu May 17 15:47:43 PDT 2007
http://llvm.org/bugs/show_bug.cgi?id=1435
Summary: licm ignores volatile store
Product: libraries
Version: trunk
Platform: PC
OS/Version: Linux
Status: NEW
Severity: major
Priority: P2
Component: Scalar Optimizations
AssignedTo: unassignedbugs at nondot.org
ReportedBy: zhiruz at gmail.com
I know that there is some recent discussions about the optimizations on
volatile loads and stores, and the conclusion is that LLVM is doing the right
thing. But this time the story seems different.
See below for details. The test case will be posted shortly.
=======================================================================
For my first example, LLVM is able to preserve both volatile load and store
correctly.
void PassThrough(volatile int* DataIn, volatile int* DataOut)
{
int i;
int buffer[64];
for (i = 0; i < 64; i++)
buffer[i] = *DataIn;
for (i = 0; i < 64; i++)
*DataOut = buffer[i];
}
=======================================================================
For the second one, however, LICM will move the volatile store outside of the
loop, which is apparently wrong.
void Transpose(volatile int* DataIn, volatile int* DataOut)
{
int i, j;
int buffer[64];
for (i = 0; i < 64; i++)
buffer[i] = *DataIn;
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
*DataOut = buffer[j * 8 + i];
}
=========================================================
What I did:
llvm-gcc -O0 -c -emit-llvm test_volatile.c -o test.bc
opt -mem2reg -licm test.bc -o new.bc -f
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
More information about the llvm-bugs
mailing list