; RUN: opt < %s -aa-pipeline=basic-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s @G = global [10 x i32] zeroinitializer, align 4 define void @select_in_gep1(i1 %c, i64 %x) { entry: ; CHECK-LABEL: Function: select_in_gep1 ; CHECK: NoAlias: i32* %arrayidx1, i32* %arrayidx2 %add1_ = add nsw i64 %x, 1 %add2_ = add nsw i64 %x, 2 %select_ = select i1 %c, i64 %add1_, i64 %add2_ %arrayidx1 = getelementptr inbounds [10 x i32], ptr @G, i64 0, i64 %select_ store i32 42, ptr %arrayidx1, align 4 %arrayidx2 = getelementptr inbounds [10 x i32], ptr @G, i64 0, i64 %x store i32 43, ptr %arrayidx2, align 4 ret void } define void @select_in_gep2(i1 %c, i64 %x) { entry: ; TODO: should be "NoAlias" here as well. ; CHECK-LABEL: Function: select_in_gep2 ; CHECK: MayAlias: i32* %arrayidx1, i32* %arrayidx2 %add1_ = add nsw i64 %x, 1 %add2_ = add nsw i64 %x, 2 %add3_ = add nsw i64 %x, 3 %select_ = select i1 %c, i64 %add1_, i64 %add2_ %arrayidx1 = getelementptr inbounds [10 x i32], ptr @G, i64 0, i64 %select_ store i32 42, ptr %arrayidx1, align 4 %arrayidx2 = getelementptr inbounds [10 x i32], ptr @G, i64 0, i64 %add3_ store i32 43, ptr %arrayidx2, align 4 ret void } define void @two_selects_in_gep_same_cond(i1 %c, i64 %x) { entry: ; CHECK-LABEL: Function: two_selects_in_gep_same_cond ; CHECK: NoAlias: i32* %arrayidx1, i32* %arrayidx2 %add1_ = add nsw i64 %x, 1 %add2_ = add nsw i64 %x, 2 %select1_ = select i1 %c, i64 %x, i64 %add1_ %select2_ = select i1 %c, i64 %add2_, i64 %x %arrayidx1 = getelementptr inbounds [10 x i32], ptr @G, i64 0, i64 %select1_ store i32 42, ptr %arrayidx1, align 4 %arrayidx2 = getelementptr inbounds [10 x i32], ptr @G, i64 0, i64 %select2_ store i32 43, ptr %arrayidx2, align 4 ret void } define void @two_selects_in_gep_different_cond1(i1 %c1, i1 %c2, i64 %x) { entry: ; CHECK-LABEL: Function: two_selects_in_gep_different_cond1 ; CHECK: NoAlias: i32* %arrayidx1, i32* %arrayidx2 %add1_ = add nsw i64 %x, 1 %add2_ = add nsw i64 %x, 2 %add3_ = add nsw i64 %x, 3 %add4_ = add nsw i64 %x, 4 %select1_ = select i1 %c1, i64 %add1_, i64 %add2_ %select2_ = select i1 %c2, i64 %add3_, i64 %add4_ %arrayidx1 = getelementptr inbounds [10 x i32], ptr @G, i64 0, i64 %select1_ store i32 42, ptr %arrayidx1, align 4 %arrayidx2 = getelementptr inbounds [10 x i32], ptr @G, i64 0, i64 %select2_ store i32 43, ptr %arrayidx2, align 4 ret void } define void @two_selects_in_gep_different_cond2(i1 %c1, i1 %c2, i64 %x) { entry: ; CHECK-LABEL: Function: two_selects_in_gep_different_cond2 ; CHECK: MayAlias: i32* %arrayidx1, i32* %arrayidx2 %add1_ = add nsw i64 %x, 1 %add2_ = add nsw i64 %x, 2 %select1_ = select i1 %c1, i64 %x, i64 %add1_ %select2_ = select i1 %c2, i64 %x, i64 %add2_ %arrayidx1 = getelementptr inbounds [10 x i32], ptr @G, i64 0, i64 %select1_ store i32 42, ptr %arrayidx1, align 4 %arrayidx2 = getelementptr inbounds [10 x i32], ptr @G, i64 0, i64 %select2_ store i32 43, ptr %arrayidx2, align 4 ret void }