[llvm-dev] Dependence Analysis bug or undefined behavior?
De Azevedo Piovezan, Felipe via llvm-dev
llvm-dev at lists.llvm.org
Sun Nov 18 06:02:59 PST 2018
Hi,
Does this kind of IR have "undefined behavior" under LLVM semantics or is it acceptable?
(TLDR: a store of i64 at offset n, followed by a load of i32 at offset n+1.)
define void @foo(i32* %A, i64 %n) {
entry:
%arrayidx = getelementptr inbounds i32, i32* %A, i64 %n
%arrayidx_cast = bitcast i32* %arrayidx to i64*
store i64 0, i64* %arrayidx_cast, align 4
%add1 = add i64 %n, 1
%arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add1
%0 = load i32, i32* %arrayidx2, align 4
ret void
}
The result of Dependence Analysis is:
opt -analyze -da BitCasts.ll
Printing analysis 'Dependence Analysis' for function 'z0':
da analyze - none! <<< this is between the store and itself, ok to be "none".
da analyze - none! <<< this is between the store and the load!!!
da analyze - none! <<< this is between the load and itself, ok to be "none".
Is dependence analysis right or wrong? This IR likely comes from some C++ code doing funny things with unions...
Thanks!
--
Felipe de Azevedo Piovezan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181118/636dea06/attachment.html>
More information about the llvm-dev
mailing list