Limitations of Alias Analysis?

Hi,

llvm-gcc -emit-llvm -O0 -c test.c -o test.bc

try compiling with optimization.

Ciao,

Duncan.

Hi Duncan,
  I tried to perform alias analysis after optimization(O1, since O2 and
O3 implement inlining).

  opt -O1 test.bc -o o1.bc

  The content of main() is listed as follow:
define i32 @main() nounwind {
entry:
  %0 = tail call %struct.Location* @getNewLocation(i32 0, i32 0)
nounwind ; <%struct.Location*> [#uses=2]
  %1 = tail call %struct.Location* @getNewLocation(i32 1, i32 2)
nounwind ; <%struct.Location*> [#uses=2]
  %2 = tail call %struct.Location* @sub(%struct.Location* %0, %
struct.Location* %1) nounwind ; <%struct.Location*> [#uses=1]
  %3 = bitcast %struct.Location* %0 to i8* ; <i8*> [#uses=1]
  tail call void @free(i8* %3) nounwind
  %4 = bitcast %struct.Location* %1 to i8* ; <i8*> [#uses=1]
  tail call void @free(i8* %4) nounwind
  %5 = bitcast %struct.Location* %2 to i8* ; <i8*> [#uses=1]
  tail call void @free(i8* %5) nounwind
  ret i32 0
}

  Then, the AA result with option "-basicaa -ds-aa -anders-aa" is:

  MayAlias: %struct.Location* %0, %struct.Location* %1
  MayAlias: %struct.Location* %0, %struct.Location* %2
  MayAlias: %struct.Location* %1, %struct.Location* %2

  %0 and %1 are still considered as 'may alias'.

在 2009-06-29一的 10:36 +0200,Duncan Sands写道: