161 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -O0 -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s3 4--- |5 target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"6 7 define void @xor_s32_gpr() { ret void }8 define void @xor_s64_gpr() { ret void }9 define void @xor_constant_n1_s32_gpr() { ret void }10 define void @xor_constant_n1_s64_gpr() { ret void }11 define void @xor_constant_n1_s32_gpr_2bb() { ret void }12 13...14 15---16# Check that we select a 32-bit GPR G_XOR into EORWrr on GPR32.17# Also check that we constrain the register class of the COPY to GPR32.18name: xor_s32_gpr19legalized: true20regBankSelected: true21 22registers:23 - { id: 0, class: gpr }24 - { id: 1, class: gpr }25 - { id: 2, class: gpr }26 27body: |28 bb.0:29 liveins: $w0, $w130 31 ; CHECK-LABEL: name: xor_s32_gpr32 ; CHECK: liveins: $w0, $w133 ; CHECK-NEXT: {{ $}}34 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w035 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w136 ; CHECK-NEXT: [[EORWrr:%[0-9]+]]:gpr32 = EORWrr [[COPY]], [[COPY1]]37 ; CHECK-NEXT: $w0 = COPY [[EORWrr]]38 %0(s32) = COPY $w039 %1(s32) = COPY $w140 %2(s32) = G_XOR %0, %141 $w0 = COPY %2(s32)42...43 44---45# Same as xor_s64_gpr, for 64-bit operations.46name: xor_s64_gpr47legalized: true48regBankSelected: true49 50registers:51 - { id: 0, class: gpr }52 - { id: 1, class: gpr }53 - { id: 2, class: gpr }54 55body: |56 bb.0:57 liveins: $x0, $x158 59 ; CHECK-LABEL: name: xor_s64_gpr60 ; CHECK: liveins: $x0, $x161 ; CHECK-NEXT: {{ $}}62 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x063 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x164 ; CHECK-NEXT: [[EORXrr:%[0-9]+]]:gpr64 = EORXrr [[COPY]], [[COPY1]]65 ; CHECK-NEXT: $x0 = COPY [[EORXrr]]66 %0(s64) = COPY $x067 %1(s64) = COPY $x168 %2(s64) = G_XOR %0, %169 $x0 = COPY %2(s64)70...71 72---73# Check that we select a 32-bit GPR G_XOR into EORWrr on GPR32.74# Also check that we constrain the register class of the COPY to GPR32.75name: xor_constant_n1_s32_gpr76legalized: true77regBankSelected: true78 79registers:80 - { id: 0, class: gpr }81 - { id: 1, class: gpr }82 - { id: 2, class: gpr }83 84body: |85 bb.0:86 liveins: $w087 88 ; CHECK-LABEL: name: xor_constant_n1_s32_gpr89 ; CHECK: liveins: $w090 ; CHECK-NEXT: {{ $}}91 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w092 ; CHECK-NEXT: [[ORNWrr:%[0-9]+]]:gpr32 = ORNWrr $wzr, [[COPY]]93 ; CHECK-NEXT: $w0 = COPY [[ORNWrr]]94 %0(s32) = COPY $w095 %1(s32) = G_CONSTANT i32 -196 %2(s32) = G_XOR %0, %197 $w0 = COPY %2(s32)98...99 100---101# Same as xor_constant_n1_s64_gpr, for 64-bit operations.102name: xor_constant_n1_s64_gpr103legalized: true104regBankSelected: true105 106registers:107 - { id: 0, class: gpr }108 - { id: 1, class: gpr }109 - { id: 2, class: gpr }110 111body: |112 bb.0:113 liveins: $x0114 115 ; CHECK-LABEL: name: xor_constant_n1_s64_gpr116 ; CHECK: liveins: $x0117 ; CHECK-NEXT: {{ $}}118 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0119 ; CHECK-NEXT: [[ORNXrr:%[0-9]+]]:gpr64 = ORNXrr $xzr, [[COPY]]120 ; CHECK-NEXT: $x0 = COPY [[ORNXrr]]121 %0(s64) = COPY $x0122 %1(s64) = G_CONSTANT i64 -1123 %2(s64) = G_XOR %0, %1124 $x0 = COPY %2(s64)125...126 127---128# Check that we can obtain constants from other basic blocks.129name: xor_constant_n1_s32_gpr_2bb130legalized: true131regBankSelected: true132 133registers:134 - { id: 0, class: gpr }135 - { id: 1, class: gpr }136 - { id: 2, class: gpr }137 138 139body: |140 ; CHECK-LABEL: name: xor_constant_n1_s32_gpr_2bb141 ; CHECK: bb.0:142 ; CHECK-NEXT: successors: %bb.1(0x80000000)143 ; CHECK-NEXT: liveins: $w0, $w1144 ; CHECK-NEXT: {{ $}}145 ; CHECK-NEXT: B %bb.1146 ; CHECK-NEXT: {{ $}}147 ; CHECK-NEXT: bb.1:148 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0149 ; CHECK-NEXT: [[ORNWrr:%[0-9]+]]:gpr32 = ORNWrr $wzr, [[COPY]]150 ; CHECK-NEXT: $w0 = COPY [[ORNWrr]]151 bb.0:152 liveins: $w0, $w1153 successors: %bb.1154 %1(s32) = G_CONSTANT i32 -1155 G_BR %bb.1156 bb.1:157 %0(s32) = COPY $w0158 %2(s32) = G_XOR %0, %1159 $w0 = COPY %2(s32)160...161