96 lines · plain
1; RUN: opt -aa-pipeline=basic-aa -passes=aa-eval -print-all-alias-modref-info -disable-output %s 2>&1 | FileCheck %s2 3target datalayout = "p:32:32:32"4 5; Test cases with i64 bit GEP indices that will get truncated implicitly to 326; bit due to the datalayout.7 8declare void @llvm.assume(i1)9 10define void @mustalias_overflow_in_32_bit_constants(ptr %ptr) {11; CHECK-LABEL: Function: mustalias_overflow_in_32_bit_constants: 2 pointers, 0 call sites12; CHECK-NEXT: MustAlias: i8* %gep.1, i8* %ptr13;14 load i8, ptr %ptr15 %gep.1 = getelementptr i8, ptr %ptr, i64 429496729616 store i8 0, ptr %gep.117 ret void18}19 20define void @mustalias_overflow_in_32_with_var_index(ptr %ptr, i64 %n) {21; CHECK-LABEL: Function: mustalias_overflow_in_32_with_var_index22; CHECK: MustAlias: i8* %gep.1, i8* %gep.223;24 load [1 x i8], ptr %ptr25 %gep.1 = getelementptr [1 x i8], ptr %ptr, i64 %n, i64 429496729626 store i8 0, ptr %gep.127 %gep.2 = getelementptr [1 x i8], ptr %ptr, i64 %n, i64 028 store i8 1, ptr %gep.229 ret void30}31 32define void @noalias_overflow_in_32_bit_constants(ptr %ptr) {33; CHECK-LABEL: Function: noalias_overflow_in_32_bit_constants: 3 pointers, 0 call sites34; CHECK-NEXT: MustAlias: i8* %gep.1, i8* %ptr35; CHECK-NEXT: NoAlias: i8* %gep.2, i8* %ptr36; CHECK-NEXT: NoAlias: i8* %gep.1, i8* %gep.237;38 load i8, ptr %ptr39 %gep.1 = getelementptr i8, ptr %ptr, i64 429496729640 store i8 0, ptr %gep.141 %gep.2 = getelementptr i8, ptr %ptr, i64 142 store i8 1, ptr %gep.243 ret void44}45 46; The GEP indices get implicitly truncated to 32 bit, so multiples of 2^3247; (=4294967296) will be 0.48; See https://alive2.llvm.org/ce/z/HHjQgb.49define void @mustalias_overflow_in_32_bit_add_mul_gep(ptr %ptr, i64 %i) {50; CHECK-LABEL: Function: mustalias_overflow_in_32_bit_add_mul_gep: 3 pointers, 1 call sites51; CHECK-NEXT: MayAlias: i8* %gep.1, i8* %ptr52; CHECK-NEXT: MayAlias: i8* %gep.2, i8* %ptr53; CHECK-NEXT: MayAlias: i8* %gep.1, i8* %gep.254;55 load i8, ptr %ptr56 %s.1 = icmp sgt i64 %i, 057 call void @llvm.assume(i1 %s.1)58 59 %mul = mul nuw nsw i64 %i, 429496729660 %add = add nuw nsw i64 %mul, %i61 %gep.1 = getelementptr i8, ptr %ptr, i64 %add62 store i8 0, ptr %gep.163 %gep.2 = getelementptr i8, ptr %ptr, i64 %i64 store i8 1, ptr %gep.265 ret void66}67 68define void @mayalias_overflow_in_32_bit_non_zero(ptr %ptr, i64 %n) {69; CHECK-LABEL: Function: mayalias_overflow_in_32_bit_non_zero70; CHECK: MayAlias: i8* %gep, i8* %ptr71;72 load i8, ptr %ptr73 %c = icmp ne i64 %n, 074 call void @llvm.assume(i1 %c)75 store i8 0, ptr %ptr76 %gep = getelementptr i8, ptr %ptr, i64 %n77 store i8 1, ptr %gep78 ret void79}80 81define void @mayalias_overflow_in_32_bit_positive(ptr %ptr, i64 %n) {82; CHECK-LABEL: Function: mayalias_overflow_in_32_bit_positive83; CHECK: NoAlias: i8* %gep.1, i8* %ptr84; CHECK: MayAlias: i8* %gep.2, i8* %ptr85; CHECK: MayAlias: i8* %gep.1, i8* %gep.286;87 load i8, ptr %ptr88 %c = icmp sgt i64 %n, 089 call void @llvm.assume(i1 %c)90 %gep.1 = getelementptr i8, ptr %ptr, i64 -191 store i8 0, ptr %gep.192 %gep.2 = getelementptr i8, ptr %ptr, i64 %n93 store i8 1, ptr %gep.294 ret void95}96