brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.7 KiB · ed24193 Raw
232 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 -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s3...4---5name:            flip_eq6alignment:       47legalized:       true8regBankSelected: true9body:             |10  ; CHECK-LABEL: name: flip_eq11  ; CHECK: bb.0:12  ; CHECK-NEXT:   successors: %bb.0(0x40000000), %bb.1(0x40000000)13  ; CHECK-NEXT:   liveins: $x014  ; CHECK-NEXT: {{  $}}15  ; CHECK-NEXT:   %copy:gpr64all = COPY $x016  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32all = COPY %copy.sub_3217  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY [[COPY]]18  ; CHECK-NEXT:   TBNZW [[COPY1]], 3, %bb.119  ; CHECK-NEXT:   B %bb.020  ; CHECK-NEXT: {{  $}}21  ; CHECK-NEXT: bb.1:22  ; CHECK-NEXT:   RET_ReallyLR23  bb.0:24    successors: %bb.0, %bb.125    liveins: $x026    %copy:gpr(s64) = COPY $x027 28    ; Check bit 3.29    %bit:gpr(s64) = G_CONSTANT i64 830    %zero:gpr(s64) = G_CONSTANT i64 031 32    ; 8 has the third bit set.33    %fold_cst:gpr(s64) = G_CONSTANT i64 834 35    ; This only has the third bit set if %copy does not. So, to walk through36    ; this, we want to use a TBNZW on %copy.37    %fold_me:gpr(s64) = G_XOR %copy, %fold_cst38 39    %and:gpr(s64) = G_AND %fold_me, %bit40    %cmp:gpr(s32) = G_ICMP intpred(eq), %and(s64), %zero41    G_BRCOND %cmp, %bb.142    G_BR %bb.043  bb.1:44    RET_ReallyLR45...46---47name:            flip_ne48alignment:       449legalized:       true50regBankSelected: true51body:             |52  ; CHECK-LABEL: name: flip_ne53  ; CHECK: bb.0:54  ; CHECK-NEXT:   successors: %bb.0(0x40000000), %bb.1(0x40000000)55  ; CHECK-NEXT:   liveins: $x056  ; CHECK-NEXT: {{  $}}57  ; CHECK-NEXT:   %copy:gpr64all = COPY $x058  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32all = COPY %copy.sub_3259  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY [[COPY]]60  ; CHECK-NEXT:   TBZW [[COPY1]], 3, %bb.161  ; CHECK-NEXT:   B %bb.062  ; CHECK-NEXT: {{  $}}63  ; CHECK-NEXT: bb.1:64  ; CHECK-NEXT:   RET_ReallyLR65  bb.0:66    successors: %bb.0, %bb.167    liveins: $x068 69    ; Same as eq case, but we should get a TBZW instead.70 71    %copy:gpr(s64) = COPY $x072    %bit:gpr(s64) = G_CONSTANT i64 873    %zero:gpr(s64) = G_CONSTANT i64 074    %fold_cst:gpr(s64) = G_CONSTANT i64 875    %fold_me:gpr(s64) = G_XOR %copy, %fold_cst76    %and:gpr(s64) = G_AND %fold_me, %bit77    %cmp:gpr(s32) = G_ICMP intpred(ne), %and(s64), %zero78    G_BRCOND %cmp, %bb.179    G_BR %bb.080  bb.1:81    RET_ReallyLR82...83---84name:            dont_flip_eq85alignment:       486legalized:       true87regBankSelected: true88body:             |89  ; CHECK-LABEL: name: dont_flip_eq90  ; CHECK: bb.0:91  ; CHECK-NEXT:   successors: %bb.0(0x40000000), %bb.1(0x40000000)92  ; CHECK-NEXT:   liveins: $x093  ; CHECK-NEXT: {{  $}}94  ; CHECK-NEXT:   %copy:gpr64all = COPY $x095  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32all = COPY %copy.sub_3296  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY [[COPY]]97  ; CHECK-NEXT:   TBZW [[COPY1]], 3, %bb.198  ; CHECK-NEXT:   B %bb.099  ; CHECK-NEXT: {{  $}}100  ; CHECK-NEXT: bb.1:101  ; CHECK-NEXT:   RET_ReallyLR102  bb.0:103    successors: %bb.0, %bb.1104    liveins: $x0105    %copy:gpr(s64) = COPY $x0106 107    ; Check bit 3.108    %bit:gpr(s64) = G_CONSTANT i64 8109    %zero:gpr(s64) = G_CONSTANT i64 0110 111    ; 7 does not have the third bit set.112    %fold_cst:gpr(s64) = G_CONSTANT i64 7113 114    ; This only has the third bit set if %copy does. So, to walk through this,115    ; we should have a TBZW on %copy.116    %fold_me:gpr(s64) = G_XOR %fold_cst, %copy117 118    %and:gpr(s64) = G_AND %fold_me, %bit119    %cmp:gpr(s32) = G_ICMP intpred(eq), %and(s64), %zero120    G_BRCOND %cmp, %bb.1121    G_BR %bb.0122  bb.1:123    RET_ReallyLR124...125---126name:            dont_flip_eq_zext127alignment:       4128legalized:       true129regBankSelected: true130tracksRegLiveness: true131body:             |132  ; CHECK-LABEL: name: dont_flip_eq_zext133  ; CHECK: bb.0:134  ; CHECK-NEXT:   successors: %bb.0(0x40000000), %bb.1(0x40000000)135  ; CHECK-NEXT: {{  $}}136  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32 = COPY $wzr137  ; CHECK-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:gpr64all = SUBREG_TO_REG 0, [[COPY]], %subreg.sub_32138  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr64 = COPY [[SUBREG_TO_REG]]139  ; CHECK-NEXT:   TBNZX [[COPY1]], 63, %bb.1140  ; CHECK-NEXT:   B %bb.0141  ; CHECK-NEXT: {{  $}}142  ; CHECK-NEXT: bb.1:143  ; CHECK-NEXT:   RET_ReallyLR144  bb.0:145    successors: %bb.0(0x40000000), %bb.1(0x40000000)146 147    %1:gpr(s32) = G_CONSTANT i32 0148    %3:gpr(s32) = G_CONSTANT i32 -1149    %4:gpr(s32) = G_XOR %1, %3150    %5:gpr(s64) = G_ZEXT %4(s32)151    %15:gpr(s64) = G_CONSTANT i64 0152    %13:gpr(s32) = G_ICMP intpred(slt), %5(s64), %15153    G_BRCOND %13, %bb.1154    G_BR %bb.0155  bb.1:156    RET_ReallyLR157...158---159name:            dont_flip_ne160alignment:       4161legalized:       true162regBankSelected: true163body:             |164  ; CHECK-LABEL: name: dont_flip_ne165  ; CHECK: bb.0:166  ; CHECK-NEXT:   successors: %bb.0(0x40000000), %bb.1(0x40000000)167  ; CHECK-NEXT:   liveins: $x0168  ; CHECK-NEXT: {{  $}}169  ; CHECK-NEXT:   %copy:gpr64all = COPY $x0170  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32all = COPY %copy.sub_32171  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY [[COPY]]172  ; CHECK-NEXT:   TBNZW [[COPY1]], 3, %bb.1173  ; CHECK-NEXT:   B %bb.0174  ; CHECK-NEXT: {{  $}}175  ; CHECK-NEXT: bb.1:176  ; CHECK-NEXT:   RET_ReallyLR177  bb.0:178    successors: %bb.0, %bb.1179    liveins: $x0180 181    ; Same as eq case, but we should get a TBNZW instead.182 183    %copy:gpr(s64) = COPY $x0184    %bit:gpr(s64) = G_CONSTANT i64 8185    %zero:gpr(s64) = G_CONSTANT i64 0186    %fold_cst:gpr(s64) = G_CONSTANT i64 7187    %fold_me:gpr(s64) = G_XOR %fold_cst, %copy188    %and:gpr(s64) = G_AND %fold_me, %bit189    %cmp:gpr(s32) = G_ICMP intpred(ne), %and(s64), %zero190    G_BRCOND %cmp, %bb.1191    G_BR %bb.0192  bb.1:193    RET_ReallyLR194...195---196name:            xor_chain197alignment:       4198legalized:       true199regBankSelected: true200body:             |201  ; CHECK-LABEL: name: xor_chain202  ; CHECK: bb.0:203  ; CHECK-NEXT:   successors: %bb.0(0x40000000), %bb.1(0x40000000)204  ; CHECK-NEXT:   liveins: $x0205  ; CHECK-NEXT: {{  $}}206  ; CHECK-NEXT:   %copy:gpr64all = COPY $x0207  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32all = COPY %copy.sub_32208  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY [[COPY]]209  ; CHECK-NEXT:   TBZW [[COPY1]], 3, %bb.1210  ; CHECK-NEXT:   B %bb.0211  ; CHECK-NEXT: {{  $}}212  ; CHECK-NEXT: bb.1:213  ; CHECK-NEXT:   RET_ReallyLR214  bb.0:215    successors: %bb.0, %bb.1216    liveins: $x0217    %copy:gpr(s64) = COPY $x0218    %bit:gpr(s64) = G_CONSTANT i64 8219    %zero:gpr(s64) = G_CONSTANT i64 0220    %fold_cst:gpr(s64) = G_CONSTANT i64 8221 222    ; The G_XORs cancel each other out, so we should get a TBZW.223    %xor1:gpr(s64) = G_XOR %copy, %fold_cst224    %xor2:gpr(s64) = G_XOR %xor1, %fold_cst225 226    %and:gpr(s64) = G_AND %xor2, %bit227    %cmp:gpr(s32) = G_ICMP intpred(eq), %and(s64), %zero228    G_BRCOND %cmp, %bb.1229    G_BR %bb.0230  bb.1:231    RET_ReallyLR232