xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/pointer-vector.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-linux -mcpu=corei7 | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: opt -instsimplify -disable-output < %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker;CHECK: SHUFF0
5*9880d681SAndroid Build Coastguard Workerdefine <8 x i32*> @SHUFF0(<4 x i32*> %ptrv) nounwind {
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker  %G = shufflevector <4 x i32*> %ptrv, <4 x i32*> %ptrv, <8 x i32> <i32 2, i32 7, i32 1, i32 2, i32 4, i32 5, i32 1, i32 1>
8*9880d681SAndroid Build Coastguard Worker;CHECK: pshufd
9*9880d681SAndroid Build Coastguard Worker  ret <8 x i32*> %G
10*9880d681SAndroid Build Coastguard Worker;CHECK: ret
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker;CHECK: SHUFF1
14*9880d681SAndroid Build Coastguard Workerdefine <4 x i32*> @SHUFF1(<4 x i32*> %ptrv) nounwind {
15*9880d681SAndroid Build Coastguard Workerentry:
16*9880d681SAndroid Build Coastguard Worker  %G = shufflevector <4 x i32*> %ptrv, <4 x i32*> %ptrv, <4 x i32> <i32 2, i32 7, i32 7, i32 2>
17*9880d681SAndroid Build Coastguard Worker;CHECK: pshufd
18*9880d681SAndroid Build Coastguard Worker  ret <4 x i32*> %G
19*9880d681SAndroid Build Coastguard Worker;CHECK: ret
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker;CHECK: SHUFF3
23*9880d681SAndroid Build Coastguard Workerdefine <4 x i8*> @SHUFF3(<4 x i8*> %ptrv) nounwind {
24*9880d681SAndroid Build Coastguard Workerentry:
25*9880d681SAndroid Build Coastguard Worker  %G = shufflevector <4 x i8*> %ptrv, <4 x i8*> undef, <4 x i32> <i32 2, i32 7, i32 1, i32 2>
26*9880d681SAndroid Build Coastguard Worker;CHECK: pshufd
27*9880d681SAndroid Build Coastguard Worker  ret <4 x i8*> %G
28*9880d681SAndroid Build Coastguard Worker;CHECK: ret
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker;CHECK: LOAD0
32*9880d681SAndroid Build Coastguard Workerdefine <4 x i8*> @LOAD0(<4 x i8*>* %p) nounwind {
33*9880d681SAndroid Build Coastguard Workerentry:
34*9880d681SAndroid Build Coastguard Worker  %G = load <4 x i8*>, <4 x i8*>* %p
35*9880d681SAndroid Build Coastguard Worker;CHECK: movaps
36*9880d681SAndroid Build Coastguard Worker  ret <4 x i8*> %G
37*9880d681SAndroid Build Coastguard Worker;CHECK: ret
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker;CHECK: LOAD1
41*9880d681SAndroid Build Coastguard Workerdefine <4 x i8*> @LOAD1(<4 x i8*>* %p) nounwind {
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  %G = load <4 x i8*>, <4 x i8*>* %p
44*9880d681SAndroid Build Coastguard Worker;CHECK: movdqa
45*9880d681SAndroid Build Coastguard Worker;CHECK: pshufd
46*9880d681SAndroid Build Coastguard Worker;CHECK: movdqa
47*9880d681SAndroid Build Coastguard Worker  %T = shufflevector <4 x i8*> %G, <4 x i8*> %G, <4 x i32> <i32 7, i32 1, i32 4, i32 3>
48*9880d681SAndroid Build Coastguard Worker  store <4 x i8*> %T, <4 x i8*>* %p
49*9880d681SAndroid Build Coastguard Worker  ret <4 x i8*> %G
50*9880d681SAndroid Build Coastguard Worker;CHECK: ret
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker;CHECK: LOAD2
54*9880d681SAndroid Build Coastguard Workerdefine <4 x i8*> @LOAD2(<4 x i8*>* %p) nounwind {
55*9880d681SAndroid Build Coastguard Workerentry:
56*9880d681SAndroid Build Coastguard Worker  %I = alloca <4 x i8*>
57*9880d681SAndroid Build Coastguard Worker;CHECK: sub
58*9880d681SAndroid Build Coastguard Worker  %G = load <4 x i8*>, <4 x i8*>* %p
59*9880d681SAndroid Build Coastguard Worker;CHECK: movaps
60*9880d681SAndroid Build Coastguard Worker  store <4 x i8*> %G, <4 x i8*>* %I
61*9880d681SAndroid Build Coastguard Worker;CHECK: movaps
62*9880d681SAndroid Build Coastguard Worker  %Z = load <4 x i8*>, <4 x i8*>* %I
63*9880d681SAndroid Build Coastguard Worker  ret <4 x i8*> %Z
64*9880d681SAndroid Build Coastguard Worker;CHECK: add
65*9880d681SAndroid Build Coastguard Worker;CHECK: ret
66*9880d681SAndroid Build Coastguard Worker}
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Worker;CHECK: INT2PTR0
69*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @INT2PTR0(<4 x i8*>* %p) nounwind {
70*9880d681SAndroid Build Coastguard Workerentry:
71*9880d681SAndroid Build Coastguard Worker  %G = load <4 x i8*>, <4 x i8*>* %p
72*9880d681SAndroid Build Coastguard Worker;CHECK: movl
73*9880d681SAndroid Build Coastguard Worker;CHECK: movaps
74*9880d681SAndroid Build Coastguard Worker  %K = ptrtoint <4 x i8*> %G to <4 x i32>
75*9880d681SAndroid Build Coastguard Worker;CHECK: ret
76*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %K
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker;CHECK: INT2PTR1
80*9880d681SAndroid Build Coastguard Workerdefine <4 x i32*> @INT2PTR1(<4 x i8>* %p) nounwind {
81*9880d681SAndroid Build Coastguard Workerentry:
82*9880d681SAndroid Build Coastguard Worker  %G = load <4 x i8>, <4 x i8>* %p
83*9880d681SAndroid Build Coastguard Worker;CHECK: movl
84*9880d681SAndroid Build Coastguard Worker;CHECK: pmovzxbd (%
85*9880d681SAndroid Build Coastguard Worker  %K = inttoptr <4 x i8> %G to <4 x i32*>
86*9880d681SAndroid Build Coastguard Worker;CHECK: ret
87*9880d681SAndroid Build Coastguard Worker  ret <4 x i32*> %K
88*9880d681SAndroid Build Coastguard Worker}
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker;CHECK: BITCAST0
91*9880d681SAndroid Build Coastguard Workerdefine <4 x i32*> @BITCAST0(<4 x i8*>* %p) nounwind {
92*9880d681SAndroid Build Coastguard Workerentry:
93*9880d681SAndroid Build Coastguard Worker  %G = load <4 x i8*>, <4 x i8*>* %p
94*9880d681SAndroid Build Coastguard Worker;CHECK: movl
95*9880d681SAndroid Build Coastguard Worker  %T = bitcast <4 x i8*> %G to <4 x i32*>
96*9880d681SAndroid Build Coastguard Worker;CHECK: movaps
97*9880d681SAndroid Build Coastguard Worker;CHECK: ret
98*9880d681SAndroid Build Coastguard Worker  ret <4 x i32*> %T
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Worker;CHECK: BITCAST1
102*9880d681SAndroid Build Coastguard Workerdefine <2 x i32*> @BITCAST1(<2 x i8*>* %p) nounwind {
103*9880d681SAndroid Build Coastguard Workerentry:
104*9880d681SAndroid Build Coastguard Worker  %G = load <2 x i8*>, <2 x i8*>* %p
105*9880d681SAndroid Build Coastguard Worker;CHECK: movl
106*9880d681SAndroid Build Coastguard Worker;CHECK: pmovzxdq
107*9880d681SAndroid Build Coastguard Worker  %T = bitcast <2 x i8*> %G to <2 x i32*>
108*9880d681SAndroid Build Coastguard Worker;CHECK: ret
109*9880d681SAndroid Build Coastguard Worker  ret <2 x i32*> %T
110*9880d681SAndroid Build Coastguard Worker}
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker;CHECK: ICMP0
113*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ICMP0(<4 x i8*>* %p0, <4 x i8*>* %p1) nounwind {
114*9880d681SAndroid Build Coastguard Workerentry:
115*9880d681SAndroid Build Coastguard Worker  %g0 = load <4 x i8*>, <4 x i8*>* %p0
116*9880d681SAndroid Build Coastguard Worker  %g1 = load <4 x i8*>, <4 x i8*>* %p1
117*9880d681SAndroid Build Coastguard Worker  %k = icmp sgt <4 x i8*> %g0, %g1
118*9880d681SAndroid Build Coastguard Worker  ;CHECK: pcmpgtd
119*9880d681SAndroid Build Coastguard Worker  %j = select <4 x i1> %k, <4 x i32> <i32 0, i32 1, i32 2, i32 4>, <4 x i32> <i32 9, i32 8, i32 7, i32 6>
120*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %j
121*9880d681SAndroid Build Coastguard Worker  ;CHECK: ret
122*9880d681SAndroid Build Coastguard Worker}
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker;CHECK: ICMP1
125*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ICMP1(<4 x i8*>* %p0, <4 x i8*>* %p1) nounwind {
126*9880d681SAndroid Build Coastguard Workerentry:
127*9880d681SAndroid Build Coastguard Worker  %g0 = load <4 x i8*>, <4 x i8*>* %p0
128*9880d681SAndroid Build Coastguard Worker  %g1 = load <4 x i8*>, <4 x i8*>* %p1
129*9880d681SAndroid Build Coastguard Worker  %k = icmp eq <4 x i8*> %g0, %g1
130*9880d681SAndroid Build Coastguard Worker  ;CHECK: pcmpeqd
131*9880d681SAndroid Build Coastguard Worker  %j = select <4 x i1> %k, <4 x i32> <i32 0, i32 1, i32 2, i32 4>, <4 x i32> <i32 9, i32 8, i32 7, i32 6>
132*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %j
133*9880d681SAndroid Build Coastguard Worker  ;CHECK: ret
134*9880d681SAndroid Build Coastguard Worker}
135*9880d681SAndroid Build Coastguard Worker
136