ret i16 0
}
+; CHECK-LABEL: Function: dynamic_offset
+; CHECK: NoAlias: i8* %a, i8* %p.base
+; CHECK: MayAlias: i8* %p, i8* %p.base
+; CHECK: MayAlias: i8* %a, i8* %p
+; CHECK: MayAlias: i8* %p.base, i8* %p.next
+; CHECK: MayAlias: i8* %a, i8* %p.next
+; CHECK: MayAlias: i8* %p, i8* %p.next
+define void @dynamic_offset(i1 %c, i8* noalias %p.base) {
+entry:
+ %a = alloca i8
+ br label %loop
+
+loop:
+ %p = phi i8* [ %p.base, %entry ], [ %p.next, %loop ]
+ %offset = call i16 @call(i32 0)
+ %p.next = getelementptr inbounds i8, i8* %p, i16 %offset
+ br i1 %c, label %loop, label %exit
+
+exit:
+ ret void
+}
+
; TODO: Currently yields an asymmetric result.
; CHECK-LABEL: Function: symmetry
; CHECK: MayAlias: i32* %p, i32* %p.base