xref: /llvm-project/llvm/test/Transforms/GVN/vp_gather_scatter.ll (revision 0676acb6fd8d5e22fde16e6ec977ceac08427ab0)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes=gvn -S < %s | FileCheck %s
3
4; Make sure we don't delete the second vp.gather.
5define <vscale x 8 x i32> @foo(<vscale x 8 x ptr> %p, <vscale x 8 x i32> %x, <vscale x 8 x i1> %mask, i32 %vl) {
6; CHECK-LABEL: @foo(
7; CHECK-NEXT:    [[A:%.*]] = call <vscale x 8 x i32> @llvm.vp.gather.nxv8i32.nxv8p0(<vscale x 8 x ptr> [[P:%.*]], <vscale x 8 x i1> [[MASK:%.*]], i32 [[VL:%.*]])
8; CHECK-NEXT:    [[B:%.*]] = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> [[A]], <vscale x 8 x i32> [[X:%.*]], <vscale x 8 x i1> [[MASK]], i32 [[VL]])
9; CHECK-NEXT:    call void @llvm.vp.scatter.nxv8i32.nxv8p0(<vscale x 8 x i32> [[B]], <vscale x 8 x ptr> [[P]], <vscale x 8 x i1> [[MASK]], i32 [[VL]])
10; CHECK-NEXT:    [[C:%.*]] = call <vscale x 8 x i32> @llvm.vp.gather.nxv8i32.nxv8p0(<vscale x 8 x ptr> [[P]], <vscale x 8 x i1> [[MASK]], i32 [[VL]])
11; CHECK-NEXT:    ret <vscale x 8 x i32> [[C]]
12;
13  %a = call <vscale x 8 x i32> @llvm.vp.gather.nxv8i32.nxv8p0(<vscale x 8 x ptr> %p, <vscale x 8 x i1> %mask, i32 %vl)
14  %b = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %x, <vscale x 8 x i1> %mask, i32 %vl)
15  call void @llvm.vp.scatter.nxv8i32.nxv8p0(<vscale x 8 x i32> %b, <vscale x 8 x ptr> %p, <vscale x 8 x i1> %mask, i32 %vl)
16  %c = call <vscale x 8 x i32> @llvm.vp.gather.nxv8i32.nxv8p0(<vscale x 8 x ptr> %p, <vscale x 8 x i1> %mask, i32 %vl)
17  ret <vscale x 8 x i32> %c
18}
19
20declare <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
21declare <vscale x 8 x i32> @llvm.vp.gather.nxv8i32.nxv8p0(<vscale x 8 x ptr>, <vscale x 8 x i1>, i32)
22declare void @llvm.vp.scatter.nxv8i32.nxv8p0(<vscale x 8 x i32>, <vscale x 8 x ptr>, <vscale x 8 x i1>, i32)
23
24