[LLVMdev] llvm-gcc doesnt honor volatile quantifier of the array type?
John Regehr
regehr at cs.utah.edu
Mon Jan 12 21:20:02 PST 2009
I filed a bug on this:
http://llvm.org/bugs/show_bug.cgi?id=3320
John
On Mon, 12 Jan 2009, John Regehr wrote:
> This looks wrong to me, though the x86 backend produces code that does the
> right thing (reads each element once).
>
> If you change the code (see below) to read each element twice, llvm-gcc
> still does the right thing but llvm-g++ does not (i.e. it fails to read
> aech location twice). Current versions of gcc/g++ also look wrong.
>
> All 4 compilers (gcc,g++,llvm-gcc,llvm-g++) do the right thing when the
> array is global.
>
> John
>
>
> #define N 3
>
> typedef volatile int vint;
>
> int sum(vint a[N]) {
> int sum = 0;
> unsigned i;
> for (i = 0; i < N; i++)
> sum += a[i] + a[i];
> return sum;
> }
>
>
>
> On Tue, 13 Jan 2009, Zhou Sheng wrote:
>
>> Hi,
>>
>>
>> I encountered a problem about volatile quantifier when using llvm-gcc, here
>> is the example:
>>
>> #define N 10
>>
>> int sum(volatile int a[N]) {
>> int sum = 0;
>> unsigned i = 0;
>> for (i = 0; i < N; ++i)
>> sum += a[i];
>>
>> return sum;
>> }
>>
>>
>> If I compile it as C code, then llvm-gcc will dump:
>>
>> define i32 @sum(i32* nocapture %a) nounwind {
>> bb1.thread:
>> %0 = volatile load i32* %a, align 4 ; <i32> [#uses=1]
>> %1 = getelementptr i32* %a, i32 1 ; <i32*> [#uses=1]
>> %2 = volatile load i32* %1, align 4 ; <i32> [#uses=1]
>> %3 = add i32 %2, %0 ; <i32> [#uses=1]
>> ...
>> }
>>
>> We can see the load is "volatile", this is correct and expected.
>>
>>
>> But when I compile the example as C++ code, then llvm-gcc dump:
>>
>> define i32 @_Z3sumPVi(i32* nocapture %a) nounwind readonly {
>> bb1.thread:
>> %0 = load i32* %a, align 4 ; <i32> [#uses=1]
>> %1 = getelementptr i32* %a, i32 1 ; <i32*> [#uses=1]
>> %2 = load i32* %1, align 4 ; <i32> [#uses=1]
>> %3 = add i32 %2, %0 ; <i32> [#uses=1]
>> ...
>> }
>>
>> No volatile keeps, is it expected or a bug for llvm-gcc?
>>
>> Anyone can help me? Thanks in advance.
>>
>>
>> Sheng.
>>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
More information about the llvm-dev
mailing list