57 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=inline < %s | FileCheck %s3 4; Test interaction of simplification during cloning with insertion of scoped5; noalias metadata.6 7define <2 x i8> @callee1(ptr %ptr1, ptr noalias %ptr2, <2 x i1> %mask, <2 x i8> %passthru) {8; CHECK-LABEL: @callee1(9; CHECK-NEXT: [[RET:%.*]] = call <2 x i8> @llvm.masked.load.v2i8.p0(ptr align 1 [[PTR1:%.*]], <2 x i1> [[MASK:%.*]], <2 x i8> [[PASSTHRU:%.*]])10; CHECK-NEXT: store <2 x i8> zeroinitializer, ptr [[PTR2:%.*]], align 211; CHECK-NEXT: ret <2 x i8> [[RET]]12;13 %ret = call <2 x i8> @llvm.masked.load.v2i8(ptr %ptr1, i32 1, <2 x i1> %mask, <2 x i8> %passthru)14 store <2 x i8> zeroinitializer, ptr %ptr215 ret <2 x i8> %ret16}17 18; The load should not have !noalias.19define void @caller1(ptr %ptr1, ptr %ptr2) {20; CHECK-LABEL: @caller1(21; CHECK-NEXT: [[PASSTHRU:%.*]] = load <2 x i8>, ptr [[PTR2:%.*]], align 222; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META0:![0-9]+]])23; CHECK-NEXT: store <2 x i8> zeroinitializer, ptr [[PTR2]], align 2, !alias.scope [[META0]]24; CHECK-NEXT: ret void25;26 %passthru = load <2 x i8>, ptr %ptr227 call <2 x i8> @callee1(ptr %ptr1, ptr %ptr2, <2 x i1> zeroinitializer, <2 x i8> %passthru)28 ret void29}30 31define <2 x i8> @callee2(ptr %ptr1, ptr noalias %ptr2, <2 x i1> %mask) {32; CHECK-LABEL: @callee2(33; CHECK-NEXT: [[PASSTHRU:%.*]] = load <2 x i8>, ptr [[PTR2:%.*]], align 234; CHECK-NEXT: [[RET:%.*]] = call <2 x i8> @llvm.masked.load.v2i8.p0(ptr align 1 [[PTR1:%.*]], <2 x i1> [[MASK:%.*]], <2 x i8> [[PASSTHRU]])35; CHECK-NEXT: store <2 x i8> zeroinitializer, ptr [[PTR2]], align 236; CHECK-NEXT: ret <2 x i8> [[RET]]37;38 %passthru = load <2 x i8>, ptr %ptr239 %ret = call <2 x i8> @llvm.masked.load.v2i8(ptr %ptr1, i32 1, <2 x i1> %mask, <2 x i8> %passthru)40 store <2 x i8> zeroinitializer, ptr %ptr241 ret <2 x i8> %ret42}43 44; The load should not have !noalias.45define void @caller2(ptr %ptr1, ptr %ptr2) {46; CHECK-LABEL: @caller2(47; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])48; CHECK-NEXT: [[PASSTHRU_I:%.*]] = load <2 x i8>, ptr [[PTR2:%.*]], align 2, !alias.scope [[META3]]49; CHECK-NEXT: store <2 x i8> zeroinitializer, ptr [[PTR2]], align 2, !alias.scope [[META3]]50; CHECK-NEXT: ret void51;52 call <2 x i8> @callee2(ptr %ptr1, ptr %ptr2, <2 x i1> zeroinitializer)53 ret void54}55 56declare <2 x i8> @llvm.masked.load.v2i8(ptr, i32, <2 x i1>, <2 x i8>)57