diff --git a/llvm/test/CodeGen/RISCV/rvv/strided-load-store.ll b/llvm/test/CodeGen/RISCV/rvv/strided-load-store.ll index fcb3742eb2363..e40a48f1b121d 100644 --- a/llvm/test/CodeGen/RISCV/rvv/strided-load-store.ll +++ b/llvm/test/CodeGen/RISCV/rvv/strided-load-store.ll @@ -129,6 +129,28 @@ define @straightline_offset_add(ptr %p, i64 %offset) { ret %x } +define @straightline_offset_disjoint_or(ptr %p, i64 %offset) { +; CHECK-LABEL: @straightline_offset_disjoint_or( +; CHECK-NEXT: [[STEP:%.*]] = call @llvm.experimental.stepvector.nxv1i64() +; CHECK-NEXT: [[STEP_SHL:%.*]] = shl [[STEP]], shufflevector ( insertelement ( poison, i64 1, i32 0), poison, zeroinitializer) +; CHECK-NEXT: [[OFFSETV:%.*]] = or disjoint [[STEP_SHL]], shufflevector ( insertelement ( poison, i64 1, i32 0), poison, zeroinitializer) +; CHECK-NEXT: [[PTRS:%.*]] = getelementptr i32, ptr [[P:%.*]], [[OFFSETV]] +; CHECK-NEXT: [[X:%.*]] = call @llvm.masked.gather.nxv1i64.nxv1p0( [[PTRS]], i32 8, shufflevector ( insertelement ( poison, i1 true, i64 0), poison, zeroinitializer), poison) +; CHECK-NEXT: ret [[X]] +; + %step = call @llvm.experimental.stepvector.nxv1i64() + %step.shl = shl %step, shufflevector ( insertelement ( poison, i64 1, i32 0), poison, zeroinitializer) + %offsetv = or disjoint %step.shl, shufflevector ( insertelement ( poison, i64 1, i32 0), poison, zeroinitializer) + %ptrs = getelementptr i32, ptr %p, %offsetv + %x = call @llvm.masked.gather.nxv1i64.nxv1p0( + %ptrs, + i32 8, + shufflevector ( insertelement ( poison, i1 true, i64 0), poison, zeroinitializer), + poison + ) + ret %x +} + define @straightline_offset_shl(ptr %p) { ; CHECK-LABEL: @straightline_offset_shl( ; CHECK-NEXT: [[X:%.*]] = call @llvm.riscv.masked.strided.load.nxv1i64.p0.i64( poison, ptr [[P:%.*]], i64 32, shufflevector ( insertelement ( poison, i1 true, i64 0), poison, zeroinitializer))