Home | History | Annotate | Download | only in Andersen
      1 ; This testcase ensures that CFL AA handles assignment cycles correctly
      2 
      3 ; RUN: opt < %s -disable-basicaa -cfl-anders-aa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s
      4 ; RUN: opt < %s -aa-pipeline=cfl-anders-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s
      5 
      6 ; CHECK-LABEL: Function: test_cycle
      7 ; CHECK: NoAlias: i64* %a, i64** %b
      8 ; CHECK: NoAlias: i64* %a, i64*** %c
      9 ; CHECK: NoAlias: i64** %b, i64*** %c
     10 ; CHECK: NoAlias: i64* %a, i64**** %d
     11 ; CHECK: NoAlias: i64** %b, i64**** %d
     12 ; CHECK: NoAlias: i64*** %c, i64**** %d
     13 ; CHECK: NoAlias: i64* %a, i64* %e
     14 ; CHECK: NoAlias: i64* %e, i64** %b
     15 ; CHECK: NoAlias: i64* %e, i64*** %c
     16 ; CHECK: MayAlias: i64* %a, i64* %f
     17 ; CHECK: NoAlias: i64* %f, i64** %b
     18 ; CHECK: NoAlias: i64* %f, i64*** %c
     19 ; CHECK: MayAlias: i64* %f, i64**** %d
     20 ; CHECK: MayAlias: i64* %e, i64* %f
     21 define void @test_cycle() {
     22   %a = alloca i64, align 8
     23   %b = alloca i64*, align 8
     24   %c = alloca i64**, align 8
     25   %d = alloca i64***, align 8
     26   store i64* %a, i64** %b
     27   store i64** %b, i64*** %c
     28   store i64*** %c, i64**** %d
     29 
     30   %e = bitcast i64**** %d to i64*
     31   store i64* %e, i64** %b
     32   %f = load i64*, i64** %b
     33   ret void
     34 }
     35