1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info 2>&1 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; BasicAA's guard against use-def cycles shouldn't prevent it from 6*9880d681SAndroid Build Coastguard Worker; analyzing use-def dags. 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; CHECK: MustAlias: i8* %base, i8* %phi 9*9880d681SAndroid Build Coastguard Worker; CHECK: MustAlias: i8* %phi, i8* %wwa 10*9880d681SAndroid Build Coastguard Worker; CHECK: MustAlias: i8* %phi, i8* %wwb 11*9880d681SAndroid Build Coastguard Worker; CHECK: MustAlias: i16* %bigbase, i8* %phi 12*9880d681SAndroid Build Coastguard Workerdefine i8 @foo(i8* %base, i1 %x, i1 %w) { 13*9880d681SAndroid Build Coastguard Workerentry: 14*9880d681SAndroid Build Coastguard Worker br i1 %w, label %wa, label %wb 15*9880d681SAndroid Build Coastguard Workerwa: 16*9880d681SAndroid Build Coastguard Worker %wwa = bitcast i8* %base to i8* 17*9880d681SAndroid Build Coastguard Worker br label %wc 18*9880d681SAndroid Build Coastguard Workerwb: 19*9880d681SAndroid Build Coastguard Worker %wwb = bitcast i8* %base to i8* 20*9880d681SAndroid Build Coastguard Worker br label %wc 21*9880d681SAndroid Build Coastguard Workerwc: 22*9880d681SAndroid Build Coastguard Worker %first = phi i8* [ %wwa, %wa ], [ %wwb, %wb ] 23*9880d681SAndroid Build Coastguard Worker %fc = bitcast i8* %first to i8* 24*9880d681SAndroid Build Coastguard Worker br i1 %x, label %xa, label %xb 25*9880d681SAndroid Build Coastguard Workerxa: 26*9880d681SAndroid Build Coastguard Worker %xxa = bitcast i8* %fc to i8* 27*9880d681SAndroid Build Coastguard Worker br label %xc 28*9880d681SAndroid Build Coastguard Workerxb: 29*9880d681SAndroid Build Coastguard Worker %xxb = bitcast i8* %fc to i8* 30*9880d681SAndroid Build Coastguard Worker br label %xc 31*9880d681SAndroid Build Coastguard Workerxc: 32*9880d681SAndroid Build Coastguard Worker %phi = phi i8* [ %xxa, %xa ], [ %xxb, %xb ] 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker store i8 0, i8* %phi 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker %bigbase = bitcast i8* %base to i16* 37*9880d681SAndroid Build Coastguard Worker store i16 -1, i16* %bigbase 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker %loaded = load i8, i8* %phi 40*9880d681SAndroid Build Coastguard Worker ret i8 %loaded 41*9880d681SAndroid Build Coastguard Worker} 42