1; RUN: opt < %s -passes=sroa -S | FileCheck %s
2target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n8:16:32:64"
3
4define <4 x i64> @vector_ptrtoint({<2 x ptr>, <2 x ptr>} %x) {
5; CHECK-LABEL: @vector_ptrtoint
6  %a = alloca {<2 x ptr>, <2 x ptr>}
7; CHECK-NOT: alloca
8
9  store {<2 x ptr>, <2 x ptr>} %x, ptr %a
10; CHECK-NOT: store
11
12  %vec = load <4 x i64>, ptr %a
13; CHECK-NOT: load
14; CHECK: ptrtoint
15
16  ret <4 x i64> %vec
17}
18
19define <4 x ptr> @vector_inttoptr({<2 x i64>, <2 x i64>} %x) {
20; CHECK-LABEL: @vector_inttoptr
21  %a = alloca {<2 x i64>, <2 x i64>}
22; CHECK-NOT: alloca
23
24  store {<2 x i64>, <2 x i64>} %x, ptr %a
25; CHECK-NOT: store
26
27  %vec = load <4 x ptr>, ptr %a
28; CHECK-NOT: load
29; CHECK: inttoptr
30
31  ret <4 x ptr> %vec
32}
33
34define <2 x i64> @vector_ptrtointbitcast({<1 x ptr>, <1 x ptr>} %x) {
35; CHECK-LABEL: @vector_ptrtointbitcast(
36  %a = alloca {<1 x ptr>, <1 x ptr>}
37; CHECK-NOT: alloca
38
39  store {<1 x ptr>, <1 x ptr>} %x, ptr %a
40; CHECK-NOT: store
41
42  %vec = load <2 x i64>, ptr %a
43; CHECK-NOT: load
44; CHECK: ptrtoint
45; CHECK: bitcast
46; CHECK: ptrtoint
47; CHECK: bitcast
48
49  ret <2 x i64> %vec
50}
51
52define <2 x ptr> @vector_inttoptrbitcast_vector({<16 x i8>, <16 x i8>} %x) {
53; CHECK-LABEL: @vector_inttoptrbitcast_vector(
54  %a = alloca {<16 x i8>, <16 x i8>}
55; CHECK-NOT: alloca
56
57  store {<16 x i8>, <16 x i8>} %x, ptr %a
58; CHECK-NOT: store
59
60  %vec = load <2 x ptr>, ptr %a
61; CHECK-NOT: load
62; CHECK: extractvalue
63; CHECK: extractvalue
64; CHECK: bitcast
65; CHECK: inttoptr
66
67  ret <2 x ptr> %vec
68}
69
70define <16 x i8> @vector_ptrtointbitcast_vector({<2 x ptr>, <2 x ptr>} %x) {
71; CHECK-LABEL: @vector_ptrtointbitcast_vector(
72  %a = alloca {<2 x ptr>, <2 x ptr>}
73; CHECK-NOT: alloca
74
75  store {<2 x ptr>, <2 x ptr>} %x, ptr %a
76; CHECK-NOT: store
77
78  %vec = load <16 x i8>, ptr %a
79; CHECK-NOT: load
80; CHECK: extractvalue
81; CHECK: ptrtoint
82; CHECK: bitcast
83; CHECK: extractvalue
84
85  ret <16 x i8> %vec
86}
87