diff --git a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp --- a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp +++ b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp @@ -232,15 +232,21 @@ return BaseT::getGatherScatterOpCost(Opcode, DataTy, Ptr, VariableMask, Alignment, CostKind, I); - // FIXME: Only supporting fixed vectors for now. - if (!isa(DataTy)) - return BaseT::getGatherScatterOpCost(Opcode, DataTy, Ptr, VariableMask, - Alignment, CostKind, I); - - auto *VTy = cast(DataTy); - unsigned NumLoads = VTy->getNumElements(); - InstructionCost MemOpCost = - getMemoryOpCost(Opcode, VTy->getElementType(), Alignment, 0, CostKind, I); + // Cost is proportional to the number of memory operations implied. For + // scalable vectors, we use an upper bound on that number since we don't + // know exactly what VL will be. + auto &VTy = *cast(DataTy); + InstructionCost MemOpCost = getMemoryOpCost(Opcode, VTy.getElementType(), + Alignment, 0, CostKind, I); + if (isa(VTy)) { + const unsigned EltSize = VTy.getScalarSizeInBits(); + const unsigned MinSize = VTy.getPrimitiveSizeInBits().getKnownMinValue(); + const unsigned VectorBitsMax = ST->getRealMaxVLen(); + const unsigned MaxVLMAX = + RISCVTargetLowering::computeVLMAX(VectorBitsMax, EltSize, MinSize); + return MaxVLMAX * MemOpCost; + } + unsigned NumLoads = cast(VTy).getNumElements(); return NumLoads * MemOpCost; } diff --git a/llvm/test/Analysis/CostModel/RISCV/scalable-gather.ll b/llvm/test/Analysis/CostModel/RISCV/scalable-gather.ll --- a/llvm/test/Analysis/CostModel/RISCV/scalable-gather.ll +++ b/llvm/test/Analysis/CostModel/RISCV/scalable-gather.ll @@ -1,48 +1,128 @@ ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py -; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+experimental-zvfh < %s | FileCheck %s -; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+experimental-zvfh -riscv-v-vector-bits-max=256 < %s | FileCheck %s -; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 < %s | FileCheck %s +; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+experimental-zvfh < %s | FileCheck %s --check-prefixes=CHECK,GENERIC +; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+experimental-zvfh -riscv-v-vector-bits-max=256 < %s | FileCheck %s --check-prefixes=CHECK,MAX256 +; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 < %s | FileCheck %s --check-prefixes=CHECK,UNSUPPORTED define void @masked_gather_aligned() { -; CHECK-LABEL: 'masked_gather_aligned' -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V8F64 = call @llvm.masked.gather.nxv8f64.nxv8p0f64( undef, i32 8, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V4F64 = call @llvm.masked.gather.nxv4f64.nxv4p0f64( undef, i32 8, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V2F64 = call @llvm.masked.gather.nxv2f64.nxv2p0f64( undef, i32 8, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V1F64 = call @llvm.masked.gather.nxv1f64.nxv1p0f64( undef, i32 8, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V16F32 = call @llvm.masked.gather.nxv16f32.nxv16p0f32( undef, i32 4, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V8F32 = call @llvm.masked.gather.nxv8f32.nxv8p0f32( undef, i32 4, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V4F32 = call @llvm.masked.gather.nxv4f32.nxv4p0f32( undef, i32 4, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V2F32 = call @llvm.masked.gather.nxv2f32.nxv2p0f32( undef, i32 4, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V1F32 = call @llvm.masked.gather.nxv1f32.nxv1p0f32( undef, i32 4, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V32F16 = call @llvm.masked.gather.nxv32f16.nxv32p0f16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V16F16 = call @llvm.masked.gather.nxv16f16.nxv16p0f16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V8F16 = call @llvm.masked.gather.nxv8f16.nxv8p0f16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V4F16 = call @llvm.masked.gather.nxv4f16.nxv4p0f16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V2F16 = call @llvm.masked.gather.nxv2f16.nxv2p0f16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V1F16 = call @llvm.masked.gather.nxv1f16.nxv1p0f16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V8I64 = call @llvm.masked.gather.nxv8i64.nxv8p0i64( undef, i32 8, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V4I64 = call @llvm.masked.gather.nxv4i64.nxv4p0i64( undef, i32 8, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V2I64 = call @llvm.masked.gather.nxv2i64.nxv2p0i64( undef, i32 8, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V1I64 = call @llvm.masked.gather.nxv1i64.nxv1p0i64( undef, i32 8, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V16I32 = call @llvm.masked.gather.nxv16i32.nxv16p0i32( undef, i32 4, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V8I32 = call @llvm.masked.gather.nxv8i32.nxv8p0i32( undef, i32 4, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V4I32 = call @llvm.masked.gather.nxv4i32.nxv4p0i32( undef, i32 4, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V2I32 = call @llvm.masked.gather.nxv2i32.nxv2p0i32( undef, i32 4, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V1I32 = call @llvm.masked.gather.nxv1i32.nxv1p0i32( undef, i32 4, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V32I16 = call @llvm.masked.gather.nxv32i16.nxv32p0i16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V16I16 = call @llvm.masked.gather.nxv16i16.nxv16p0i16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V8I16 = call @llvm.masked.gather.nxv8i16.nxv8p0i16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V4I16 = call @llvm.masked.gather.nxv4i16.nxv4p0i16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V2I16 = call @llvm.masked.gather.nxv2i16.nxv2p0i16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V1I16 = call @llvm.masked.gather.nxv1i16.nxv1p0i16( undef, i32 2, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V64I8 = call @llvm.masked.gather.nxv64i8.nxv64p0i8( undef, i32 1, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V32I8 = call @llvm.masked.gather.nxv32i8.nxv32p0i8( undef, i32 1, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V16I8 = call @llvm.masked.gather.nxv16i8.nxv16p0i8( undef, i32 1, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V8I8 = call @llvm.masked.gather.nxv8i8.nxv8p0i8( undef, i32 1, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V4I8 = call @llvm.masked.gather.nxv4i8.nxv4p0i8( undef, i32 1, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V2I8 = call @llvm.masked.gather.nxv2i8.nxv2p0i8( undef, i32 1, undef, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: %V1I8 = call @llvm.masked.gather.nxv1i8.nxv1p0i8( undef, i32 1, undef, undef) -; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void +; GENERIC-LABEL: 'masked_gather_aligned' +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: %V8F64 = call @llvm.masked.gather.nxv8f64.nxv8p0f64( undef, i32 8, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: %V4F64 = call @llvm.masked.gather.nxv4f64.nxv4p0f64( undef, i32 8, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: %V2F64 = call @llvm.masked.gather.nxv2f64.nxv2p0f64( undef, i32 8, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: %V1F64 = call @llvm.masked.gather.nxv1f64.nxv1p0f64( undef, i32 8, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 16384 for instruction: %V16F32 = call @llvm.masked.gather.nxv16f32.nxv16p0f32( undef, i32 4, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: %V8F32 = call @llvm.masked.gather.nxv8f32.nxv8p0f32( undef, i32 4, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: %V4F32 = call @llvm.masked.gather.nxv4f32.nxv4p0f32( undef, i32 4, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: %V2F32 = call @llvm.masked.gather.nxv2f32.nxv2p0f32( undef, i32 4, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: %V1F32 = call @llvm.masked.gather.nxv1f32.nxv1p0f32( undef, i32 4, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 32768 for instruction: %V32F16 = call @llvm.masked.gather.nxv32f16.nxv32p0f16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 16384 for instruction: %V16F16 = call @llvm.masked.gather.nxv16f16.nxv16p0f16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: %V8F16 = call @llvm.masked.gather.nxv8f16.nxv8p0f16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: %V4F16 = call @llvm.masked.gather.nxv4f16.nxv4p0f16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: %V2F16 = call @llvm.masked.gather.nxv2f16.nxv2p0f16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: %V1F16 = call @llvm.masked.gather.nxv1f16.nxv1p0f16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: %V8I64 = call @llvm.masked.gather.nxv8i64.nxv8p0i64( undef, i32 8, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: %V4I64 = call @llvm.masked.gather.nxv4i64.nxv4p0i64( undef, i32 8, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: %V2I64 = call @llvm.masked.gather.nxv2i64.nxv2p0i64( undef, i32 8, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: %V1I64 = call @llvm.masked.gather.nxv1i64.nxv1p0i64( undef, i32 8, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 16384 for instruction: %V16I32 = call @llvm.masked.gather.nxv16i32.nxv16p0i32( undef, i32 4, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: %V8I32 = call @llvm.masked.gather.nxv8i32.nxv8p0i32( undef, i32 4, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: %V4I32 = call @llvm.masked.gather.nxv4i32.nxv4p0i32( undef, i32 4, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: %V2I32 = call @llvm.masked.gather.nxv2i32.nxv2p0i32( undef, i32 4, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: %V1I32 = call @llvm.masked.gather.nxv1i32.nxv1p0i32( undef, i32 4, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 32768 for instruction: %V32I16 = call @llvm.masked.gather.nxv32i16.nxv32p0i16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 16384 for instruction: %V16I16 = call @llvm.masked.gather.nxv16i16.nxv16p0i16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: %V8I16 = call @llvm.masked.gather.nxv8i16.nxv8p0i16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: %V4I16 = call @llvm.masked.gather.nxv4i16.nxv4p0i16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: %V2I16 = call @llvm.masked.gather.nxv2i16.nxv2p0i16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: %V1I16 = call @llvm.masked.gather.nxv1i16.nxv1p0i16( undef, i32 2, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 65536 for instruction: %V64I8 = call @llvm.masked.gather.nxv64i8.nxv64p0i8( undef, i32 1, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 32768 for instruction: %V32I8 = call @llvm.masked.gather.nxv32i8.nxv32p0i8( undef, i32 1, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 16384 for instruction: %V16I8 = call @llvm.masked.gather.nxv16i8.nxv16p0i8( undef, i32 1, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: %V8I8 = call @llvm.masked.gather.nxv8i8.nxv8p0i8( undef, i32 1, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: %V4I8 = call @llvm.masked.gather.nxv4i8.nxv4p0i8( undef, i32 1, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: %V2I8 = call @llvm.masked.gather.nxv2i8.nxv2p0i8( undef, i32 1, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: %V1I8 = call @llvm.masked.gather.nxv1i8.nxv1p0i8( undef, i32 1, undef, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void +; +; MAX256-LABEL: 'masked_gather_aligned' +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: %V8F64 = call @llvm.masked.gather.nxv8f64.nxv8p0f64( undef, i32 8, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %V4F64 = call @llvm.masked.gather.nxv4f64.nxv4p0f64( undef, i32 8, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %V2F64 = call @llvm.masked.gather.nxv2f64.nxv2p0f64( undef, i32 8, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V1F64 = call @llvm.masked.gather.nxv1f64.nxv1p0f64( undef, i32 8, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 64 for instruction: %V16F32 = call @llvm.masked.gather.nxv16f32.nxv16p0f32( undef, i32 4, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: %V8F32 = call @llvm.masked.gather.nxv8f32.nxv8p0f32( undef, i32 4, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %V4F32 = call @llvm.masked.gather.nxv4f32.nxv4p0f32( undef, i32 4, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %V2F32 = call @llvm.masked.gather.nxv2f32.nxv2p0f32( undef, i32 4, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V1F32 = call @llvm.masked.gather.nxv1f32.nxv1p0f32( undef, i32 4, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 128 for instruction: %V32F16 = call @llvm.masked.gather.nxv32f16.nxv32p0f16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 64 for instruction: %V16F16 = call @llvm.masked.gather.nxv16f16.nxv16p0f16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: %V8F16 = call @llvm.masked.gather.nxv8f16.nxv8p0f16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %V4F16 = call @llvm.masked.gather.nxv4f16.nxv4p0f16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %V2F16 = call @llvm.masked.gather.nxv2f16.nxv2p0f16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V1F16 = call @llvm.masked.gather.nxv1f16.nxv1p0f16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: %V8I64 = call @llvm.masked.gather.nxv8i64.nxv8p0i64( undef, i32 8, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %V4I64 = call @llvm.masked.gather.nxv4i64.nxv4p0i64( undef, i32 8, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %V2I64 = call @llvm.masked.gather.nxv2i64.nxv2p0i64( undef, i32 8, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V1I64 = call @llvm.masked.gather.nxv1i64.nxv1p0i64( undef, i32 8, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 64 for instruction: %V16I32 = call @llvm.masked.gather.nxv16i32.nxv16p0i32( undef, i32 4, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: %V8I32 = call @llvm.masked.gather.nxv8i32.nxv8p0i32( undef, i32 4, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %V4I32 = call @llvm.masked.gather.nxv4i32.nxv4p0i32( undef, i32 4, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %V2I32 = call @llvm.masked.gather.nxv2i32.nxv2p0i32( undef, i32 4, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V1I32 = call @llvm.masked.gather.nxv1i32.nxv1p0i32( undef, i32 4, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 128 for instruction: %V32I16 = call @llvm.masked.gather.nxv32i16.nxv32p0i16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 64 for instruction: %V16I16 = call @llvm.masked.gather.nxv16i16.nxv16p0i16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: %V8I16 = call @llvm.masked.gather.nxv8i16.nxv8p0i16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %V4I16 = call @llvm.masked.gather.nxv4i16.nxv4p0i16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %V2I16 = call @llvm.masked.gather.nxv2i16.nxv2p0i16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V1I16 = call @llvm.masked.gather.nxv1i16.nxv1p0i16( undef, i32 2, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 256 for instruction: %V64I8 = call @llvm.masked.gather.nxv64i8.nxv64p0i8( undef, i32 1, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 128 for instruction: %V32I8 = call @llvm.masked.gather.nxv32i8.nxv32p0i8( undef, i32 1, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 64 for instruction: %V16I8 = call @llvm.masked.gather.nxv16i8.nxv16p0i8( undef, i32 1, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: %V8I8 = call @llvm.masked.gather.nxv8i8.nxv8p0i8( undef, i32 1, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %V4I8 = call @llvm.masked.gather.nxv4i8.nxv4p0i8( undef, i32 1, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %V2I8 = call @llvm.masked.gather.nxv2i8.nxv2p0i8( undef, i32 1, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V1I8 = call @llvm.masked.gather.nxv1i8.nxv1p0i8( undef, i32 1, undef, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void +; +; UNSUPPORTED-LABEL: 'masked_gather_aligned' +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V8F64 = call @llvm.masked.gather.nxv8f64.nxv8p0f64( undef, i32 8, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V4F64 = call @llvm.masked.gather.nxv4f64.nxv4p0f64( undef, i32 8, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V2F64 = call @llvm.masked.gather.nxv2f64.nxv2p0f64( undef, i32 8, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V1F64 = call @llvm.masked.gather.nxv1f64.nxv1p0f64( undef, i32 8, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V16F32 = call @llvm.masked.gather.nxv16f32.nxv16p0f32( undef, i32 4, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V8F32 = call @llvm.masked.gather.nxv8f32.nxv8p0f32( undef, i32 4, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V4F32 = call @llvm.masked.gather.nxv4f32.nxv4p0f32( undef, i32 4, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V2F32 = call @llvm.masked.gather.nxv2f32.nxv2p0f32( undef, i32 4, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V1F32 = call @llvm.masked.gather.nxv1f32.nxv1p0f32( undef, i32 4, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V32F16 = call @llvm.masked.gather.nxv32f16.nxv32p0f16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V16F16 = call @llvm.masked.gather.nxv16f16.nxv16p0f16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V8F16 = call @llvm.masked.gather.nxv8f16.nxv8p0f16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V4F16 = call @llvm.masked.gather.nxv4f16.nxv4p0f16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V2F16 = call @llvm.masked.gather.nxv2f16.nxv2p0f16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V1F16 = call @llvm.masked.gather.nxv1f16.nxv1p0f16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V8I64 = call @llvm.masked.gather.nxv8i64.nxv8p0i64( undef, i32 8, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V4I64 = call @llvm.masked.gather.nxv4i64.nxv4p0i64( undef, i32 8, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V2I64 = call @llvm.masked.gather.nxv2i64.nxv2p0i64( undef, i32 8, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V1I64 = call @llvm.masked.gather.nxv1i64.nxv1p0i64( undef, i32 8, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V16I32 = call @llvm.masked.gather.nxv16i32.nxv16p0i32( undef, i32 4, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V8I32 = call @llvm.masked.gather.nxv8i32.nxv8p0i32( undef, i32 4, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V4I32 = call @llvm.masked.gather.nxv4i32.nxv4p0i32( undef, i32 4, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V2I32 = call @llvm.masked.gather.nxv2i32.nxv2p0i32( undef, i32 4, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V1I32 = call @llvm.masked.gather.nxv1i32.nxv1p0i32( undef, i32 4, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V32I16 = call @llvm.masked.gather.nxv32i16.nxv32p0i16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V16I16 = call @llvm.masked.gather.nxv16i16.nxv16p0i16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V8I16 = call @llvm.masked.gather.nxv8i16.nxv8p0i16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V4I16 = call @llvm.masked.gather.nxv4i16.nxv4p0i16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V2I16 = call @llvm.masked.gather.nxv2i16.nxv2p0i16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V1I16 = call @llvm.masked.gather.nxv1i16.nxv1p0i16( undef, i32 2, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V64I8 = call @llvm.masked.gather.nxv64i8.nxv64p0i8( undef, i32 1, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V32I8 = call @llvm.masked.gather.nxv32i8.nxv32p0i8( undef, i32 1, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V16I8 = call @llvm.masked.gather.nxv16i8.nxv16p0i8( undef, i32 1, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V8I8 = call @llvm.masked.gather.nxv8i8.nxv8p0i8( undef, i32 1, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V4I8 = call @llvm.masked.gather.nxv4i8.nxv4p0i8( undef, i32 1, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V2I8 = call @llvm.masked.gather.nxv2i8.nxv2p0i8( undef, i32 1, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: %V1I8 = call @llvm.masked.gather.nxv1i8.nxv1p0i8( undef, i32 1, undef, undef) +; UNSUPPORTED-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void ; %V8F64 = call @llvm.masked.gather.nxv8f64.nxv8p0f64( undef, i32 8, undef, undef) %V4F64 = call @llvm.masked.gather.nxv4f64.nxv4p0f64( undef, i32 8, undef, undef) diff --git a/llvm/test/Analysis/CostModel/RISCV/scalable-scatter.ll b/llvm/test/Analysis/CostModel/RISCV/scalable-scatter.ll --- a/llvm/test/Analysis/CostModel/RISCV/scalable-scatter.ll +++ b/llvm/test/Analysis/CostModel/RISCV/scalable-scatter.ll @@ -1,48 +1,128 @@ ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py -; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+experimental-zvfh < %s | FileCheck %s -; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+experimental-zvfh -riscv-v-vector-bits-max=256 < %s | FileCheck %s -; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 < %s | FileCheck %s +; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+experimental-zvfh < %s | FileCheck %s --check-prefixes=CHECK,GENERIC +; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+experimental-zvfh -riscv-v-vector-bits-max=256 < %s | FileCheck %s --check-prefixes=CHECK,MAX256 +; RUN: opt -passes='print' 2>&1 -disable-output -mtriple=riscv64 < %s | FileCheck %s --check-prefixes=CHECK,UNSUPPORTED define void @masked_scatter_aligned() { -; CHECK-LABEL: 'masked_scatter_aligned' -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8f64.nxv8p0f64( undef, undef, i32 8, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4f64.nxv4p0f64( undef, undef, i32 8, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2f64.nxv2p0f64( undef, undef, i32 8, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1f64.nxv1p0f64( undef, undef, i32 8, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv16f32.nxv16p0f32( undef, undef, i32 4, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8f32.nxv8p0f32( undef, undef, i32 4, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4f32.nxv4p0f32( undef, undef, i32 4, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2f32.nxv2p0f32( undef, undef, i32 4, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1f32.nxv1p0f32( undef, undef, i32 4, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv32f16.nxv32p0f16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv16f16.nxv16p0f16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8f16.nxv8p0f16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4f16.nxv4p0f16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2f16.nxv2p0f16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1f16.nxv1p0f16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8i64.nxv8p0i64( undef, undef, i32 8, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4i64.nxv4p0i64( undef, undef, i32 8, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2i64.nxv2p0i64( undef, undef, i32 8, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1i64.nxv1p0i64( undef, undef, i32 8, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv16i32.nxv16p0i32( undef, undef, i32 4, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8i32.nxv8p0i32( undef, undef, i32 4, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4i32.nxv4p0i32( undef, undef, i32 4, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2i32.nxv2p0i32( undef, undef, i32 4, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1i32.nxv1p0i32( undef, undef, i32 4, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv32i16.nxv32p0i16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv16i16.nxv16p0i16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8i16.nxv8p0i16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4i16.nxv4p0i16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2i16.nxv2p0i16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1i16.nxv1p0i16( undef, undef, i32 2, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv64i8.nxv64p0i8( undef, undef, i32 1, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv32i8.nxv32p0i8( undef, undef, i32 1, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv16i8.nxv16p0i8( undef, undef, i32 1, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8i8.nxv8p0i8( undef, undef, i32 1, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4i8.nxv4p0i8( undef, undef, i32 1, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2i8.nxv2p0i8( undef, undef, i32 1, undef) -; CHECK-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1i8.nxv1p0i8( undef, undef, i32 1, undef) -; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void +; GENERIC-LABEL: 'masked_scatter_aligned' +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: call void @llvm.masked.scatter.nxv8f64.nxv8p0f64( undef, undef, i32 8, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: call void @llvm.masked.scatter.nxv4f64.nxv4p0f64( undef, undef, i32 8, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: call void @llvm.masked.scatter.nxv2f64.nxv2p0f64( undef, undef, i32 8, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: call void @llvm.masked.scatter.nxv1f64.nxv1p0f64( undef, undef, i32 8, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 16384 for instruction: call void @llvm.masked.scatter.nxv16f32.nxv16p0f32( undef, undef, i32 4, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: call void @llvm.masked.scatter.nxv8f32.nxv8p0f32( undef, undef, i32 4, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: call void @llvm.masked.scatter.nxv4f32.nxv4p0f32( undef, undef, i32 4, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: call void @llvm.masked.scatter.nxv2f32.nxv2p0f32( undef, undef, i32 4, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: call void @llvm.masked.scatter.nxv1f32.nxv1p0f32( undef, undef, i32 4, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 32768 for instruction: call void @llvm.masked.scatter.nxv32f16.nxv32p0f16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 16384 for instruction: call void @llvm.masked.scatter.nxv16f16.nxv16p0f16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: call void @llvm.masked.scatter.nxv8f16.nxv8p0f16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: call void @llvm.masked.scatter.nxv4f16.nxv4p0f16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: call void @llvm.masked.scatter.nxv2f16.nxv2p0f16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: call void @llvm.masked.scatter.nxv1f16.nxv1p0f16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: call void @llvm.masked.scatter.nxv8i64.nxv8p0i64( undef, undef, i32 8, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: call void @llvm.masked.scatter.nxv4i64.nxv4p0i64( undef, undef, i32 8, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: call void @llvm.masked.scatter.nxv2i64.nxv2p0i64( undef, undef, i32 8, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: call void @llvm.masked.scatter.nxv1i64.nxv1p0i64( undef, undef, i32 8, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 16384 for instruction: call void @llvm.masked.scatter.nxv16i32.nxv16p0i32( undef, undef, i32 4, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: call void @llvm.masked.scatter.nxv8i32.nxv8p0i32( undef, undef, i32 4, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: call void @llvm.masked.scatter.nxv4i32.nxv4p0i32( undef, undef, i32 4, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: call void @llvm.masked.scatter.nxv2i32.nxv2p0i32( undef, undef, i32 4, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: call void @llvm.masked.scatter.nxv1i32.nxv1p0i32( undef, undef, i32 4, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 32768 for instruction: call void @llvm.masked.scatter.nxv32i16.nxv32p0i16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 16384 for instruction: call void @llvm.masked.scatter.nxv16i16.nxv16p0i16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: call void @llvm.masked.scatter.nxv8i16.nxv8p0i16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: call void @llvm.masked.scatter.nxv4i16.nxv4p0i16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: call void @llvm.masked.scatter.nxv2i16.nxv2p0i16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: call void @llvm.masked.scatter.nxv1i16.nxv1p0i16( undef, undef, i32 2, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 65536 for instruction: call void @llvm.masked.scatter.nxv64i8.nxv64p0i8( undef, undef, i32 1, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 32768 for instruction: call void @llvm.masked.scatter.nxv32i8.nxv32p0i8( undef, undef, i32 1, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 16384 for instruction: call void @llvm.masked.scatter.nxv16i8.nxv16p0i8( undef, undef, i32 1, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 8192 for instruction: call void @llvm.masked.scatter.nxv8i8.nxv8p0i8( undef, undef, i32 1, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 4096 for instruction: call void @llvm.masked.scatter.nxv4i8.nxv4p0i8( undef, undef, i32 1, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 2048 for instruction: call void @llvm.masked.scatter.nxv2i8.nxv2p0i8( undef, undef, i32 1, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1024 for instruction: call void @llvm.masked.scatter.nxv1i8.nxv1p0i8( undef, undef, i32 1, undef) +; GENERIC-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void +; +; MAX256-LABEL: 'masked_scatter_aligned' +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: call void @llvm.masked.scatter.nxv8f64.nxv8p0f64( undef, undef, i32 8, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: call void @llvm.masked.scatter.nxv4f64.nxv4p0f64( undef, undef, i32 8, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.scatter.nxv2f64.nxv2p0f64( undef, undef, i32 8, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: call void @llvm.masked.scatter.nxv1f64.nxv1p0f64( undef, undef, i32 8, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 64 for instruction: call void @llvm.masked.scatter.nxv16f32.nxv16p0f32( undef, undef, i32 4, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: call void @llvm.masked.scatter.nxv8f32.nxv8p0f32( undef, undef, i32 4, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: call void @llvm.masked.scatter.nxv4f32.nxv4p0f32( undef, undef, i32 4, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.scatter.nxv2f32.nxv2p0f32( undef, undef, i32 4, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: call void @llvm.masked.scatter.nxv1f32.nxv1p0f32( undef, undef, i32 4, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 128 for instruction: call void @llvm.masked.scatter.nxv32f16.nxv32p0f16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 64 for instruction: call void @llvm.masked.scatter.nxv16f16.nxv16p0f16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: call void @llvm.masked.scatter.nxv8f16.nxv8p0f16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: call void @llvm.masked.scatter.nxv4f16.nxv4p0f16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.scatter.nxv2f16.nxv2p0f16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: call void @llvm.masked.scatter.nxv1f16.nxv1p0f16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: call void @llvm.masked.scatter.nxv8i64.nxv8p0i64( undef, undef, i32 8, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: call void @llvm.masked.scatter.nxv4i64.nxv4p0i64( undef, undef, i32 8, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.scatter.nxv2i64.nxv2p0i64( undef, undef, i32 8, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: call void @llvm.masked.scatter.nxv1i64.nxv1p0i64( undef, undef, i32 8, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 64 for instruction: call void @llvm.masked.scatter.nxv16i32.nxv16p0i32( undef, undef, i32 4, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: call void @llvm.masked.scatter.nxv8i32.nxv8p0i32( undef, undef, i32 4, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: call void @llvm.masked.scatter.nxv4i32.nxv4p0i32( undef, undef, i32 4, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.scatter.nxv2i32.nxv2p0i32( undef, undef, i32 4, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: call void @llvm.masked.scatter.nxv1i32.nxv1p0i32( undef, undef, i32 4, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 128 for instruction: call void @llvm.masked.scatter.nxv32i16.nxv32p0i16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 64 for instruction: call void @llvm.masked.scatter.nxv16i16.nxv16p0i16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: call void @llvm.masked.scatter.nxv8i16.nxv8p0i16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: call void @llvm.masked.scatter.nxv4i16.nxv4p0i16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.scatter.nxv2i16.nxv2p0i16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: call void @llvm.masked.scatter.nxv1i16.nxv1p0i16( undef, undef, i32 2, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 256 for instruction: call void @llvm.masked.scatter.nxv64i8.nxv64p0i8( undef, undef, i32 1, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 128 for instruction: call void @llvm.masked.scatter.nxv32i8.nxv32p0i8( undef, undef, i32 1, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 64 for instruction: call void @llvm.masked.scatter.nxv16i8.nxv16p0i8( undef, undef, i32 1, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 32 for instruction: call void @llvm.masked.scatter.nxv8i8.nxv8p0i8( undef, undef, i32 1, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 16 for instruction: call void @llvm.masked.scatter.nxv4i8.nxv4p0i8( undef, undef, i32 1, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.scatter.nxv2i8.nxv2p0i8( undef, undef, i32 1, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 4 for instruction: call void @llvm.masked.scatter.nxv1i8.nxv1p0i8( undef, undef, i32 1, undef) +; MAX256-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void +; +; UNSUPPORTED-LABEL: 'masked_scatter_aligned' +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8f64.nxv8p0f64( undef, undef, i32 8, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4f64.nxv4p0f64( undef, undef, i32 8, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2f64.nxv2p0f64( undef, undef, i32 8, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1f64.nxv1p0f64( undef, undef, i32 8, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv16f32.nxv16p0f32( undef, undef, i32 4, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8f32.nxv8p0f32( undef, undef, i32 4, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4f32.nxv4p0f32( undef, undef, i32 4, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2f32.nxv2p0f32( undef, undef, i32 4, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1f32.nxv1p0f32( undef, undef, i32 4, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv32f16.nxv32p0f16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv16f16.nxv16p0f16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8f16.nxv8p0f16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4f16.nxv4p0f16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2f16.nxv2p0f16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1f16.nxv1p0f16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8i64.nxv8p0i64( undef, undef, i32 8, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4i64.nxv4p0i64( undef, undef, i32 8, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2i64.nxv2p0i64( undef, undef, i32 8, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1i64.nxv1p0i64( undef, undef, i32 8, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv16i32.nxv16p0i32( undef, undef, i32 4, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8i32.nxv8p0i32( undef, undef, i32 4, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4i32.nxv4p0i32( undef, undef, i32 4, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2i32.nxv2p0i32( undef, undef, i32 4, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1i32.nxv1p0i32( undef, undef, i32 4, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv32i16.nxv32p0i16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv16i16.nxv16p0i16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8i16.nxv8p0i16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4i16.nxv4p0i16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2i16.nxv2p0i16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1i16.nxv1p0i16( undef, undef, i32 2, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv64i8.nxv64p0i8( undef, undef, i32 1, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv32i8.nxv32p0i8( undef, undef, i32 1, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv16i8.nxv16p0i8( undef, undef, i32 1, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv8i8.nxv8p0i8( undef, undef, i32 1, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv4i8.nxv4p0i8( undef, undef, i32 1, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv2i8.nxv2p0i8( undef, undef, i32 1, undef) +; UNSUPPORTED-NEXT: Cost Model: Invalid cost for instruction: call void @llvm.masked.scatter.nxv1i8.nxv1p0i8( undef, undef, i32 1, undef) +; UNSUPPORTED-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void ; call void @llvm.masked.scatter.nxv8f64.nxv8p0f64( undef, undef, i32 8, undef) call void @llvm.masked.scatter.nxv4f64.nxv4p0f64( undef, undef, i32 8, undef)