[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-streaming-mode-fixed-length-extract-vector-elt.ll
blob053db68b58644ed15f2ff275e735bb2c31d2a341
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mattr=+sve -force-streaming-compatible-sve  < %s | FileCheck %s
4 target triple = "aarch64-unknown-linux-gnu"
7 ; extractelement
10 define half @extractelement_v2f16(<2 x half> %op1) {
11 ; CHECK-LABEL: extractelement_v2f16:
12 ; CHECK:       // %bb.0:
13 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
14 ; CHECK-NEXT:    mov z0.h, z0.h[1]
15 ; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $z0
16 ; CHECK-NEXT:    ret
17   %r = extractelement <2 x half> %op1, i64 1
18   ret half %r
21 define half @extractelement_v4f16(<4 x half> %op1) {
22 ; CHECK-LABEL: extractelement_v4f16:
23 ; CHECK:       // %bb.0:
24 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
25 ; CHECK-NEXT:    mov z0.h, z0.h[3]
26 ; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $z0
27 ; CHECK-NEXT:    ret
28   %r = extractelement <4 x half> %op1, i64 3
29   ret half %r
32 define half @extractelement_v8f16(<8 x half> %op1) {
33 ; CHECK-LABEL: extractelement_v8f16:
34 ; CHECK:       // %bb.0:
35 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
36 ; CHECK-NEXT:    mov z0.h, z0.h[7]
37 ; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $z0
38 ; CHECK-NEXT:    ret
39   %r = extractelement <8 x half> %op1, i64 7
40   ret half %r
43 define half @extractelement_v16f16(ptr %a) {
44 ; CHECK-LABEL: extractelement_v16f16:
45 ; CHECK:       // %bb.0:
46 ; CHECK-NEXT:    ldr q0, [x0, #16]
47 ; CHECK-NEXT:    mov z0.h, z0.h[7]
48 ; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $z0
49 ; CHECK-NEXT:    ret
50   %op1 = load <16 x half>, ptr %a
51   %r = extractelement <16 x half> %op1, i64 15
52   ret half %r
55 define float @extractelement_v2f32(<2 x float> %op1) {
56 ; CHECK-LABEL: extractelement_v2f32:
57 ; CHECK:       // %bb.0:
58 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
59 ; CHECK-NEXT:    mov z0.s, z0.s[1]
60 ; CHECK-NEXT:    // kill: def $s0 killed $s0 killed $z0
61 ; CHECK-NEXT:    ret
62   %r = extractelement <2 x float> %op1, i64 1
63   ret float %r
66 define float @extractelement_v4f32(<4 x float> %op1) {
67 ; CHECK-LABEL: extractelement_v4f32:
68 ; CHECK:       // %bb.0:
69 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
70 ; CHECK-NEXT:    mov z0.s, z0.s[3]
71 ; CHECK-NEXT:    // kill: def $s0 killed $s0 killed $z0
72 ; CHECK-NEXT:    ret
73   %r = extractelement <4 x float> %op1, i64 3
74   ret float %r
77 define float @extractelement_v8f32(ptr %a) {
78 ; CHECK-LABEL: extractelement_v8f32:
79 ; CHECK:       // %bb.0:
80 ; CHECK-NEXT:    ldr q0, [x0, #16]
81 ; CHECK-NEXT:    mov z0.s, z0.s[3]
82 ; CHECK-NEXT:    // kill: def $s0 killed $s0 killed $z0
83 ; CHECK-NEXT:    ret
84   %op1 = load <8 x float>, ptr %a
85   %r = extractelement <8 x float> %op1, i64 7
86   ret float %r
89 define double @extractelement_v1f64(<1 x double> %op1) {
90 ; CHECK-LABEL: extractelement_v1f64:
91 ; CHECK:       // %bb.0:
92 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
93 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
94 ; CHECK-NEXT:    ret
95   %r = extractelement <1 x double> %op1, i64 0
96   ret double %r
98 define double @extractelement_v2f64(<2 x double> %op1) {
99 ; CHECK-LABEL: extractelement_v2f64:
100 ; CHECK:       // %bb.0:
101 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
102 ; CHECK-NEXT:    mov z0.d, z0.d[1]
103 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
104 ; CHECK-NEXT:    ret
105   %r = extractelement <2 x double> %op1, i64 1
106   ret double %r
109 define double @extractelement_v4f64(ptr %a) {
110 ; CHECK-LABEL: extractelement_v4f64:
111 ; CHECK:       // %bb.0:
112 ; CHECK-NEXT:    ldr q0, [x0, #16]
113 ; CHECK-NEXT:    mov z0.d, z0.d[1]
114 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
115 ; CHECK-NEXT:    ret
116   %op1 = load <4 x double>, ptr %a
117   %r = extractelement <4 x double> %op1, i64 3
118   ret double %r