xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix-vec_extract_p9.ll (revision c2e7c9cb33acbd118fe5011a1607d6cf8e21de34)
1f818ec9dSZarko Todorovski; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2f818ec9dSZarko Todorovski; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff -vec-extabi -mcpu=pwr9 < %s | FileCheck %s -check-prefix=CHECK-64
3f818ec9dSZarko Todorovski; RUN: llc -verify-machineinstrs -mtriple=powerpc-ibm-aix-xcoff -vec-extabi -mcpu=pwr9 < %s | FileCheck %s -check-prefix=CHECK-32
4f818ec9dSZarko Todorovski
5f818ec9dSZarko Todorovskidefine zeroext i8 @test1(<16 x i8> %a, i32 signext %index) {
6f818ec9dSZarko Todorovski; CHECK-64-LABEL: test1:
7f818ec9dSZarko Todorovski; CHECK-64:       # %bb.0: # %entry
8*c2e7c9cbSPeter Rong; CHECK-64-NEXT:    clrldi 3, 3, 32
9f818ec9dSZarko Todorovski; CHECK-64-NEXT:    vextublx 3, 3, 2
10f818ec9dSZarko Todorovski; CHECK-64-NEXT:    clrldi 3, 3, 56
11f818ec9dSZarko Todorovski; CHECK-64-NEXT:    blr
12f818ec9dSZarko Todorovski;
13f818ec9dSZarko Todorovski; CHECK-32-LABEL: test1:
14f818ec9dSZarko Todorovski; CHECK-32:       # %bb.0: # %entry
15f818ec9dSZarko Todorovski; CHECK-32-NEXT:    addi 4, 1, -16
16f818ec9dSZarko Todorovski; CHECK-32-NEXT:    clrlwi 3, 3, 28
17f818ec9dSZarko Todorovski; CHECK-32-NEXT:    stxv 34, -16(1)
18f818ec9dSZarko Todorovski; CHECK-32-NEXT:    lbzx 3, 4, 3
19f818ec9dSZarko Todorovski; CHECK-32-NEXT:    blr
20f818ec9dSZarko Todorovskientry:
21f818ec9dSZarko Todorovski  %vecext = extractelement <16 x i8> %a, i32 %index
22f818ec9dSZarko Todorovski  ret i8 %vecext
23f818ec9dSZarko Todorovski}
24f818ec9dSZarko Todorovski
25f818ec9dSZarko Todorovskidefine signext i8 @test2(<16 x i8> %a, i32 signext %index) {
26f818ec9dSZarko Todorovski; CHECK-64-LABEL: test2:
27f818ec9dSZarko Todorovski; CHECK-64:       # %bb.0: # %entry
28*c2e7c9cbSPeter Rong; CHECK-64-NEXT:    clrldi 3, 3, 32
29f818ec9dSZarko Todorovski; CHECK-64-NEXT:    vextublx 3, 3, 2
30f818ec9dSZarko Todorovski; CHECK-64-NEXT:    extsb 3, 3
31f818ec9dSZarko Todorovski; CHECK-64-NEXT:    blr
32f818ec9dSZarko Todorovski;
33f818ec9dSZarko Todorovski; CHECK-32-LABEL: test2:
34f818ec9dSZarko Todorovski; CHECK-32:       # %bb.0: # %entry
35f818ec9dSZarko Todorovski; CHECK-32-NEXT:    addi 4, 1, -16
36f818ec9dSZarko Todorovski; CHECK-32-NEXT:    clrlwi 3, 3, 28
37f818ec9dSZarko Todorovski; CHECK-32-NEXT:    stxv 34, -16(1)
38f818ec9dSZarko Todorovski; CHECK-32-NEXT:    lbzx 3, 4, 3
39f818ec9dSZarko Todorovski; CHECK-32-NEXT:    extsb 3, 3
40f818ec9dSZarko Todorovski; CHECK-32-NEXT:    blr
41f818ec9dSZarko Todorovskientry:
42f818ec9dSZarko Todorovski  %vecext = extractelement <16 x i8> %a, i32 %index
43f818ec9dSZarko Todorovski  ret i8 %vecext
44f818ec9dSZarko Todorovski}
45f818ec9dSZarko Todorovski
46f818ec9dSZarko Todorovskidefine zeroext i16 @test3(<8 x i16> %a, i32 signext %index) {
47f818ec9dSZarko Todorovski; CHECK-64-LABEL: test3:
48f818ec9dSZarko Todorovski; CHECK-64:       # %bb.0: # %entry
49*c2e7c9cbSPeter Rong; CHECK-64-NEXT:    clrldi 3, 3, 32
50f818ec9dSZarko Todorovski; CHECK-64-NEXT:    rlwinm 3, 3, 1, 28, 30
51f818ec9dSZarko Todorovski; CHECK-64-NEXT:    vextuhlx 3, 3, 2
52f818ec9dSZarko Todorovski; CHECK-64-NEXT:    clrldi 3, 3, 48
53f818ec9dSZarko Todorovski; CHECK-64-NEXT:    blr
54f818ec9dSZarko Todorovski;
55f818ec9dSZarko Todorovski; CHECK-32-LABEL: test3:
56f818ec9dSZarko Todorovski; CHECK-32:       # %bb.0: # %entry
57f818ec9dSZarko Todorovski; CHECK-32-NEXT:    addi 4, 1, -16
58f818ec9dSZarko Todorovski; CHECK-32-NEXT:    rlwinm 3, 3, 1, 28, 30
59f818ec9dSZarko Todorovski; CHECK-32-NEXT:    stxv 34, -16(1)
60f818ec9dSZarko Todorovski; CHECK-32-NEXT:    lhzx 3, 4, 3
61f818ec9dSZarko Todorovski; CHECK-32-NEXT:    blr
62f818ec9dSZarko Todorovskientry:
63f818ec9dSZarko Todorovski  %vecext = extractelement <8 x i16> %a, i32 %index
64f818ec9dSZarko Todorovski  ret i16 %vecext
65f818ec9dSZarko Todorovski}
66f818ec9dSZarko Todorovski
67f818ec9dSZarko Todorovskidefine signext i16 @test4(<8 x i16> %a, i32 signext %index) {
68f818ec9dSZarko Todorovski; CHECK-64-LABEL: test4:
69f818ec9dSZarko Todorovski; CHECK-64:       # %bb.0: # %entry
70*c2e7c9cbSPeter Rong; CHECK-64-NEXT:    clrldi 3, 3, 32
71f818ec9dSZarko Todorovski; CHECK-64-NEXT:    rlwinm 3, 3, 1, 28, 30
72f818ec9dSZarko Todorovski; CHECK-64-NEXT:    vextuhlx 3, 3, 2
73f818ec9dSZarko Todorovski; CHECK-64-NEXT:    extsh 3, 3
74f818ec9dSZarko Todorovski; CHECK-64-NEXT:    blr
75f818ec9dSZarko Todorovski;
76f818ec9dSZarko Todorovski; CHECK-32-LABEL: test4:
77f818ec9dSZarko Todorovski; CHECK-32:       # %bb.0: # %entry
78f818ec9dSZarko Todorovski; CHECK-32-NEXT:    addi 4, 1, -16
79f818ec9dSZarko Todorovski; CHECK-32-NEXT:    rlwinm 3, 3, 1, 28, 30
80f818ec9dSZarko Todorovski; CHECK-32-NEXT:    stxv 34, -16(1)
81f818ec9dSZarko Todorovski; CHECK-32-NEXT:    lhax 3, 4, 3
82f818ec9dSZarko Todorovski; CHECK-32-NEXT:    blr
83f818ec9dSZarko Todorovskientry:
84f818ec9dSZarko Todorovski  %vecext = extractelement <8 x i16> %a, i32 %index
85f818ec9dSZarko Todorovski  ret i16 %vecext
86f818ec9dSZarko Todorovski}
87f818ec9dSZarko Todorovski
88f818ec9dSZarko Todorovskidefine zeroext i32 @test5(<4 x i32> %a, i32 signext %index) {
89f818ec9dSZarko Todorovski; CHECK-64-LABEL: test5:
90f818ec9dSZarko Todorovski; CHECK-64:       # %bb.0: # %entry
91*c2e7c9cbSPeter Rong; CHECK-64-NEXT:    clrldi 3, 3, 32
92f818ec9dSZarko Todorovski; CHECK-64-NEXT:    rlwinm 3, 3, 2, 28, 29
93f818ec9dSZarko Todorovski; CHECK-64-NEXT:    vextuwlx 3, 3, 2
94f818ec9dSZarko Todorovski; CHECK-64-NEXT:    blr
95f818ec9dSZarko Todorovski;
96f818ec9dSZarko Todorovski; CHECK-32-LABEL: test5:
97f818ec9dSZarko Todorovski; CHECK-32:       # %bb.0: # %entry
98f818ec9dSZarko Todorovski; CHECK-32-NEXT:    addi 4, 1, -16
99f818ec9dSZarko Todorovski; CHECK-32-NEXT:    rlwinm 3, 3, 2, 28, 29
100f818ec9dSZarko Todorovski; CHECK-32-NEXT:    stxv 34, -16(1)
101f818ec9dSZarko Todorovski; CHECK-32-NEXT:    lwzx 3, 4, 3
102f818ec9dSZarko Todorovski; CHECK-32-NEXT:    blr
103f818ec9dSZarko Todorovskientry:
104f818ec9dSZarko Todorovski  %vecext = extractelement <4 x i32> %a, i32 %index
105f818ec9dSZarko Todorovski  ret i32 %vecext
106f818ec9dSZarko Todorovski}
107f818ec9dSZarko Todorovski
108f818ec9dSZarko Todorovskidefine signext i32 @test6(<4 x i32> %a, i32 signext %index) {
109f818ec9dSZarko Todorovski; CHECK-64-LABEL: test6:
110f818ec9dSZarko Todorovski; CHECK-64:       # %bb.0: # %entry
111*c2e7c9cbSPeter Rong; CHECK-64-NEXT:    clrldi 3, 3, 32
112f818ec9dSZarko Todorovski; CHECK-64-NEXT:    rlwinm 3, 3, 2, 28, 29
113f818ec9dSZarko Todorovski; CHECK-64-NEXT:    vextuwlx 3, 3, 2
114f818ec9dSZarko Todorovski; CHECK-64-NEXT:    extsw 3, 3
115f818ec9dSZarko Todorovski; CHECK-64-NEXT:    blr
116f818ec9dSZarko Todorovski;
117f818ec9dSZarko Todorovski; CHECK-32-LABEL: test6:
118f818ec9dSZarko Todorovski; CHECK-32:       # %bb.0: # %entry
119f818ec9dSZarko Todorovski; CHECK-32-NEXT:    addi 4, 1, -16
120f818ec9dSZarko Todorovski; CHECK-32-NEXT:    rlwinm 3, 3, 2, 28, 29
121f818ec9dSZarko Todorovski; CHECK-32-NEXT:    stxv 34, -16(1)
122f818ec9dSZarko Todorovski; CHECK-32-NEXT:    lwzx 3, 4, 3
123f818ec9dSZarko Todorovski; CHECK-32-NEXT:    blr
124f818ec9dSZarko Todorovskientry:
125f818ec9dSZarko Todorovski  %vecext = extractelement <4 x i32> %a, i32 %index
126f818ec9dSZarko Todorovski  ret i32 %vecext
127f818ec9dSZarko Todorovski}
128f818ec9dSZarko Todorovski
129f818ec9dSZarko Todorovski; Test with immediate index
130f818ec9dSZarko Todorovskidefine zeroext i8 @test7(<16 x i8> %a) {
131f818ec9dSZarko Todorovski; CHECK-64-LABEL: test7:
132f818ec9dSZarko Todorovski; CHECK-64:       # %bb.0: # %entry
133f818ec9dSZarko Todorovski; CHECK-64-NEXT:    li 3, 1
134f818ec9dSZarko Todorovski; CHECK-64-NEXT:    vextublx 3, 3, 2
135f818ec9dSZarko Todorovski; CHECK-64-NEXT:    clrldi 3, 3, 56
136f818ec9dSZarko Todorovski; CHECK-64-NEXT:    blr
137f818ec9dSZarko Todorovski;
138f818ec9dSZarko Todorovski; CHECK-32-LABEL: test7:
139f818ec9dSZarko Todorovski; CHECK-32:       # %bb.0: # %entry
140f818ec9dSZarko Todorovski; CHECK-32-NEXT:    stxv 34, -16(1)
141f818ec9dSZarko Todorovski; CHECK-32-NEXT:    lbz 3, -15(1)
142f818ec9dSZarko Todorovski; CHECK-32-NEXT:    blr
143f818ec9dSZarko Todorovskientry:
144f818ec9dSZarko Todorovski  %vecext = extractelement <16 x i8> %a, i32 1
145f818ec9dSZarko Todorovski  ret i8 %vecext
146f818ec9dSZarko Todorovski}
147f818ec9dSZarko Todorovski
148f818ec9dSZarko Todorovskidefine zeroext i16 @test8(<8 x i16> %a) {
149f818ec9dSZarko Todorovski; CHECK-64-LABEL: test8:
150f818ec9dSZarko Todorovski; CHECK-64:       # %bb.0: # %entry
151f818ec9dSZarko Todorovski; CHECK-64-NEXT:    li 3, 2
152f818ec9dSZarko Todorovski; CHECK-64-NEXT:    vextuhlx 3, 3, 2
153f818ec9dSZarko Todorovski; CHECK-64-NEXT:    clrldi 3, 3, 48
154f818ec9dSZarko Todorovski; CHECK-64-NEXT:    blr
155f818ec9dSZarko Todorovski;
156f818ec9dSZarko Todorovski; CHECK-32-LABEL: test8:
157f818ec9dSZarko Todorovski; CHECK-32:       # %bb.0: # %entry
158f818ec9dSZarko Todorovski; CHECK-32-NEXT:    stxv 34, -16(1)
159f818ec9dSZarko Todorovski; CHECK-32-NEXT:    lhz 3, -14(1)
160f818ec9dSZarko Todorovski; CHECK-32-NEXT:    blr
161f818ec9dSZarko Todorovskientry:
162f818ec9dSZarko Todorovski  %vecext = extractelement <8 x i16> %a, i32 1
163f818ec9dSZarko Todorovski  ret i16 %vecext
164f818ec9dSZarko Todorovski}
165f818ec9dSZarko Todorovski
166f818ec9dSZarko Todorovskidefine zeroext i32 @test9(<4 x i32> %a) {
167f818ec9dSZarko Todorovski; CHECK-64-LABEL: test9:
168f818ec9dSZarko Todorovski; CHECK-64:       # %bb.0:
169f818ec9dSZarko Todorovski; CHECK-64-NEXT:    li 3, 12
170f818ec9dSZarko Todorovski; CHECK-64-NEXT:    vextuwlx 3, 3, 2
171f818ec9dSZarko Todorovski; CHECK-64-NEXT:    blr
172f818ec9dSZarko Todorovski;
173f818ec9dSZarko Todorovski; CHECK-32-LABEL: test9:
174f818ec9dSZarko Todorovski; CHECK-32:       # %bb.0:
175f818ec9dSZarko Todorovski; CHECK-32-NEXT:    stxv 34, -16(1)
176f818ec9dSZarko Todorovski; CHECK-32-NEXT:    lwz 3, -4(1)
177f818ec9dSZarko Todorovski; CHECK-32-NEXT:    blr
178f818ec9dSZarko Todorovski  %vecext = extractelement <4 x i32> %a, i32 3
179f818ec9dSZarko Todorovski  ret i32 %vecext
180f818ec9dSZarko Todorovski}
181