181 lines · plain
1; RUN: opt < %s -aa-pipeline=basic-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s2 3; CHECK: Function: t14; CHECK: NoAlias: i32* %gep1, i32* %gep25define void @t1(ptr %p, i32 %addend, ptr %q) {6 %knownnonzero = load i32, ptr %q, !range !07 %add = add nsw nuw i32 %addend, %knownnonzero8 %gep1 = getelementptr [8 x i32], ptr %p, i32 2, i32 %addend9 %gep2 = getelementptr [8 x i32], ptr %p, i32 2, i32 %add10 load i32, ptr %gep111 load i32, ptr %gep212 ret void13}14 15; CHECK: Function: t216; CHECK: MayAlias: i32* %gep1, i32* %gep217define void @t2(ptr %p, i32 %addend, ptr %q) {18 %knownnonzero = load i32, ptr %q, !range !019 %add = add nsw nuw i32 %addend, %knownnonzero20 %gep1 = getelementptr [8 x i32], ptr %p, i32 1, i32 %addend21 %gep2 = getelementptr [8 x i32], ptr %p, i32 0, i32 %add22 load i32, ptr %gep123 load i32, ptr %gep224 ret void25}26 27; CHECK: Function: t328; CHECK: MustAlias: i32* %gep1, i32* %gep229define void @t3(ptr %p, i32 %addend, ptr %q) {30 %knownnonzero = load i32, ptr %q, !range !031 %add = add nsw nuw i32 %addend, %knownnonzero32 %gep1 = getelementptr [8 x i32], ptr %p, i32 0, i32 %add33 %gep2 = getelementptr [8 x i32], ptr %p, i32 0, i32 %add34 load i32, ptr %gep135 load i32, ptr %gep236 ret void37}38 39; CHECK: Function: t440; CHECK: MayAlias: i32* %gep1, i32* %gep241define void @t4(ptr %p, i32 %addend, ptr %q) {42 %knownnonzero = load i32, ptr %q, !range !043 %add = add nsw nuw i32 %addend, %knownnonzero44 %gep1 = getelementptr [8 x i32], ptr %p, i32 1, i32 %addend45 %gep2 = getelementptr [8 x i32], ptr %p, i32 %add, i32 %add46 load i32, ptr %gep147 load i32, ptr %gep248 ret void49}50 51; CHECK: Function: t552; CHECK: MayAlias: i64* %gep1, i32* %gep253define void @t5(ptr %p, i32 %addend, ptr %q) {54 %knownnonzero = load i32, ptr %q, !range !055 %add = add nsw nuw i32 %addend, %knownnonzero56 %gep1 = getelementptr [8 x i32], ptr %p, i32 2, i32 %addend57 %gep2 = getelementptr [8 x i32], ptr %p, i32 2, i32 %add58 load i32, ptr %gep259 load i64, ptr %gep160 ret void61}62 63; CHECK-LABEL: Function: add_non_zero_simple64; CHECK: NoAlias: i32* %gep1, i32* %gep265define void @add_non_zero_simple(ptr %p, i32 %addend, ptr %q) {66 %knownnonzero = load i32, ptr %q, !range !067 %add = add i32 %addend, %knownnonzero68 %gep1 = getelementptr i32, ptr %p, i32 %addend69 %gep2 = getelementptr i32, ptr %p, i32 %add70 load i32, ptr %gep171 load i32, ptr %gep272 ret void73}74 75; CHECK-LABEL: Function: add_non_zero_different_scales76; CHECK: MayAlias: i32* %gep1, i16* %gep277define void @add_non_zero_different_scales(ptr %p, i32 %addend, ptr %q) {78 %knownnonzero = load i32, ptr %q, !range !079 %add = add i32 %addend, %knownnonzero80 %gep1 = getelementptr i32, ptr %p, i32 %addend81 %gep2 = getelementptr i16, ptr %p, i32 %add82 load i32, ptr %gep183 load i16, ptr %gep284 ret void85}86 87; CHECK-LABEL: Function: add_non_zero_different_sizes88; CHECK: NoAlias: i16* %gep1, i32* %gep289; CHECK: NoAlias: i32* %gep1, i16* %gep290; CHECK: NoAlias: i16* %gep1, i16* %gep291; CHECK: MayAlias: i64* %gep1, i32* %gep292; CHECK: MayAlias: i64* %gep1, i16* %gep293; CHECK: MayAlias: i32* %gep1, i64* %gep294; CHECK: MayAlias: i16* %gep1, i64* %gep295; CHECK: MayAlias: i64* %gep1, i64* %gep296define void @add_non_zero_different_sizes(ptr %p, i32 %addend, ptr %q) {97 %knownnonzero = load i32, ptr %q, !range !098 %add = add i32 %addend, %knownnonzero99 %gep1 = getelementptr i32, ptr %p, i32 %addend100 %gep2 = getelementptr i32, ptr %p, i32 %add101 load i32, ptr %gep1102 load i32, ptr %gep2103 load i16, ptr %gep1104 load i16, ptr %gep2105 load i64, ptr %gep1106 load i64, ptr %gep2107 ret void108}109 110 111; CHECK-LABEL: add_non_zero_with_offset112; MayAlias: ptr %gep1, ptr %gep2113; NoAlias: ptr %gep1, ptr %gep2114define void @add_non_zero_with_offset(ptr %p, i32 %addend, ptr %q) {115 %knownnonzero = load i32, ptr %q, !range !0116 %add = add i32 %addend, %knownnonzero117 %p.off.8 = getelementptr i8, ptr %p, i32 2118 %gep1 = getelementptr i32, ptr %p.off.8, i32 %addend119 %gep2 = getelementptr i32, ptr %p, i32 %add120 load i32, ptr %gep1121 load i32, ptr %gep2122 load i16, ptr %gep1123 load i16, ptr %gep2124 ret void125}126 127; CHECK-LABEL: Function: add_non_zero_assume128; CHECK: NoAlias: i32* %gep1, i32* %gep2129define void @add_non_zero_assume(ptr %p, i32 %addend, i32 %knownnonzero) {130 %cmp = icmp ne i32 %knownnonzero, 0131 call void @llvm.assume(i1 %cmp)132 %add = add i32 %addend, %knownnonzero133 %gep1 = getelementptr i32, ptr %p, i32 %addend134 %gep2 = getelementptr i32, ptr %p, i32 %add135 load i32, ptr %gep1136 load i32, ptr %gep2137 ret void138}139 140; CHECK-LABEL: non_zero_index_simple141; CHECK: NoAlias: i32* %gep, i32* %p142; CHECK: NoAlias: i16* %gep, i32* %p143; CHECK: MayAlias: i64* %gep, i32* %p144define void @non_zero_index_simple(ptr %p, ptr %q) {145 %knownnonzero = load i32, ptr %q, !range !0146 %gep = getelementptr i32, ptr %p, i32 %knownnonzero147 load i32, ptr %p148 load i32, ptr %gep149 load i16, ptr %gep150 load i64, ptr %gep151 ret void152}153 154; CHECK-LABEL: non_zero_index_with_offset155; CHECK: MayAlias: i32* %gep, i32* %p156; CHECK: NoAlias: i16* %gep, i32* %p157define void @non_zero_index_with_offset(ptr %p, ptr %q) {158 %knownnonzero = load i32, ptr %q, !range !0159 %p.off.8 = getelementptr i8, ptr %p, i32 2160 %gep = getelementptr i32, ptr %p.off.8, i32 %knownnonzero161 load i32, ptr %p162 load i32, ptr %gep163 load i16, ptr %gep164 ret void165}166 167; CHECK-LABEL: non_zero_index_assume168; CHECK: NoAlias: i32* %gep, i32* %p169define void @non_zero_index_assume(ptr %p, i32 %knownnonzero) {170 %cmp = icmp ne i32 %knownnonzero, 0171 call void @llvm.assume(i1 %cmp)172 %gep = getelementptr i32, ptr %p, i32 %knownnonzero173 load i32, ptr %p174 load i32, ptr %gep175 ret void176}177 178declare void @llvm.assume(i1)179 180!0 = !{ i32 1, i32 0 }181