@@ -459,6 +459,42 @@ define void @test_pli_w(ptr %ret_ptr) {
459459 ret void
460460}
461461
462+ define void @test_extract_vector_16 (ptr %ret_ptr , ptr %a_ptr ) {
463+ ; CHECK-LABEL: test_extract_vector_16:
464+ ; CHECK: # %bb.0:
465+ ; CHECK-NEXT: ld a1, 0(a1)
466+ ; CHECK-NEXT: sh a1, 0(a0)
467+ ; CHECK-NEXT: ret
468+ %a = load <4 x i16 >, ptr %a_ptr
469+ %extracted = extractelement <4 x i16 > %a , i32 0
470+ store i16 %extracted , ptr %ret_ptr
471+ ret void
472+ }
473+
474+ define void @test_extract_vector_8 (ptr %ret_ptr , ptr %a_ptr ) {
475+ ; CHECK-LABEL: test_extract_vector_8:
476+ ; CHECK: # %bb.0:
477+ ; CHECK-NEXT: ld a1, 0(a1)
478+ ; CHECK-NEXT: sb a1, 0(a0)
479+ ; CHECK-NEXT: ret
480+ %a = load <8 x i8 >, ptr %a_ptr
481+ %extracted = extractelement <8 x i8 > %a , i32 0
482+ store i8 %extracted , ptr %ret_ptr
483+ ret void
484+ }
485+
486+ define void @test_extract_vector_32 (ptr %ret_ptr , ptr %a_ptr ) {
487+ ; CHECK-LABEL: test_extract_vector_32:
488+ ; CHECK: # %bb.0:
489+ ; CHECK-NEXT: ld a1, 0(a1)
490+ ; CHECK-NEXT: sw a1, 0(a0)
491+ ; CHECK-NEXT: ret
492+ %a = load <2 x i32 >, ptr %a_ptr
493+ %extracted = extractelement <2 x i32 > %a , i32 0
494+ store i32 %extracted , ptr %ret_ptr
495+ ret void
496+ }
497+
462498; Intrinsic declarations
463499declare <4 x i16 > @llvm.sadd.sat.v4i16 (<4 x i16 >, <4 x i16 >)
464500declare <4 x i16 > @llvm.uadd.sat.v4i16 (<4 x i16 >, <4 x i16 >)
0 commit comments