diff --git a/llvm/test/Transforms/GVN/vp_gather_scatter.ll b/llvm/test/Transforms/GVN/vp_gather_scatter.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Transforms/GVN/vp_gather_scatter.ll @@ -0,0 +1,22 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt -gvn -S < %s | FileCheck %s + +; FIXME: We shouldn't delete the second vp.gather. +define @foo( %p, %x, %mask, i32 %vl) { +; CHECK-LABEL: @foo( +; CHECK-NEXT: [[A:%.*]] = call @llvm.vp.gather.nxv8i32.nxv8p0( [[P:%.*]], [[MASK:%.*]], i32 [[VL:%.*]]) +; CHECK-NEXT: [[B:%.*]] = call @llvm.vp.add.nxv8i32( [[A]], [[X:%.*]], [[MASK]], i32 [[VL]]) +; CHECK-NEXT: call void @llvm.vp.scatter.nxv8i32.nxv8p0( [[B]], [[P]], [[MASK]], i32 [[VL]]) +; CHECK-NEXT: ret [[A]] +; + %a = call @llvm.vp.gather.nxv8i32.nxv8p0( %p, %mask, i32 %vl) + %b = call @llvm.vp.add.nxv8i32( %a, %x, %mask, i32 %vl) + call void @llvm.vp.scatter.nxv8i32.nxv8p0( %b, %p, %mask, i32 %vl) + %c = call @llvm.vp.gather.nxv8i32.nxv8p0( %p, %mask, i32 %vl) + ret %c +} + +declare @llvm.vp.add.nxv8i32(, , , i32) +declare @llvm.vp.gather.nxv8i32.nxv8p0(, , i32) +declare void @llvm.vp.scatter.nxv8i32.nxv8p0(, , , i32) +