xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/select-int-ptr-casts.mir (revision 95dabac7a5adf62af5c43863e7bf6db5d4437b72)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s
3
4--- |
5  target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
6
7  define void @inttoptr_p0_s64() { ret void }
8  define void @ptrtoint_s64_p0() { ret void }
9  define void @ptrtoint_s32_p0() { ret void }
10  define void @ptrtoint_s16_p0() { ret void }
11  define void @ptrtoint_s8_p0() { ret void }
12  define void @ptrtoint_s1_p0() { ret void }
13  define void @inttoptr_v2p0_v2s64() { ret void }
14  define void @ptrtoint_v2s64_v2p0() { ret void }
15...
16
17---
18name:            inttoptr_p0_s64
19legalized:       true
20regBankSelected: true
21
22registers:
23  - { id: 0, class: gpr }
24  - { id: 1, class: gpr }
25body:             |
26  bb.0:
27    liveins: $x0
28    ; CHECK-LABEL: name: inttoptr_p0_s64
29    ; CHECK: liveins: $x0
30    ; CHECK-NEXT: {{  $}}
31    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64all = COPY $x0
32    ; CHECK-NEXT: $x0 = COPY [[COPY]]
33    %0(s64) = COPY $x0
34    %1(p0) = G_INTTOPTR %0
35    $x0 = COPY %1(p0)
36...
37
38---
39name:            ptrtoint_s64_p0
40legalized:       true
41regBankSelected: true
42
43registers:
44  - { id: 0, class: gpr }
45  - { id: 1, class: gpr }
46body:             |
47  bb.0:
48    liveins: $x0
49    ; CHECK-LABEL: name: ptrtoint_s64_p0
50    ; CHECK: liveins: $x0
51    ; CHECK-NEXT: {{  $}}
52    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
53    ; CHECK-NEXT: $x0 = COPY [[COPY]]
54    %0(p0) = COPY $x0
55    %1(s64) = G_PTRTOINT %0
56    $x0 = COPY %1(s64)
57...
58
59---
60name:            ptrtoint_s32_p0
61legalized:       true
62regBankSelected: true
63
64registers:
65  - { id: 0, class: gpr }
66  - { id: 1, class: gpr }
67body:             |
68  bb.0:
69    liveins: $x0
70    ; CHECK-LABEL: name: ptrtoint_s32_p0
71    ; CHECK: liveins: $x0
72    ; CHECK-NEXT: {{  $}}
73    ; CHECK-NEXT: %ptr:gpr64 = COPY $x0
74    ; CHECK-NEXT: %ptr2int:gpr64common = COPY %ptr
75    ; CHECK-NEXT: %int:gpr32sp = COPY %ptr2int.sub_32
76    ; CHECK-NEXT: $w0 = COPY %int
77    ; CHECK-NEXT: RET_ReallyLR implicit $w0
78    %ptr:gpr(p0) = COPY $x0
79    %ptr2int:gpr(s64) = G_PTRTOINT %ptr(p0)
80    %int:gpr(s32) = G_TRUNC %ptr2int(s64)
81    $w0 = COPY %int(s32)
82    RET_ReallyLR implicit $w0
83...
84
85---
86name:            ptrtoint_s16_p0
87legalized:       true
88regBankSelected: true
89
90registers:
91  - { id: 0, class: gpr }
92  - { id: 1, class: gpr }
93body:             |
94  bb.0:
95    liveins: $x0
96    ; CHECK-LABEL: name: ptrtoint_s16_p0
97    ; CHECK: liveins: $x0
98    ; CHECK-NEXT: {{  $}}
99    ; CHECK-NEXT: %ptr:gpr64 = COPY $x0
100    ; CHECK-NEXT: %int:gpr32 = COPY %ptr.sub_32
101    ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr32 = COPY %int
102    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr16 = COPY [[COPY]].hsub
103    ; CHECK-NEXT: $h0 = COPY [[COPY1]]
104    ; CHECK-NEXT: RET_ReallyLR implicit $h0
105    %ptr:gpr(p0) = COPY $x0
106    %ptr2int:gpr(s64) = G_PTRTOINT %ptr(p0)
107    %int:gpr(s16) = G_TRUNC %ptr2int(s64)
108    $h0 = COPY %int(s16)
109    RET_ReallyLR implicit $h0
110...
111
112---
113name:            ptrtoint_s8_p0
114legalized:       true
115regBankSelected: true
116
117registers:
118  - { id: 0, class: gpr }
119  - { id: 1, class: gpr }
120body:             |
121  bb.0:
122    liveins: $x0
123    ; CHECK-LABEL: name: ptrtoint_s8_p0
124    ; CHECK: liveins: $x0
125    ; CHECK-NEXT: {{  $}}
126    ; CHECK-NEXT: %ptr:gpr64 = COPY $x0
127    ; CHECK-NEXT: %int:gpr32 = COPY %ptr.sub_32
128    ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr32 = COPY %int
129    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr8 = COPY [[COPY]].bsub
130    ; CHECK-NEXT: $b0 = COPY [[COPY1]]
131    ; CHECK-NEXT: RET_ReallyLR implicit $b0
132    %ptr:gpr(p0) = COPY $x0
133    %ptr2int:gpr(s64) = G_PTRTOINT %ptr(p0)
134    %int:gpr(s8) = G_TRUNC %ptr2int(s64)
135    $b0 = COPY %int(s8)
136    RET_ReallyLR implicit $b0
137
138...
139---
140name:            ptrtoint_s1_p0
141legalized:       true
142regBankSelected: true
143
144registers:
145  - { id: 0, class: gpr }
146  - { id: 1, class: gpr }
147body:             |
148  bb.0:
149    liveins: $x0
150    ; CHECK-LABEL: name: ptrtoint_s1_p0
151    ; CHECK: liveins: $x0
152    ; CHECK-NEXT: {{  $}}
153    ; CHECK-NEXT: %ptr:gpr64 = COPY $x0
154    ; CHECK-NEXT: %ptr2int:gpr64common = COPY %ptr
155    ; CHECK-NEXT: %trunc:gpr32common = COPY %ptr2int.sub_32
156    ; CHECK-NEXT: %ext:gpr32sp = ANDWri %trunc, 0
157    ; CHECK-NEXT: $w0 = COPY %ext
158    ; CHECK-NEXT: RET_ReallyLR implicit $w0
159    %ptr:gpr(p0) = COPY $x0
160    %ptr2int:gpr(s64) = G_PTRTOINT %ptr(p0)
161    %one:gpr(s32) = G_CONSTANT i32 1
162    %trunc:gpr(s32) = G_TRUNC %ptr2int(s64)
163    %ext:gpr(s32) = G_AND %trunc, %one
164    $w0 = COPY %ext(s32)
165    RET_ReallyLR implicit $w0
166...
167---
168name:            inttoptr_v2p0_v2s64
169legalized:       true
170regBankSelected: true
171tracksRegLiveness: true
172body:             |
173  bb.0:
174    liveins: $q0, $x0
175    ; CHECK-LABEL: name: inttoptr_v2p0_v2s64
176    ; CHECK: liveins: $q0, $x0
177    ; CHECK-NEXT: {{  $}}
178    ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
179    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY [[COPY]].dsub
180    ; CHECK-NEXT: $x0 = COPY [[COPY1]]
181    ; CHECK-NEXT: RET_ReallyLR implicit $x0
182    %1:fpr(<2 x s64>) = COPY $q0
183    %2:fpr(<2 x p0>) = G_INTTOPTR %1(<2 x s64>)
184    %4:gpr(s64) = G_CONSTANT i64 0
185    %3:fpr(p0) = G_EXTRACT_VECTOR_ELT %2(<2 x p0>), %4(s64)
186    $x0 = COPY %3(p0)
187    RET_ReallyLR implicit $x0
188...
189...
190---
191name:            ptrtoint_v2s64_v2p0
192legalized:       true
193regBankSelected: true
194tracksRegLiveness: true
195body:             |
196  bb.0:
197    liveins: $q0
198    ; CHECK-LABEL: name: ptrtoint_v2s64_v2p0
199    ; CHECK: liveins: $q0
200    ; CHECK-NEXT: {{  $}}
201    ; CHECK-NEXT: %ptr:fpr128 = COPY $q0
202    ; CHECK-NEXT: $q0 = COPY %ptr
203    ; CHECK-NEXT: RET_ReallyLR implicit $q0
204    %ptr:fpr(<2 x p0>) = COPY $q0
205    %int:fpr(<2 x s64>) = G_PTRTOINT %ptr(<2 x p0>)
206    $q0 = COPY %int(<2 x s64>)
207    RET_ReallyLR implicit $q0
208...
209