1# RUN: llc -O0 -mtriple=aarch64 -run-pass=instruction-select -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 void @frame_index() { 7 %ptr0 = alloca i64 8 ret void 9 } 10 11 define i8* @ptr_mask(i8* %in) { ret i8* undef } 12 13 @var_local = global i8 0 14 define i8* @global_local() { ret i8* undef } 15 16 @var_got = external dso_local global i8 17 define i8* @global_got() { ret i8* undef } 18 19 define void @icmp() { ret void } 20 define void @fcmp() { ret void } 21 22 define void @phi() { ret void } 23 24 define 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:gpr64 = 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:gpr64 = 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 %6(s1) = G_TRUNC %1(s32) 145 %9(s32) = G_ANYEXT %6 146 $w0 = COPY %9(s32) 147 148 %2(s64) = COPY $x0 149 %3(s32) = G_ICMP intpred(uge), %2, %2 150 %7(s1) = G_TRUNC %3(s32) 151 %10(s32) = G_ANYEXT %7 152 $w0 = COPY %10(s32) 153 154 %4(p0) = COPY $x0 155 %5(s32) = G_ICMP intpred(ne), %4, %4 156 %8(s1) = G_TRUNC %5(s32) 157 %11(s32) = G_ANYEXT %8 158 $w0 = COPY %11(s32) 159... 160 161--- 162# CHECK-LABEL: name: fcmp 163name: fcmp 164legalized: true 165regBankSelected: true 166 167# CHECK: registers: 168# CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '' } 169# CHECK-NEXT: - { id: 1, class: gpr32, preferred-register: '' } 170# CHECK-NEXT: - { id: 2, class: fpr64, preferred-register: '' } 171# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '' } 172# CHECK-NEXT: - { id: 4, class: gpr32, preferred-register: '' } 173# CHECK-NEXT: - { id: 5, class: gpr32, preferred-register: '' } 174registers: 175 - { id: 0, class: fpr } 176 - { id: 1, class: gpr } 177 - { id: 2, class: fpr } 178 - { id: 3, class: gpr } 179 - { id: 4, class: gpr } 180 - { id: 5, class: gpr } 181 - { id: 6, class: gpr } 182 - { id: 7, class: gpr } 183 184# CHECK: body: 185# CHECK: FCMPSrr %0, %0, implicit-def $nzcv 186# CHECK: [[TST_MI:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 5, implicit $nzcv 187# CHECK: [[TST_GT:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 13, implicit $nzcv 188# CHECK: %1:gpr32 = ORRWrr [[TST_MI]], [[TST_GT]] 189 190# CHECK: FCMPDrr %2, %2, implicit-def $nzcv 191# CHECK: %3:gpr32 = CSINCWr $wzr, $wzr, 4, implicit $nzcv 192 193body: | 194 bb.0: 195 liveins: $w0, $x0 196 197 %0(s32) = COPY $s0 198 %1(s32) = G_FCMP floatpred(one), %0, %0 199 %4(s1) = G_TRUNC %1(s32) 200 %6(s32) = G_ANYEXT %4 201 $w0 = COPY %6(s32) 202 203 %2(s64) = COPY $d0 204 %3(s32) = G_FCMP floatpred(uge), %2, %2 205 %5(s1) = G_TRUNC %3(s32) 206 %7(s32) = G_ANYEXT %5 207 $w0 = COPY %7(s32) 208 209... 210 211--- 212# CHECK-LABEL: name: phi 213name: phi 214legalized: true 215regBankSelected: true 216tracksRegLiveness: true 217 218# CHECK: registers: 219# CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '' } 220# CHECK-NEXT: - { id: 1, class: gpr, preferred-register: '' } 221# CHECK-NEXT: - { id: 2, class: fpr32, preferred-register: '' } 222# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '' } 223registers: 224 - { id: 0, class: fpr } 225 - { id: 1, class: gpr } 226 - { id: 2, class: fpr } 227 228# CHECK: body: 229# CHECK: bb.1: 230# CHECK: %2:fpr32 = PHI %0, %bb.0, %2, %bb.1 231 232body: | 233 bb.0: 234 liveins: $s0, $w0 235 successors: %bb.1 236 %0(s32) = COPY $s0 237 %3:gpr(s32) = COPY $w0 238 %1(s1) = G_TRUNC %3 239 240 bb.1: 241 successors: %bb.1, %bb.2 242 %2(s32) = PHI %0, %bb.0, %2, %bb.1 243 G_BRCOND %1, %bb.1 244 245 bb.2: 246 $s0 = COPY %2 247 RET_ReallyLR implicit $s0 248... 249 250--- 251# CHECK-LABEL: name: select 252name: select 253legalized: true 254regBankSelected: true 255tracksRegLiveness: true 256 257# CHECK: registers: 258# CHECK-NEXT: - { id: 0, class: gpr32, preferred-register: '' } 259# CHECK-NEXT: - { id: 1, class: gpr32, preferred-register: '' } 260# CHECK-NEXT: - { id: 2, class: gpr32, preferred-register: '' } 261# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '' } 262# CHECK-NEXT: - { id: 4, class: gpr64, preferred-register: '' } 263# CHECK-NEXT: - { id: 5, class: gpr64, preferred-register: '' } 264# CHECK-NEXT: - { id: 6, class: gpr64, preferred-register: '' } 265# CHECK-NEXT: - { id: 7, class: gpr64, preferred-register: '' } 266# CHECK-NEXT: - { id: 8, class: gpr64, preferred-register: '' } 267# CHECK-NEXT: - { id: 9, class: gpr64, preferred-register: '' } 268registers: 269 - { id: 0, class: gpr } 270 - { id: 1, class: gpr } 271 - { id: 2, class: gpr } 272 - { id: 3, class: gpr } 273 - { id: 4, class: gpr } 274 - { id: 5, class: gpr } 275 - { id: 6, class: gpr } 276 - { id: 7, class: gpr } 277 - { id: 8, class: gpr } 278 - { id: 9, class: gpr } 279 280# CHECK: body: 281# CHECK: ANDSWri %10, 0, implicit-def $nzcv 282# CHECK: %3:gpr32 = CSELWr %1, %2, 1, implicit $nzcv 283# CHECK: ANDSWri %10, 0, implicit-def $nzcv 284# CHECK: %6:gpr64 = CSELXr %4, %5, 1, implicit $nzcv 285# CHECK: ANDSWri %10, 0, implicit-def $nzcv 286# CHECK: %9:gpr64 = CSELXr %7, %8, 1, implicit $nzcv 287body: | 288 bb.0: 289 liveins: $w0, $w1, $w2 290 %10:gpr(s32) = COPY $w0 291 %0(s1) = G_TRUNC %10 292 293 %1(s32) = COPY $w1 294 %2(s32) = COPY $w2 295 %3(s32) = G_SELECT %0, %1, %2 296 $w0 = COPY %3(s32) 297 298 %4(s64) = COPY $x0 299 %5(s64) = COPY $x1 300 %6(s64) = G_SELECT %0, %4, %5 301 $x0 = COPY %6(s64) 302 303 %7(p0) = COPY $x0 304 %8(p0) = COPY $x1 305 %9(p0) = G_SELECT %0, %7, %8 306 $x0 = COPY %9(p0) 307... 308