1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -O0 -mtriple=aarch64-apple-ios -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK 3--- 4name: ptr_add 5legalized: true 6regBankSelected: true 7body: | 8 bb.0: 9 liveins: $x0 10 ; CHECK-LABEL: name: ptr_add 11 ; CHECK: liveins: $x0 12 ; CHECK-NEXT: {{ $}} 13 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 14 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64common = COPY [[COPY]] 15 ; CHECK-NEXT: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri [[COPY1]], 42, 0 16 ; CHECK-NEXT: $x0 = COPY [[ADDXri]] 17 %0:gpr(p0) = COPY $x0 18 %1:gpr(s64) = G_CONSTANT i64 42 19 %2:gpr(p0) = G_PTR_ADD %0, %1(s64) 20 $x0 = COPY %2(p0) 21... 22 23--- 24name: ptr_add_no_constant 25legalized: true 26regBankSelected: true 27body: | 28 bb.0: 29 liveins: $x0, $x1 30 ; CHECK-LABEL: name: ptr_add_no_constant 31 ; CHECK: liveins: $x0, $x1 32 ; CHECK-NEXT: {{ $}} 33 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 34 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1 35 ; CHECK-NEXT: [[ADDXrr:%[0-9]+]]:gpr64 = ADDXrr [[COPY]], [[COPY1]] 36 ; CHECK-NEXT: $x0 = COPY [[ADDXrr]] 37 %0:gpr(p0) = COPY $x0 38 %1:gpr(s64) = COPY $x1 39 %2:gpr(p0) = G_PTR_ADD %0, %1(s64) 40 $x0 = COPY %2(p0) 41... 42 43--- 44name: ptr_add_bad_imm 45legalized: true 46regBankSelected: true 47body: | 48 bb.0: 49 liveins: $x0, $x1 50 ; CHECK-LABEL: name: ptr_add_bad_imm 51 ; CHECK: liveins: $x0, $x1 52 ; CHECK-NEXT: {{ $}} 53 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 54 ; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 10000 55 ; CHECK-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64 = SUBREG_TO_REG 0, [[MOVi32imm]], %subreg.sub_32 56 ; CHECK-NEXT: [[ADDXrr:%[0-9]+]]:gpr64 = ADDXrr [[COPY]], [[SUBREG_TO_REG]] 57 ; CHECK-NEXT: $x0 = COPY [[ADDXrr]] 58 %0:gpr(p0) = COPY $x0 59 %1:gpr(s64) = G_CONSTANT i64 10000 60 %2:gpr(p0) = G_PTR_ADD %0, %1(s64) 61 $x0 = COPY %2(p0) 62... 63 64--- 65name: ptr_add_vec 66legalized: true 67regBankSelected: true 68body: | 69 bb.0: 70 liveins: $q0, $q1 71 ; CHECK-LABEL: name: ptr_add_vec 72 ; CHECK: liveins: $q0, $q1 73 ; CHECK-NEXT: {{ $}} 74 ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0 75 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1 76 ; CHECK-NEXT: [[ADDv2i64_:%[0-9]+]]:fpr128 = ADDv2i64 [[COPY]], [[COPY1]] 77 ; CHECK-NEXT: $q0 = COPY [[ADDv2i64_]] 78 %0:fpr(<2 x p0>) = COPY $q0 79 %1:fpr(<2 x s64>) = COPY $q1 80 %3:fpr(<2 x p0>) = G_PTR_ADD %0, %1(<2 x s64>) 81 $q0 = COPY %3(<2 x p0>) 82... 83--- 84name: ptr_add_neg_imm 85legalized: true 86regBankSelected: true 87body: | 88 bb.0: 89 liveins: $x0 90 ; CHECK-LABEL: name: ptr_add_neg_imm 91 ; CHECK: liveins: $x0 92 ; CHECK-NEXT: {{ $}} 93 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 94 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64common = COPY [[COPY]] 95 ; CHECK-NEXT: [[SUBSXri:%[0-9]+]]:gpr64 = SUBSXri [[COPY1]], 10, 0, implicit-def dead $nzcv 96 ; CHECK-NEXT: $x0 = COPY [[SUBSXri]] 97 %0:gpr(p0) = COPY $x0 98 %1:gpr(s64) = G_CONSTANT i64 -10 99 %2:gpr(p0) = G_PTR_ADD %0, %1(s64) 100 $x0 = COPY %2(p0) 101... 102--- 103name: ptr_add_arith_extended 104legalized: true 105regBankSelected: true 106body: | 107 bb.0: 108 liveins: $x0 109 ; CHECK-LABEL: name: ptr_add_arith_extended 110 ; CHECK: liveins: $x0 111 ; CHECK-NEXT: {{ $}} 112 ; CHECK-NEXT: %reg0:gpr32 = COPY $w0 113 ; CHECK-NEXT: %ptr:gpr64 = COPY $x1 114 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY %ptr 115 ; CHECK-NEXT: %ptr_add:gpr64sp = ADDXrx [[COPY]], %reg0, 18 116 ; CHECK-NEXT: $x0 = COPY %ptr_add 117 %reg0:gpr(s32) = COPY $w0 118 %ptr:gpr(p0) = COPY $x1 119 %ext:gpr(s64) = G_ZEXT %reg0(s32) 120 %cst:gpr(s64) = G_CONSTANT i64 2 121 %shift:gpr(s64) = G_SHL %ext, %cst(s64) 122 %ptr_add:gpr(p0) = G_PTR_ADD %ptr, %shift(s64) 123 $x0 = COPY %ptr_add(p0) 124... 125--- 126name: ptr_add_negated_reg 127legalized: true 128regBankSelected: true 129body: | 130 bb.0: 131 liveins: $x0, $x1 132 ; CHECK-LABEL: name: ptr_add_negated_reg 133 ; CHECK: liveins: $x0, $x1 134 ; CHECK-NEXT: {{ $}} 135 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 136 ; CHECK-NEXT: %src:gpr64 = COPY $x1 137 ; CHECK-NEXT: [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr [[COPY]], %src, implicit-def dead $nzcv 138 ; CHECK-NEXT: $x0 = COPY [[SUBSXrr]] 139 %0:gpr(p0) = COPY $x0 140 %src:gpr(s64) = COPY $x1 141 %1:gpr(s64) = G_CONSTANT i64 0 142 %neg:gpr(s64) = G_SUB %1, %src 143 %2:gpr(p0) = G_PTR_ADD %0, %neg(s64) 144 $x0 = COPY %2(p0) 145... 146