; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 6 ; RUN: opt < %s -passes="print" 2>&1 -disable-output -S -mtriple=riscv64 -mattr=+v,+zvfhmin,+zvfbfmin | FileCheck %s define void @extractions() { ; CHECK-LABEL: 'extractions' ; CHECK-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %v16i8 = call i8 @llvm.experimental.vector.extract.last.active.v16i8(<16 x i8> poison, <16 x i1> poison, i8 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %v8i16 = call i16 @llvm.experimental.vector.extract.last.active.v8i16(<8 x i16> poison, <8 x i1> poison, i16 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %v4i32 = call i32 @llvm.experimental.vector.extract.last.active.v4i32(<4 x i32> poison, <4 x i1> poison, i32 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %v2i64 = call i64 @llvm.experimental.vector.extract.last.active.v2i64(<2 x i64> poison, <2 x i1> poison, i64 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %v8f16 = call half @llvm.experimental.vector.extract.last.active.v8f16(<8 x half> poison, <8 x i1> poison, half poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %v8bf16 = call bfloat @llvm.experimental.vector.extract.last.active.v8bf16(<8 x bfloat> poison, <8 x i1> poison, bfloat poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %v4f32 = call float @llvm.experimental.vector.extract.last.active.v4f32(<4 x float> poison, <4 x i1> poison, float poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %v2f64 = call double @llvm.experimental.vector.extract.last.active.v2f64(<2 x double> poison, <2 x i1> poison, double poison) ; CHECK-NEXT: Cost Model: Invalid cost for instruction: %nxv16i8 = call i8 @llvm.experimental.vector.extract.last.active.nxv16i8( poison, poison, i8 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 18 for instruction: %nxv8i16 = call i16 @llvm.experimental.vector.extract.last.active.nxv8i16( poison, poison, i16 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %nxv4i32 = call i32 @llvm.experimental.vector.extract.last.active.nxv4i32( poison, poison, i32 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %nxv2i64 = call i64 @llvm.experimental.vector.extract.last.active.nxv2i64( poison, poison, i64 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 18 for instruction: %nxv8f16 = call half @llvm.experimental.vector.extract.last.active.nxv8f16( poison, poison, half poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 18 for instruction: %nxv8bf16 = call bfloat @llvm.experimental.vector.extract.last.active.nxv8bf16( poison, poison, bfloat poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %nxv4f32 = call float @llvm.experimental.vector.extract.last.active.nxv4f32( poison, poison, float poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %nxv2f64 = call double @llvm.experimental.vector.extract.last.active.nxv2f64( poison, poison, double poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %v32i8 = call i8 @llvm.experimental.vector.extract.last.active.v32i8(<32 x i8> poison, <32 x i1> poison, i8 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %v16i16 = call i16 @llvm.experimental.vector.extract.last.active.v16i16(<16 x i16> poison, <16 x i1> poison, i16 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %v8i32 = call i32 @llvm.experimental.vector.extract.last.active.v8i32(<8 x i32> poison, <8 x i1> poison, i32 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %v4i64 = call i64 @llvm.experimental.vector.extract.last.active.v4i64(<4 x i64> poison, <4 x i1> poison, i64 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %v16f16 = call half @llvm.experimental.vector.extract.last.active.v16f16(<16 x half> poison, <16 x i1> poison, half poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %v16bf16 = call bfloat @llvm.experimental.vector.extract.last.active.v16bf16(<16 x bfloat> poison, <16 x i1> poison, bfloat poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %v8f32 = call float @llvm.experimental.vector.extract.last.active.v8f32(<8 x float> poison, <8 x i1> poison, float poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %v4f64 = call double @llvm.experimental.vector.extract.last.active.v4f64(<4 x double> poison, <4 x i1> poison, double poison) ; CHECK-NEXT: Cost Model: Invalid cost for instruction: %nxv32i8 = call i8 @llvm.experimental.vector.extract.last.active.nxv32i8( poison, poison, i8 poison) ; CHECK-NEXT: Cost Model: Invalid cost for instruction: %nxv16i16 = call i16 @llvm.experimental.vector.extract.last.active.nxv16i16( poison, poison, i16 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %nxv8i32 = call i32 @llvm.experimental.vector.extract.last.active.nxv8i32( poison, poison, i32 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 15 for instruction: %nxv4i64 = call i64 @llvm.experimental.vector.extract.last.active.nxv4i64( poison, poison, i64 poison) ; CHECK-NEXT: Cost Model: Invalid cost for instruction: %nxv16f16 = call half @llvm.experimental.vector.extract.last.active.nxv16f16( poison, poison, half poison) ; CHECK-NEXT: Cost Model: Invalid cost for instruction: %nxv16bf16 = call bfloat @llvm.experimental.vector.extract.last.active.nxv16bf16( poison, poison, bfloat poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %nxv8f32 = call float @llvm.experimental.vector.extract.last.active.nxv8f32( poison, poison, float poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 15 for instruction: %nxv4f64 = call double @llvm.experimental.vector.extract.last.active.nxv4f64( poison, poison, double poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %v8i8 = call i8 @llvm.experimental.vector.extract.last.active.v8i8(<8 x i8> poison, <8 x i1> poison, i8 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %v4i16 = call i16 @llvm.experimental.vector.extract.last.active.v4i16(<4 x i16> poison, <4 x i1> poison, i16 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %v2i32 = call i32 @llvm.experimental.vector.extract.last.active.v2i32(<2 x i32> poison, <2 x i1> poison, i32 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %v1i64 = call i64 @llvm.experimental.vector.extract.last.active.v1i64(<1 x i64> poison, <1 x i1> poison, i64 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %v4f16 = call half @llvm.experimental.vector.extract.last.active.v4f16(<4 x half> poison, <4 x i1> poison, half poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %v4bf16 = call bfloat @llvm.experimental.vector.extract.last.active.v4bf16(<4 x bfloat> poison, <4 x i1> poison, bfloat poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %v2f32 = call float @llvm.experimental.vector.extract.last.active.v2f32(<2 x float> poison, <2 x i1> poison, float poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %v1f64 = call double @llvm.experimental.vector.extract.last.active.v1f64(<1 x double> poison, <1 x i1> poison, double poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 17 for instruction: %nxv8i8 = call i8 @llvm.experimental.vector.extract.last.active.nxv8i8( poison, poison, i8 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %nxv4i16 = call i16 @llvm.experimental.vector.extract.last.active.nxv4i16( poison, poison, i16 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %nxv2i32 = call i32 @llvm.experimental.vector.extract.last.active.nxv2i32( poison, poison, i32 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %nxv1i64 = call i64 @llvm.experimental.vector.extract.last.active.nxv1i64( poison, poison, i64 poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %nxv4f16 = call half @llvm.experimental.vector.extract.last.active.nxv4f16( poison, poison, half poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %nxv4bf16 = call bfloat @llvm.experimental.vector.extract.last.active.nxv4bf16( poison, poison, bfloat poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %nxv2f32 = call float @llvm.experimental.vector.extract.last.active.nxv2f32( poison, poison, float poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %nxv1f64 = call double @llvm.experimental.vector.extract.last.active.nxv1f64( poison, poison, double poison) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void ; %v16i8 = call i8 @llvm.experimental.vector.extract.last.active.v16i8(<16 x i8> poison, <16 x i1> poison, i8 poison) %v8i16 = call i16 @llvm.experimental.vector.extract.last.active.v8i16(<8 x i16> poison, <8 x i1> poison, i16 poison) %v4i32 = call i32 @llvm.experimental.vector.extract.last.active.v4i32(<4 x i32> poison, <4 x i1> poison, i32 poison) %v2i64 = call i64 @llvm.experimental.vector.extract.last.active.v2i64(<2 x i64> poison, <2 x i1> poison, i64 poison) %v8f16 = call half @llvm.experimental.vector.extract.last.active.v8f16(<8 x half> poison, <8 x i1> poison, half poison) %v8bf16 = call bfloat @llvm.experimental.vector.extract.last.active.v8bf16(<8 x bfloat> poison, <8 x i1> poison, bfloat poison) %v4f32 = call float @llvm.experimental.vector.extract.last.active.v4f32(<4 x float> poison, <4 x i1> poison, float poison) %v2f64 = call double @llvm.experimental.vector.extract.last.active.v2f64(<2 x double> poison, <2 x i1> poison, double poison) %nxv16i8 = call i8 @llvm.experimental.vector.extract.last.active.nxv16i8( poison, poison, i8 poison) %nxv8i16 = call i16 @llvm.experimental.vector.extract.last.active.nxv8i16( poison, poison, i16 poison) %nxv4i32 = call i32 @llvm.experimental.vector.extract.last.active.nxv4i32( poison, poison, i32 poison) %nxv2i64 = call i64 @llvm.experimental.vector.extract.last.active.nxv2i64( poison, poison, i64 poison) %nxv8f16 = call half @llvm.experimental.vector.extract.last.active.nxv8f16( poison, poison, half poison) %nxv8bf16 = call bfloat @llvm.experimental.vector.extract.last.active.nxv8bf16( poison, poison, bfloat poison) %nxv4f32 = call float @llvm.experimental.vector.extract.last.active.nxv4f32( poison, poison, float poison) %nxv2f64 = call double @llvm.experimental.vector.extract.last.active.nxv2f64( poison, poison, double poison) %v32i8 = call i8 @llvm.experimental.vector.extract.last.active.v32i8(<32 x i8> poison, <32 x i1> poison, i8 poison) %v16i16 = call i16 @llvm.experimental.vector.extract.last.active.v16i16(<16 x i16> poison, <16 x i1> poison, i16 poison) %v8i32 = call i32 @llvm.experimental.vector.extract.last.active.v8i32(<8 x i32> poison, <8 x i1> poison, i32 poison) %v4i64 = call i64 @llvm.experimental.vector.extract.last.active.v4i64(<4 x i64> poison, <4 x i1> poison, i64 poison) %v16f16 = call half @llvm.experimental.vector.extract.last.active.v16f16(<16 x half> poison, <16 x i1> poison, half poison) %v16bf16 = call bfloat @llvm.experimental.vector.extract.last.active.v16bf16(<16 x bfloat> poison, <16 x i1> poison, bfloat poison) %v8f32 = call float @llvm.experimental.vector.extract.last.active.v8f32(<8 x float> poison, <8 x i1> poison, float poison) %v4f64 = call double @llvm.experimental.vector.extract.last.active.v4f64(<4 x double> poison, <4 x i1> poison, double poison) %nxv32i8 = call i8 @llvm.experimental.vector.extract.last.active.nxv32i8( poison, poison, i8 poison) %nxv16i16 = call i16 @llvm.experimental.vector.extract.last.active.nxv16i16( poison, poison, i16 poison) %nxv8i32 = call i32 @llvm.experimental.vector.extract.last.active.nxv8i32( poison, poison, i32 poison) %nxv4i64 = call i64 @llvm.experimental.vector.extract.last.active.nxv4i64( poison, poison, i64 poison) %nxv16f16 = call half @llvm.experimental.vector.extract.last.active.nxv16f16( poison, poison, half poison) %nxv16bf16 = call bfloat @llvm.experimental.vector.extract.last.active.nxv16bf16( poison, poison, bfloat poison) %nxv8f32 = call float @llvm.experimental.vector.extract.last.active.nxv8f32( poison, poison, float poison) %nxv4f64 = call double @llvm.experimental.vector.extract.last.active.nxv4f64( poison, poison, double poison) %v8i8 = call i8 @llvm.experimental.vector.extract.last.active.v8i8(<8 x i8> poison, <8 x i1> poison, i8 poison) %v4i16 = call i16 @llvm.experimental.vector.extract.last.active.v4i16(<4 x i16> poison, <4 x i1> poison, i16 poison) %v2i32 = call i32 @llvm.experimental.vector.extract.last.active.v2i32(<2 x i32> poison, <2 x i1> poison, i32 poison) %v1i64 = call i64 @llvm.experimental.vector.extract.last.active.v1i64(<1 x i64> poison, <1 x i1> poison, i64 poison) %v4f16 = call half @llvm.experimental.vector.extract.last.active.v4f16(<4 x half> poison, <4 x i1> poison, half poison) %v4bf16 = call bfloat @llvm.experimental.vector.extract.last.active.v4bf16(<4 x bfloat> poison, <4 x i1> poison, bfloat poison) %v2f32 = call float @llvm.experimental.vector.extract.last.active.v2f32(<2 x float> poison, <2 x i1> poison, float poison) %v1f64 = call double @llvm.experimental.vector.extract.last.active.v1f64(<1 x double> poison, <1 x i1> poison, double poison) %nxv8i8 = call i8 @llvm.experimental.vector.extract.last.active.nxv8i8( poison, poison, i8 poison) %nxv4i16 = call i16 @llvm.experimental.vector.extract.last.active.nxv4i16( poison, poison, i16 poison) %nxv2i32 = call i32 @llvm.experimental.vector.extract.last.active.nxv2i32( poison, poison, i32 poison) %nxv1i64 = call i64 @llvm.experimental.vector.extract.last.active.nxv1i64( poison, poison, i64 poison) %nxv4f16 = call half @llvm.experimental.vector.extract.last.active.nxv4f16( poison, poison, half poison) %nxv4bf16 = call bfloat @llvm.experimental.vector.extract.last.active.nxv4bf16( poison, poison, bfloat poison) %nxv2f32 = call float @llvm.experimental.vector.extract.last.active.nxv2f32( poison, poison, float poison) %nxv1f64 = call double @llvm.experimental.vector.extract.last.active.nxv1f64( poison, poison, double poison) ret void }