yxsamliu wrote:

> It has nothing to do with writing to those arrays while the kernel is 
> running. That would indeed be UB.
> 
> > both would still work just the same even with this change,
> 
> No, they will not. Here's the demonstration of the behavior change that 
> `const` brings to the table: https://cuda.godbolt.org/z/h6e5Wb4PT
> 
> It shows that adding `const` allows compiler to use the initializer values as 
> written (it does not even bother instantiating `cxxx`), while without `const` 
> it reads the array values, assuming that they may be changed externally.

EarlyCSE pass propagates the constant value https://cuda.godbolt.org/z/Ta8rKjMTo

However, 

`
@xxx = dso_local addrspace(4) externally_initialized global [3 x i32] [i32 1, 
i32 2, i32 3], align 4
@_ZL4cxxx = internal addrspace(4) constant [3 x i32] [i32 1, i32 2, i32 3], 
align 4
`
In this case, _ZL4cxxx does not have externally_initialized . If this patch 
does not remove externally_initialized, probably this constant propagation 
won't happen.

Maybe Alex can add a lit test to prove that.

https://github.com/llvm/llvm-project/pull/110182
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to