@@ -16,6 +16,22 @@ define <8 x i32> @insert_idx_not_constant_multiple(<8 x i32> %vec, <4 x i32> %su
16
16
ret <8 x i32 > %1
17
17
}
18
18
19
+ ;
20
+ ; Test that extractions/insertion element types are validated.
21
+ ;
22
+
23
+ ; CHECK: vector_extract result must have the same element type as the input vector.
24
+ define <16 x i16 > @extract_invalid_mismatched_element_types (<vscale x 16 x i8 > %vec ) nounwind {
25
+ %retval = call <16 x i16 > @llvm.vector.extract.v16i16.nxv16i8 (<vscale x 16 x i8 > %vec , i64 0 )
26
+ ret <16 x i16 > %retval
27
+ }
28
+
29
+ ; CHECK: vector_insert parameters must have the same element type.
30
+ define <vscale x 16 x i8 > @insert_invalid_mismatched_element_types (<vscale x 16 x i8 > %vec , <4 x i16 > %subvec ) nounwind {
31
+ %retval = call <vscale x 16 x i8 > @llvm.vector.insert.nxv16i8.v4i16 (<vscale x 16 x i8 > %vec , <4 x i16 > %subvec , i64 0 )
32
+ ret <vscale x 16 x i8 > %retval
33
+ }
34
+
19
35
;
20
36
; Test that extractions/insertions which 'overrun' are captured.
21
37
;
@@ -70,3 +86,5 @@ declare <3 x i32> @llvm.vector.extract.v8i32.v3i32(<8 x i32>, i64)
70
86
declare <4 x i32 > @llvm.vector.extract.v4i32.v8i32 (<8 x i32 >, i64 )
71
87
declare <8 x i32 > @llvm.vector.insert.v8i32.v3i32 (<8 x i32 >, <3 x i32 >, i64 )
72
88
declare <8 x i32 > @llvm.vector.insert.v8i32.v4i32 (<8 x i32 >, <4 x i32 >, i64 )
89
+ declare <16 x i16 > @llvm.vector.extract.v16i16.nxv16i8 (<vscale x 16 x i8 >, i64 )
90
+ declare <vscale x 16 x i8 > @llvm.vector.insert.nxv16i8.v4i16 (<vscale x 16 x i8 >, <4 x i16 >, i64 )
0 commit comments