; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 4 ; RUN: opt -passes="print" 2>&1 -disable-output -mtriple=riscv64 -mattr=+v < %s | FileCheck %s ; RUN: opt -passes="print" 2>&1 -disable-output -mtriple=riscv64 -mattr=+v -cost-kind=code-size < %s | FileCheck %s --check-prefix=SIZE define void @vector_extract_nxv128i8_0( %v) { ; CHECK-LABEL: 'vector_extract_nxv128i8_0' ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf8 = call @llvm.vector.extract.nxv1i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf4 = call @llvm.vector.extract.nxv2i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf2 = call @llvm.vector.extract.nxv4i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m1 = call @llvm.vector.extract.nxv8i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m2 = call @llvm.vector.extract.nxv16i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m4 = call @llvm.vector.extract.nxv32i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m8 = call @llvm.vector.extract.nxv64i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m8 = call <128 x i8> @llvm.vector.extract.v128i8.nxv128i8( %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void ; ; SIZE-LABEL: 'vector_extract_nxv128i8_0' ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf8 = call @llvm.vector.extract.nxv1i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf4 = call @llvm.vector.extract.nxv2i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf2 = call @llvm.vector.extract.nxv4i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m1 = call @llvm.vector.extract.nxv8i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m2 = call @llvm.vector.extract.nxv16i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m4 = call @llvm.vector.extract.nxv32i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m8 = call @llvm.vector.extract.nxv64i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m8 = call <128 x i8> @llvm.vector.extract.v128i8.nxv128i8( %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void ; %scalable_mf8 = call @llvm.vector.extract.nxv1i8.nxv128i8( %v, i64 0) %scalable_mf4 = call @llvm.vector.extract.nxv2i8.nxv128i8( %v, i64 0) %scalable_mf2 = call @llvm.vector.extract.nxv4i8.nxv128i8( %v, i64 0) %scalable_m1 = call @llvm.vector.extract.nxv8i8.nxv128i8( %v, i64 0) %scalable_m2 = call @llvm.vector.extract.nxv16i8.nxv128i8( %v, i64 0) %scalable_m4 = call @llvm.vector.extract.nxv32i8.nxv128i8( %v, i64 0) %scalable_m8 = call @llvm.vector.extract.nxv64i8.nxv128i8( %v, i64 0) %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.nxv128i8( %v, i64 0) %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.nxv128i8( %v, i64 0) %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.nxv128i8( %v, i64 0) %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.nxv128i8( %v, i64 0) %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.nxv128i8( %v, i64 0) %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.nxv128i8( %v, i64 0) %fixed_m8 = call <128 x i8> @llvm.vector.extract.v128i8.nxv128i8( %v, i64 0) ret void } define void @vector_extract_nxv128i8_1( %v) { ; CHECK-LABEL: 'vector_extract_nxv128i8_1' ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf8 = call @llvm.vector.extract.nxv1i8.nxv128i8( %v, i64 1) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf4 = call @llvm.vector.extract.nxv2i8.nxv128i8( %v, i64 2) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf2 = call @llvm.vector.extract.nxv4i8.nxv128i8( %v, i64 4) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m1 = call @llvm.vector.extract.nxv8i8.nxv128i8( %v, i64 8) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m2 = call @llvm.vector.extract.nxv16i8.nxv128i8( %v, i64 16) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m4 = call @llvm.vector.extract.nxv32i8.nxv128i8( %v, i64 32) ; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m8 = call @llvm.vector.extract.nxv64i8.nxv128i8( %v, i64 64) ; CHECK-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.nxv128i8( %v, i64 2) ; CHECK-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.nxv128i8( %v, i64 4) ; CHECK-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.nxv128i8( %v, i64 8) ; CHECK-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.nxv128i8( %v, i64 16) ; CHECK-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.nxv128i8( %v, i64 32) ; CHECK-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.nxv128i8( %v, i64 64) ; CHECK-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %fixed_m8 = call <128 x i8> @llvm.vector.extract.v128i8.nxv128i8( %v, i64 128) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void ; ; SIZE-LABEL: 'vector_extract_nxv128i8_1' ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf8 = call @llvm.vector.extract.nxv1i8.nxv128i8( %v, i64 1) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf4 = call @llvm.vector.extract.nxv2i8.nxv128i8( %v, i64 2) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_mf2 = call @llvm.vector.extract.nxv4i8.nxv128i8( %v, i64 4) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m1 = call @llvm.vector.extract.nxv8i8.nxv128i8( %v, i64 8) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m2 = call @llvm.vector.extract.nxv16i8.nxv128i8( %v, i64 16) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m4 = call @llvm.vector.extract.nxv32i8.nxv128i8( %v, i64 32) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %scalable_m8 = call @llvm.vector.extract.nxv64i8.nxv128i8( %v, i64 64) ; SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.nxv128i8( %v, i64 2) ; SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.nxv128i8( %v, i64 4) ; SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.nxv128i8( %v, i64 8) ; SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.nxv128i8( %v, i64 16) ; SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.nxv128i8( %v, i64 32) ; SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.nxv128i8( %v, i64 64) ; SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %fixed_m8 = call <128 x i8> @llvm.vector.extract.v128i8.nxv128i8( %v, i64 128) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void ; %scalable_mf8 = call @llvm.vector.extract.nxv1i8.nxv128i8( %v, i64 1) %scalable_mf4 = call @llvm.vector.extract.nxv2i8.nxv128i8( %v, i64 2) %scalable_mf2 = call @llvm.vector.extract.nxv4i8.nxv128i8( %v, i64 4) %scalable_m1 = call @llvm.vector.extract.nxv8i8.nxv128i8( %v, i64 8) %scalable_m2 = call @llvm.vector.extract.nxv16i8.nxv128i8( %v, i64 16) %scalable_m4 = call @llvm.vector.extract.nxv32i8.nxv128i8( %v, i64 32) %scalable_m8 = call @llvm.vector.extract.nxv64i8.nxv128i8( %v, i64 64) %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.nxv128i8( %v, i64 2) %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.nxv128i8( %v, i64 4) %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.nxv128i8( %v, i64 8) %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.nxv128i8( %v, i64 16) %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.nxv128i8( %v, i64 32) %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.nxv128i8( %v, i64 64) %fixed_m8 = call <128 x i8> @llvm.vector.extract.v128i8.nxv128i8( %v, i64 128) ret void } define void @vector_extract_v128i8_0(<128 x i8> %v) { ; CHECK-LABEL: 'vector_extract_v128i8_0' ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.v128i8(<128 x i8> %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.v128i8(<128 x i8> %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.v128i8(<128 x i8> %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.v128i8(<128 x i8> %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.v128i8(<128 x i8> %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.v128i8(<128 x i8> %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m8 = call <128 x i8> @llvm.vector.extract.v128i8.v128i8(<128 x i8> %v, i64 0) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void ; ; SIZE-LABEL: 'vector_extract_v128i8_0' ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.v128i8(<128 x i8> %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.v128i8(<128 x i8> %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.v128i8(<128 x i8> %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.v128i8(<128 x i8> %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.v128i8(<128 x i8> %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.v128i8(<128 x i8> %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %fixed_m8 = call <128 x i8> @llvm.vector.extract.v128i8.v128i8(<128 x i8> %v, i64 0) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void ; %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.v128i8(<128 x i8> %v, i64 0) %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.v128i8(<128 x i8> %v, i64 0) %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.v128i8(<128 x i8> %v, i64 0) %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.v128i8(<128 x i8> %v, i64 0) %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.v128i8(<128 x i8> %v, i64 0) %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.v128i8(<128 x i8> %v, i64 0) %fixed_m8 = call <128 x i8> @llvm.vector.extract.v128i8.v128i8(<128 x i8> %v, i64 0) ret void } define void @vector_extract_v128i8_1(<128 x i8> %v) { ; CHECK-LABEL: 'vector_extract_v128i8_1' ; CHECK-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.v128i8(<128 x i8> %v, i64 2) ; CHECK-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.v128i8(<128 x i8> %v, i64 4) ; CHECK-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.v128i8(<128 x i8> %v, i64 8) ; CHECK-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.v128i8(<128 x i8> %v, i64 16) ; CHECK-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.v128i8(<128 x i8> %v, i64 32) ; CHECK-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.v128i8(<128 x i8> %v, i64 64) ; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void ; ; SIZE-LABEL: 'vector_extract_v128i8_1' ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.v128i8(<128 x i8> %v, i64 2) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.v128i8(<128 x i8> %v, i64 4) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.v128i8(<128 x i8> %v, i64 8) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.v128i8(<128 x i8> %v, i64 16) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.v128i8(<128 x i8> %v, i64 32) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.v128i8(<128 x i8> %v, i64 64) ; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void ; %fixed_mf8 = call <2 x i8> @llvm.vector.extract.v2i8.v128i8(<128 x i8> %v, i64 2) %fixed_mf4 = call <4 x i8> @llvm.vector.extract.v4i8.v128i8(<128 x i8> %v, i64 4) %fixed_mf2 = call <8 x i8> @llvm.vector.extract.v8i8.v128i8(<128 x i8> %v, i64 8) %fixed_m1 = call <16 x i8> @llvm.vector.extract.v16i8.v128i8(<128 x i8> %v, i64 16) %fixed_m2 = call <32 x i8> @llvm.vector.extract.v32i8.v128i8(<128 x i8> %v, i64 32) %fixed_m4 = call <64 x i8> @llvm.vector.extract.v64i8.v128i8(<128 x i8> %v, i64 64) ; No @llvm.vector.extract.v128i8.v128i8(<128 x i8> %v, i64 128) since it would overrun ret void }