161 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64-unknown-unknown -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s3#4# Test that we can produce a tbz when we have a sgt compare against -1.5#6# The bit tested should be the size of the test register minus 1.7#8 9...10---11name: tbzx_sgt12alignment: 413legalized: true14regBankSelected: true15body: |16 ; CHECK-LABEL: name: tbzx_sgt17 ; CHECK: bb.0:18 ; CHECK-NEXT: successors: %bb.0(0x40000000), %bb.1(0x40000000)19 ; CHECK-NEXT: liveins: $x020 ; CHECK-NEXT: {{ $}}21 ; CHECK-NEXT: %copy:gpr64 = COPY $x022 ; CHECK-NEXT: TBZX %copy, 63, %bb.123 ; CHECK-NEXT: B %bb.024 ; CHECK-NEXT: {{ $}}25 ; CHECK-NEXT: bb.1:26 ; CHECK-NEXT: RET_ReallyLR27 bb.0:28 successors: %bb.0, %bb.129 liveins: $x030 %copy:gpr(s64) = COPY $x031 %negative_one:gpr(s64) = G_CONSTANT i64 -132 %cmp:gpr(s32) = G_ICMP intpred(sgt), %copy(s64), %negative_one33 G_BRCOND %cmp, %bb.134 G_BR %bb.035 bb.1:36 RET_ReallyLR37 38...39---40name: tbzw_sgt41alignment: 442legalized: true43regBankSelected: true44body: |45 ; CHECK-LABEL: name: tbzw_sgt46 ; CHECK: bb.0:47 ; CHECK-NEXT: successors: %bb.0(0x40000000), %bb.1(0x40000000)48 ; CHECK-NEXT: liveins: $x049 ; CHECK-NEXT: {{ $}}50 ; CHECK-NEXT: %copy:gpr32 = COPY $w051 ; CHECK-NEXT: TBZW %copy, 31, %bb.152 ; CHECK-NEXT: B %bb.053 ; CHECK-NEXT: {{ $}}54 ; CHECK-NEXT: bb.1:55 ; CHECK-NEXT: RET_ReallyLR56 bb.0:57 successors: %bb.0, %bb.158 liveins: $x059 %copy:gpr(s32) = COPY $w060 %negative_one:gpr(s32) = G_CONSTANT i32 -161 %cmp:gpr(s32) = G_ICMP intpred(sgt), %copy(s32), %negative_one62 G_BRCOND %cmp, %bb.163 G_BR %bb.064 bb.1:65 RET_ReallyLR66 67...68---69name: no_tbz_not_negative_one70alignment: 471legalized: true72regBankSelected: true73body: |74 ; CHECK-LABEL: name: no_tbz_not_negative_one75 ; CHECK: bb.0:76 ; CHECK-NEXT: successors: %bb.0(0x40000000), %bb.1(0x40000000)77 ; CHECK-NEXT: liveins: $x078 ; CHECK-NEXT: {{ $}}79 ; CHECK-NEXT: %copy:gpr32sp = COPY $w080 ; CHECK-NEXT: [[SUBSWri:%[0-9]+]]:gpr32 = SUBSWri %copy, 1, 0, implicit-def $nzcv81 ; CHECK-NEXT: Bcc 12, %bb.1, implicit $nzcv82 ; CHECK-NEXT: B %bb.083 ; CHECK-NEXT: {{ $}}84 ; CHECK-NEXT: bb.1:85 ; CHECK-NEXT: RET_ReallyLR86 bb.0:87 successors: %bb.0, %bb.188 liveins: $x089 %copy:gpr(s32) = COPY $w090 %one:gpr(s32) = G_CONSTANT i32 191 %cmp:gpr(s32) = G_ICMP intpred(sgt), %copy(s32), %one92 G_BRCOND %cmp, %bb.193 G_BR %bb.094 bb.1:95 RET_ReallyLR96 97...98---99name: dont_fold_and100alignment: 4101legalized: true102regBankSelected: true103body: |104 ; CHECK-LABEL: name: dont_fold_and105 ; CHECK: bb.0:106 ; CHECK-NEXT: successors: %bb.0(0x40000000), %bb.1(0x40000000)107 ; CHECK-NEXT: liveins: $x0108 ; CHECK-NEXT: {{ $}}109 ; CHECK-NEXT: %copy:gpr64 = COPY $x0110 ; CHECK-NEXT: %and:gpr64sp = ANDXri %copy, 8000111 ; CHECK-NEXT: [[ADDSXri:%[0-9]+]]:gpr64 = ADDSXri %and, 1, 0, implicit-def $nzcv112 ; CHECK-NEXT: Bcc 12, %bb.1, implicit $nzcv113 ; CHECK-NEXT: B %bb.0114 ; CHECK-NEXT: {{ $}}115 ; CHECK-NEXT: bb.1:116 ; CHECK-NEXT: RET_ReallyLR117 bb.0:118 successors: %bb.0, %bb.1119 liveins: $x0120 %copy:gpr(s64) = COPY $x0121 %bit:gpr(s64) = G_CONSTANT i64 8122 %negative_one:gpr(s64) = G_CONSTANT i64 -1123 %c:gpr(s64) = G_CONSTANT i64 8124 %and:gpr(s64) = G_AND %copy, %bit125 %cmp:gpr(s32) = G_ICMP intpred(sgt), %and(s64), %negative_one126 G_BRCOND %cmp, %bb.1127 G_BR %bb.0128 bb.1:129 RET_ReallyLR130 131...132---133name: dont_commute134alignment: 4135legalized: true136regBankSelected: true137body: |138 ; CHECK-LABEL: name: dont_commute139 ; CHECK: bb.0:140 ; CHECK-NEXT: successors: %bb.0(0x40000000), %bb.1(0x40000000)141 ; CHECK-NEXT: liveins: $x0142 ; CHECK-NEXT: {{ $}}143 ; CHECK-NEXT: %copy:gpr64 = COPY $x0144 ; CHECK-NEXT: %negative_one:gpr64 = MOVi64imm -1145 ; CHECK-NEXT: [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr %negative_one, %copy, implicit-def $nzcv146 ; CHECK-NEXT: Bcc 12, %bb.1, implicit $nzcv147 ; CHECK-NEXT: B %bb.0148 ; CHECK-NEXT: {{ $}}149 ; CHECK-NEXT: bb.1:150 ; CHECK-NEXT: RET_ReallyLR151 bb.0:152 successors: %bb.0, %bb.1153 liveins: $x0154 %copy:gpr(s64) = COPY $x0155 %negative_one:gpr(s64) = G_CONSTANT i64 -1156 %cmp:gpr(s32) = G_ICMP intpred(sgt), %negative_one, %copy(s64)157 G_BRCOND %cmp, %bb.1158 G_BR %bb.0159 bb.1:160 RET_ReallyLR161