292 lines · plain
1# RUN: llc -O0 -mtriple=aarch64 -run-pass=instruction-select -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,LINUX-DEFAULT2 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 i648 ret void9 }10 11 define dso_local ptr @ptr_mask(ptr %in) { ret ptr undef }12 13 @var_local = dso_local global i8 014 define dso_local ptr @global_local() { ret ptr undef }15 16 @var_got = external dso_local global i817 define dso_local ptr @global_got() { ret ptr 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_index29name: frame_index30legalized: true31regBankSelected: true32 33# CHECK: registers:34# CHECK-NEXT: - { id: 0, class: gpr64sp, preferred-register: '', flags: [ ] }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, 043body: |44 bb.0:45 %0(p0) = G_FRAME_INDEX %stack.0.ptr046 $x0 = COPY %0(p0)47...48 49---50 51---52# CHECK-LABEL: name: ptr_mask53name: ptr_mask54legalized: true55regBankSelected: true56 57# CHECK: body:58# CHECK: %2:gpr64sp = ANDXri %0, 806059body: |60 bb.0:61 liveins: $x062 %0:gpr(p0) = COPY $x063 %const:gpr(s64) = G_CONSTANT i64 -864 %1:gpr(p0) = G_PTRMASK %0, %const65 $x0 = COPY %1(p0)66...67 68---69# Global defined in the same linkage unit so no GOT is needed70# CHECK-LABEL: name: global_local71name: global_local72legalized: true73regBankSelected: true74registers: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_local79body: |80 bb.0:81 %0(p0) = G_GLOBAL_VALUE @var_local82 $x0 = COPY %0(p0)83...84 85---86# CHECK-LABEL: name: global_got87name: global_got88legalized: true89regBankSelected: true90registers: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_got95body: |96 bb.0:97 %0(p0) = G_GLOBAL_VALUE @var_got98 $x0 = COPY %0(p0)99...100 101---102# CHECK-LABEL: name: icmp103name: icmp104legalized: true105regBankSelected: true106 107# CHECK: registers:108# CHECK-NEXT: - { id: 0, class: gpr32, preferred-register: '', flags: [ ] }109# CHECK-NEXT: - { id: 1, class: gpr32, preferred-register: '', flags: [ ] }110# CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '', flags: [ ] }111# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '', flags: [ ] }112# CHECK-NEXT: - { id: 4, class: gpr64, preferred-register: '', flags: [ ] }113# CHECK-NEXT: - { id: 5, class: gpr32, preferred-register: '', flags: [ ] }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 $nzcv130# CHECK: %1:gpr32 = CSINCWr $wzr, $wzr, 1, implicit $nzcv131 132# CHECK: SUBSXrr %2, %2, implicit-def $nzcv133# CHECK: %3:gpr32 = CSINCWr $wzr, $wzr, 3, implicit $nzcv134 135# CHECK: SUBSXrr %4, %4, implicit-def $nzcv136# CHECK: %5:gpr32 = CSINCWr $wzr, $wzr, 0, implicit $nzcv137 138body: |139 bb.0:140 liveins: $w0, $x0141 142 %0(s32) = COPY $w0143 %1(s32) = G_ICMP intpred(eq), %0, %0144 $w0 = COPY %1145 146 %2(s64) = COPY $x0147 %3(s32) = G_ICMP intpred(uge), %2, %2148 $w0 = COPY %3149 150 %4(p0) = COPY $x0151 %5(s32) = G_ICMP intpred(ne), %4, %4152 $w0 = COPY %5153...154 155---156# CHECK-LABEL: name: fcmp157name: fcmp158legalized: true159regBankSelected: true160 161# CHECK: registers:162# CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '', flags: [ ] }163# CHECK-NEXT: - { id: 1, class: gpr32, preferred-register: '', flags: [ ] }164# CHECK-NEXT: - { id: 2, class: fpr64, preferred-register: '', flags: [ ] }165# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '', flags: [ ] }166# CHECK-NEXT: - { id: 4, class: gpr32, preferred-register: '', flags: [ ] }167# CHECK-NEXT: - { id: 5, class: gpr32, preferred-register: '', flags: [ ] }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 $nzcv176# CHECK: [[TST_MI:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 5, implicit $nzcv177# CHECK: [[TST_GT:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 13, implicit $nzcv178# CHECK: %1:gpr32 = ORRWrr [[TST_MI]], [[TST_GT]]179 180# CHECK: nofpexcept FCMPDrr %2, %2, implicit-def $nzcv181# CHECK: %3:gpr32 = CSINCWr $wzr, $wzr, 4, implicit $nzcv182 183body: |184 bb.0:185 liveins: $w0, $x0186 187 %0(s32) = COPY $s0188 %1(s32) = G_FCMP floatpred(one), %0, %0189 $w0 = COPY %1190 191 %2(s64) = COPY $d0192 %3(s32) = G_FCMP floatpred(uge), %2, %2193 $w0 = COPY %3194 195...196 197---198# CHECK-LABEL: name: phi199name: phi200legalized: true201regBankSelected: true202tracksRegLiveness: true203 204# CHECK: registers:205# CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '', flags: [ ] }206# CHECK-NEXT: - { id: 1, class: gpr, preferred-register: '', flags: [ ] }207# CHECK-NEXT: - { id: 2, class: fpr32, preferred-register: '', flags: [ ] }208# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '', flags: [ ] }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.1217 218body: |219 bb.0:220 liveins: $s0, $w0221 successors: %bb.1222 %0(s32) = COPY $s0223 %3:gpr(s32) = COPY $w0224 225 bb.1:226 successors: %bb.1, %bb.2227 %2(s32) = PHI %0, %bb.0, %2, %bb.1228 G_BRCOND %3, %bb.1229 230 bb.2:231 $s0 = COPY %2232 RET_ReallyLR implicit $s0233...234 235---236# CHECK-LABEL: name: select237name: select238legalized: true239regBankSelected: true240tracksRegLiveness: true241 242# CHECK: registers:243# CHECK-NEXT: - { id: 0, class: gpr32, preferred-register: '', flags: [ ] }244# CHECK-NEXT: - { id: 1, class: gpr32, preferred-register: '', flags: [ ] }245# CHECK-NEXT: - { id: 2, class: gpr32, preferred-register: '', flags: [ ] }246# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '', flags: [ ] }247# CHECK-NEXT: - { id: 4, class: gpr64, preferred-register: '', flags: [ ] }248# CHECK-NEXT: - { id: 5, class: gpr64, preferred-register: '', flags: [ ] }249# CHECK-NEXT: - { id: 6, class: gpr64, preferred-register: '', flags: [ ] }250# CHECK-NEXT: - { id: 7, class: gpr64, preferred-register: '', flags: [ ] }251# CHECK-NEXT: - { id: 8, class: gpr64, preferred-register: '', flags: [ ] }252# CHECK-NEXT: - { id: 9, class: gpr64, preferred-register: '', flags: [ ] }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 $nzcv267# CHECK: %3:gpr32 = CSELWr %1, %2, 1, implicit $nzcv268# CHECK: ANDSWri %0, 0, implicit-def $nzcv269# CHECK: %6:gpr64 = CSELXr %4, %5, 1, implicit $nzcv270# CHECK: ANDSWri %0, 0, implicit-def $nzcv271# CHECK: %9:gpr64 = CSELXr %7, %8, 1, implicit $nzcv272body: |273 bb.0:274 liveins: $w0, $w1, $w2275 %0:gpr(s32) = COPY $w0276 277 %1(s32) = COPY $w1278 %2(s32) = COPY $w2279 %3(s32) = G_SELECT %0, %1, %2280 $w0 = COPY %3(s32)281 282 %4(s64) = COPY $x0283 %5(s64) = COPY $x1284 %6(s64) = G_SELECT %0, %4, %5285 $x0 = COPY %6(s64)286 287 %7(p0) = COPY $x0288 %8(p0) = COPY $x1289 %9(p0) = G_SELECT %0, %7, %8290 $x0 = COPY %9(p0)291...292