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