11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2- ; RUN: opt < %s -passes=instsimplify,verify -S | FileCheck %s
2+ ; RUN: opt < %s -passes=instsimplify,verify -disable-verify - S | FileCheck %s
33
44define <3 x i32 > @fold_vector_extract () {
55; CHECK-LABEL: define <3 x i32> @fold_vector_extract() {
@@ -9,6 +9,22 @@ define <3 x i32> @fold_vector_extract() {
99 ret <3 x i32 > %1
1010}
1111
12+ define <3 x i32 > @fold_vector_extract_last_poison () {
13+ ; CHECK-LABEL: define <3 x i32> @fold_vector_extract_last_poison() {
14+ ; CHECK-NEXT: ret <3 x i32> <i32 6, i32 7, i32 poison>
15+ ;
16+ %1 = call <3 x i32 > @llvm.vector.extract.v3i32.v8i32 (<8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >, i64 6 )
17+ ret <3 x i32 > %1
18+ }
19+
20+ define <3 x i32 > @fold_vector_extract_poison () {
21+ ; CHECK-LABEL: define <3 x i32> @fold_vector_extract_poison() {
22+ ; CHECK-NEXT: ret <3 x i32> poison
23+ ;
24+ %1 = call <3 x i32 > @llvm.vector.extract.v3i32.v8i32 (<8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >, i64 8 )
25+ ret <3 x i32 > %1
26+ }
27+
1228define <8 x i32 > @fold_vector_extract_nop () {
1329; CHECK-LABEL: define <8 x i32> @fold_vector_extract_nop() {
1430; CHECK-NEXT: ret <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
@@ -33,6 +49,22 @@ define <8 x i32> @fold_vector_insert_nop() {
3349 ret <8 x i32 > %1
3450}
3551
52+ define <8 x i32 > @fold_vector_insert_poison_idx_range () {
53+ ; CHECK-LABEL: define <8 x i32> @fold_vector_insert_poison_idx_range() {
54+ ; CHECK-NEXT: ret <8 x i32> poison
55+ ;
56+ %1 = call <8 x i32 > @llvm.vector.insert.v8i32 (<8 x i32 > <i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 >, <6 x i32 > <i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 >, i64 6 )
57+ ret <8 x i32 > %1
58+ }
59+
60+ define <8 x i32 > @fold_vector_insert_poison_large_idx () {
61+ ; CHECK-LABEL: define <8 x i32> @fold_vector_insert_poison_large_idx() {
62+ ; CHECK-NEXT: ret <8 x i32> poison
63+ ;
64+ %1 = call <8 x i32 > @llvm.vector.insert.v8i32 (<8 x i32 > <i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 >, <6 x i32 > <i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 >, i64 -2 )
65+ ret <8 x i32 > %1
66+ }
67+
3668define <8 x i32 > @fold_vector_interleave2 () {
3769; CHECK-LABEL: define <8 x i32> @fold_vector_interleave2() {
3870; CHECK-NEXT: ret <8 x i32> <i32 1, i32 5, i32 2, i32 6, i32 3, i32 7, i32 4, i32 8>
@@ -48,3 +80,11 @@ define {<4 x i32>, <4 x i32>} @fold_vector_deinterleav2() {
4880 %1 = call {<4 x i32 >, <4 x i32 >} @llvm.vector.deinterleave2.v4i32.v8i32 (<8 x i32 > <i32 1 , i32 5 , i32 2 , i32 6 , i32 3 , i32 7 , i32 4 , i32 8 >)
4981 ret {<4 x i32 >, <4 x i32 >} %1
5082}
83+
84+ define {<vscale x 4 x i32 >, <vscale x 4 x i32 >} @fold_scalable_vector_deinterleav2 () {
85+ ; CHECK-LABEL: define { <vscale x 4 x i32>, <vscale x 4 x i32> } @fold_scalable_vector_deinterleav2() {
86+ ; CHECK-NEXT: ret { <vscale x 4 x i32>, <vscale x 4 x i32> } zeroinitializer
87+ ;
88+ %1 = call {<vscale x 4 x i32 >, <vscale x 4 x i32 >} @llvm.vector.deinterleave2.v4i32.v8i32 (<vscale x 8 x i32 > zeroinitializer )
89+ ret {<vscale x 4 x i32 >, <vscale x 4 x i32 >} %1
90+ }
0 commit comments