1# RUN: llc -O0 -mtriple=aarch64 -run-pass=instruction-select -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,LINUX-DEFAULT 2 3--- | 4 target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" 5 6 define dso_local void @frame_index() { 7 %ptr0 = alloca i64 8 ret void 9 } 10 11 define dso_local i8* @ptr_mask(i8* %in) { ret i8* undef } 12 13 @var_local = dso_local global i8 0 14 define dso_local i8* @global_local() { ret i8* undef } 15 16 @var_got = external dso_local global i8 17 define dso_local i8* @global_got() { ret i8* undef } 18 19 define dso_local void @icmp() { ret void } 20 define dso_local void @fcmp() { ret void } 21 22 define dso_local void @phi() { ret void } 23 24 define dso_local void @select() { ret void } 25... 26 27--- 28# CHECK-LABEL: name: frame_index 29name: frame_index 30legalized: true 31regBankSelected: true 32 33# CHECK: registers: 34# CHECK-NEXT: - { id: 0, class: gpr64sp, preferred-register: '' } 35registers: 36 - { id: 0, class: gpr } 37 38stack: 39 - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 } 40 41# CHECK: body: 42# CHECK: %0:gpr64sp = ADDXri %stack.0.ptr0, 0, 0 43body: | 44 bb.0: 45 %0(p0) = G_FRAME_INDEX %stack.0.ptr0 46 $x0 = COPY %0(p0) 47... 48 49--- 50 51--- 52# CHECK-LABEL: name: ptr_mask 53name: ptr_mask 54legalized: true 55regBankSelected: true 56 57# CHECK: body: 58# CHECK: %2:gpr64sp = ANDXri %0, 8060 59body: | 60 bb.0: 61 liveins: $x0 62 %0:gpr(p0) = COPY $x0 63 %const:gpr(s64) = G_CONSTANT i64 -8 64 %1:gpr(p0) = G_PTRMASK %0, %const 65 $x0 = COPY %1(p0) 66... 67 68--- 69# Global defined in the same linkage unit so no GOT is needed 70# CHECK-LABEL: name: global_local 71name: global_local 72legalized: true 73regBankSelected: true 74registers: 75 - { id: 0, class: gpr } 76 77# CHECK: body: 78# LINUX-DEFAULT: %0:gpr64common = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local 79body: | 80 bb.0: 81 %0(p0) = G_GLOBAL_VALUE @var_local 82 $x0 = COPY %0(p0) 83... 84 85--- 86# CHECK-LABEL: name: global_got 87name: global_got 88legalized: true 89regBankSelected: true 90registers: 91 - { id: 0, class: gpr } 92 93# CHECK: body: 94# LINUX-DEFAULT: %0:gpr64common = MOVaddr target-flags(aarch64-page) @var_got, target-flags(aarch64-pageoff, aarch64-nc) @var_got 95body: | 96 bb.0: 97 %0(p0) = G_GLOBAL_VALUE @var_got 98 $x0 = COPY %0(p0) 99... 100 101--- 102# CHECK-LABEL: name: icmp 103name: icmp 104legalized: true 105regBankSelected: true 106 107# CHECK: registers: 108# CHECK-NEXT: - { id: 0, class: gpr32, preferred-register: '' } 109# CHECK-NEXT: - { id: 1, class: gpr32, preferred-register: '' } 110# CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } 111# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '' } 112# CHECK-NEXT: - { id: 4, class: gpr64, preferred-register: '' } 113# CHECK-NEXT: - { id: 5, class: gpr32, preferred-register: '' } 114registers: 115 - { id: 0, class: gpr } 116 - { id: 1, class: gpr } 117 - { id: 2, class: gpr } 118 - { id: 3, class: gpr } 119 - { id: 4, class: gpr } 120 - { id: 5, class: gpr } 121 - { id: 6, class: gpr } 122 - { id: 7, class: gpr } 123 - { id: 8, class: gpr } 124 - { id: 9, class: gpr } 125 - { id: 10, class: gpr } 126 - { id: 11, class: gpr } 127 128# CHECK: body: 129# CHECK: SUBSWrr %0, %0, implicit-def $nzcv 130# CHECK: %1:gpr32 = CSINCWr $wzr, $wzr, 1, implicit $nzcv 131 132# CHECK: SUBSXrr %2, %2, implicit-def $nzcv 133# CHECK: %3:gpr32 = CSINCWr $wzr, $wzr, 3, implicit $nzcv 134 135# CHECK: SUBSXrr %4, %4, implicit-def $nzcv 136# CHECK: %5:gpr32 = CSINCWr $wzr, $wzr, 0, implicit $nzcv 137 138body: | 139 bb.0: 140 liveins: $w0, $x0 141 142 %0(s32) = COPY $w0 143 %1(s32) = G_ICMP intpred(eq), %0, %0 144 $w0 = COPY %1 145 146 %2(s64) = COPY $x0 147 %3(s32) = G_ICMP intpred(uge), %2, %2 148 $w0 = COPY %3 149 150 %4(p0) = COPY $x0 151 %5(s32) = G_ICMP intpred(ne), %4, %4 152 $w0 = COPY %5 153... 154 155--- 156# CHECK-LABEL: name: fcmp 157name: fcmp 158legalized: true 159regBankSelected: true 160 161# CHECK: registers: 162# CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '' } 163# CHECK-NEXT: - { id: 1, class: gpr32, preferred-register: '' } 164# CHECK-NEXT: - { id: 2, class: fpr64, preferred-register: '' } 165# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '' } 166# CHECK-NEXT: - { id: 4, class: gpr32, preferred-register: '' } 167# CHECK-NEXT: - { id: 5, class: gpr32, preferred-register: '' } 168registers: 169 - { id: 0, class: fpr } 170 - { id: 1, class: gpr } 171 - { id: 2, class: fpr } 172 - { id: 3, class: gpr } 173 174# CHECK: body: 175# CHECK: nofpexcept FCMPSrr %0, %0, implicit-def $nzcv 176# CHECK: [[TST_MI:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 5, implicit $nzcv 177# CHECK: [[TST_GT:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 13, implicit $nzcv 178# CHECK: %1:gpr32 = ORRWrr [[TST_MI]], [[TST_GT]] 179 180# CHECK: nofpexcept FCMPDrr %2, %2, implicit-def $nzcv 181# CHECK: %3:gpr32 = CSINCWr $wzr, $wzr, 4, implicit $nzcv 182 183body: | 184 bb.0: 185 liveins: $w0, $x0 186 187 %0(s32) = COPY $s0 188 %1(s32) = G_FCMP floatpred(one), %0, %0 189 $w0 = COPY %1 190 191 %2(s64) = COPY $d0 192 %3(s32) = G_FCMP floatpred(uge), %2, %2 193 $w0 = COPY %3 194 195... 196 197--- 198# CHECK-LABEL: name: phi 199name: phi 200legalized: true 201regBankSelected: true 202tracksRegLiveness: true 203 204# CHECK: registers: 205# CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '' } 206# CHECK-NEXT: - { id: 1, class: gpr, preferred-register: '' } 207# CHECK-NEXT: - { id: 2, class: fpr32, preferred-register: '' } 208# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '' } 209registers: 210 - { id: 0, class: fpr } 211 - { id: 1, class: gpr } 212 - { id: 2, class: fpr } 213 214# CHECK: body: 215# CHECK: bb.1: 216# CHECK: %2:fpr32 = PHI %0, %bb.0, %2, %bb.1 217 218body: | 219 bb.0: 220 liveins: $s0, $w0 221 successors: %bb.1 222 %0(s32) = COPY $s0 223 %3:gpr(s32) = COPY $w0 224 225 bb.1: 226 successors: %bb.1, %bb.2 227 %2(s32) = PHI %0, %bb.0, %2, %bb.1 228 G_BRCOND %3, %bb.1 229 230 bb.2: 231 $s0 = COPY %2 232 RET_ReallyLR implicit $s0 233... 234 235--- 236# CHECK-LABEL: name: select 237name: select 238legalized: true 239regBankSelected: true 240tracksRegLiveness: true 241 242# CHECK: registers: 243# CHECK-NEXT: - { id: 0, class: gpr32, preferred-register: '' } 244# CHECK-NEXT: - { id: 1, class: gpr32, preferred-register: '' } 245# CHECK-NEXT: - { id: 2, class: gpr32, preferred-register: '' } 246# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '' } 247# CHECK-NEXT: - { id: 4, class: gpr64, preferred-register: '' } 248# CHECK-NEXT: - { id: 5, class: gpr64, preferred-register: '' } 249# CHECK-NEXT: - { id: 6, class: gpr64, preferred-register: '' } 250# CHECK-NEXT: - { id: 7, class: gpr64, preferred-register: '' } 251# CHECK-NEXT: - { id: 8, class: gpr64, preferred-register: '' } 252# CHECK-NEXT: - { id: 9, class: gpr64, preferred-register: '' } 253registers: 254 - { id: 0, class: gpr } 255 - { id: 1, class: gpr } 256 - { id: 2, class: gpr } 257 - { id: 3, class: gpr } 258 - { id: 4, class: gpr } 259 - { id: 5, class: gpr } 260 - { id: 6, class: gpr } 261 - { id: 7, class: gpr } 262 - { id: 8, class: gpr } 263 - { id: 9, class: gpr } 264 265# CHECK: body: 266# CHECK: ANDSWri %0, 0, implicit-def $nzcv 267# CHECK: %3:gpr32 = CSELWr %1, %2, 1, implicit $nzcv 268# CHECK: ANDSWri %0, 0, implicit-def $nzcv 269# CHECK: %6:gpr64 = CSELXr %4, %5, 1, implicit $nzcv 270# CHECK: ANDSWri %0, 0, implicit-def $nzcv 271# CHECK: %9:gpr64 = CSELXr %7, %8, 1, implicit $nzcv 272body: | 273 bb.0: 274 liveins: $w0, $w1, $w2 275 %0:gpr(s32) = COPY $w0 276 277 %1(s32) = COPY $w1 278 %2(s32) = COPY $w2 279 %3(s32) = G_SELECT %0, %1, %2 280 $w0 = COPY %3(s32) 281 282 %4(s64) = COPY $x0 283 %5(s64) = COPY $x1 284 %6(s64) = G_SELECT %0, %4, %5 285 $x0 = COPY %6(s64) 286 287 %7(p0) = COPY $x0 288 %8(p0) = COPY $x1 289 %9(p0) = G_SELECT %0, %7, %8 290 $x0 = COPY %9(p0) 291... 292