brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 577bee3 Raw
119 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# Check folding an AND into a G_BRCOND which has been matched as a TB(N)Z.5...6---7name:            fold_and_rhs8alignment:       49legalized:       true10regBankSelected: true11body:             |12  ; CHECK-LABEL: name: fold_and_rhs13  ; CHECK: bb.0:14  ; CHECK-NEXT:   successors: %bb.0(0x40000000), %bb.1(0x40000000)15  ; CHECK-NEXT:   liveins: $x016  ; CHECK-NEXT: {{  $}}17  ; CHECK-NEXT:   %copy:gpr64all = COPY $x018  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32all = COPY %copy.sub_3219  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY [[COPY]]20  ; CHECK-NEXT:   TBNZW [[COPY1]], 3, %bb.121  ; CHECK-NEXT:   B %bb.022  ; CHECK-NEXT: {{  $}}23  ; CHECK-NEXT: bb.1:24  ; CHECK-NEXT:   RET_ReallyLR25  bb.0:26    successors: %bb.0, %bb.127    liveins: $x028    %copy:gpr(s64) = COPY $x029    %bit:gpr(s64) = G_CONSTANT i64 830    %zero:gpr(s64) = G_CONSTANT i64 031    %fold_cst:gpr(s64) = G_CONSTANT i64 832 33    ; tbnz (and x, 8), 3 == tbnz x, 3 because the third bit of x & 8 is 1 when34    ; the third bit of x is 1.35    %fold_me:gpr(s64) = G_AND %copy, %fold_cst36 37    %and:gpr(s64) = G_AND %fold_me, %bit38    %cmp:gpr(s32) = G_ICMP intpred(ne), %and(s64), %zero39    G_BRCOND %cmp, %bb.140    G_BR %bb.041  bb.1:42    RET_ReallyLR43...44---45name:            fold_and_lhs46alignment:       447legalized:       true48regBankSelected: true49body:             |50  ; CHECK-LABEL: name: fold_and_lhs51  ; CHECK: bb.0:52  ; CHECK-NEXT:   successors: %bb.0(0x40000000), %bb.1(0x40000000)53  ; CHECK-NEXT:   liveins: $x054  ; CHECK-NEXT: {{  $}}55  ; CHECK-NEXT:   %copy:gpr64all = COPY $x056  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32all = COPY %copy.sub_3257  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY [[COPY]]58  ; CHECK-NEXT:   TBNZW [[COPY1]], 3, %bb.159  ; CHECK-NEXT:   B %bb.060  ; CHECK-NEXT: {{  $}}61  ; CHECK-NEXT: bb.1:62  ; CHECK-NEXT:   RET_ReallyLR63  bb.0:64    successors: %bb.0, %bb.165    liveins: $x066    %copy:gpr(s64) = COPY $x067    %bit:gpr(s64) = G_CONSTANT i64 868    %zero:gpr(s64) = G_CONSTANT i64 069    %fold_cst:gpr(s64) = G_CONSTANT i64 870 71    ; Same as above, but with the constant on the other side.72    %fold_me:gpr(s64) = G_AND %fold_cst, %copy73 74    %and:gpr(s64) = G_AND %fold_me, %bit75    %cmp:gpr(s32) = G_ICMP intpred(ne), %and(s64), %zero76    G_BRCOND %cmp, %bb.177    G_BR %bb.078  bb.1:79    RET_ReallyLR80...81---82name:            dont_fold_and83alignment:       484legalized:       true85regBankSelected: true86body:             |87  ; CHECK-LABEL: name: dont_fold_and88  ; CHECK: bb.0:89  ; CHECK-NEXT:   successors: %bb.0(0x40000000), %bb.1(0x40000000)90  ; CHECK-NEXT:   liveins: $x091  ; CHECK-NEXT: {{  $}}92  ; CHECK-NEXT:   %copy:gpr64 = COPY $x093  ; CHECK-NEXT:   %fold_me:gpr64sp = ANDXri %copy, 409894  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32all = COPY %fold_me.sub_3295  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY [[COPY]]96  ; CHECK-NEXT:   TBNZW [[COPY1]], 3, %bb.197  ; CHECK-NEXT:   B %bb.098  ; CHECK-NEXT: {{  $}}99  ; CHECK-NEXT: bb.1:100  ; CHECK-NEXT:   RET_ReallyLR101  bb.0:102    successors: %bb.0, %bb.1103    liveins: $x0104    %copy:gpr(s64) = COPY $x0105    %bit:gpr(s64) = G_CONSTANT i64 8106    %zero:gpr(s64) = G_CONSTANT i64 0107 108    ; tbnz (and x, 7), 3 != tbnz x, 3, because the third bit of x & 7 is always109    ; zero.110    %fold_cst:gpr(s64) = G_CONSTANT i64 7111 112    %fold_me:gpr(s64) = G_AND %copy, %fold_cst113    %and:gpr(s64) = G_AND %fold_me, %bit114    %cmp:gpr(s32) = G_ICMP intpred(ne), %and(s64), %zero115    G_BRCOND %cmp, %bb.1116    G_BR %bb.0117  bb.1:118    RET_ReallyLR119