brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · aebd36e Raw
184 lines · plain
1# RUN: llc -mtriple=aarch64--linux-gnu -run-pass=aarch64-ldst-opt %s -verify-machineinstrs -o - | FileCheck %s2---3name: promote-load-from-store4tracksRegLiveness: true5body: |6  bb.0:7    liveins: $w1, $x0, $lr8 9    STRWui killed $w1, $x0, 0 :: (store (s32))10    CFI_INSTRUCTION 011    CFI_INSTRUCTION 012    CFI_INSTRUCTION 013    CFI_INSTRUCTION 014    CFI_INSTRUCTION 015    CFI_INSTRUCTION 016    CFI_INSTRUCTION 017    CFI_INSTRUCTION 018    CFI_INSTRUCTION 019    CFI_INSTRUCTION 020    CFI_INSTRUCTION 021    CFI_INSTRUCTION 022    CFI_INSTRUCTION 023    CFI_INSTRUCTION 024    CFI_INSTRUCTION 025    CFI_INSTRUCTION 026    CFI_INSTRUCTION 027    CFI_INSTRUCTION 028    CFI_INSTRUCTION 029    CFI_INSTRUCTION 030    $w0 = LDRHHui killed $x0, 1 :: (load (s16))31    RET $lr, implicit $w032 33...34# Don't count transient instructions towards search limits.35# CHECK-LABEL: name: promote-load-from-store36# CHECK: STRWui $w137# CHECK: UBFMWri killed $w138---39name: store-pair40tracksRegLiveness: true41body: |42  bb.0:43    liveins: $w1, $x0, $lr44 45    STRWui $w1, $x0, 0 :: (store (s32))46    CFI_INSTRUCTION 047    CFI_INSTRUCTION 048    CFI_INSTRUCTION 049    CFI_INSTRUCTION 050    CFI_INSTRUCTION 051    CFI_INSTRUCTION 052    CFI_INSTRUCTION 053    CFI_INSTRUCTION 054    CFI_INSTRUCTION 055    CFI_INSTRUCTION 056    CFI_INSTRUCTION 057    CFI_INSTRUCTION 058    CFI_INSTRUCTION 059    CFI_INSTRUCTION 060    CFI_INSTRUCTION 061    CFI_INSTRUCTION 062    CFI_INSTRUCTION 063    CFI_INSTRUCTION 064    CFI_INSTRUCTION 065    CFI_INSTRUCTION 066    STRWui killed $w1, killed $x0, 1 :: (store (s32))67    RET $lr68 69...70# CHECK-LABEL: name: store-pair71# CHECK: STPWi72---73name: store-pair-clearkill074tracksRegLiveness: true75body: |76  bb.0:77    liveins: $w1, $x0, $lr78 79    STRWui $w1, $x0, 0 :: (store (s32))80    $w2 = COPY $w181    $x3 = COPY $x082    STRWui killed $w1, killed $x0, 1 :: (store (s32))83    RET $lr84...85# When merging a lower store with an upper one, we must clear kill flags on86# the lower store.87# CHECK-LABEL: store-pair-clearkill088# CHECK-NOT: STPWi $w1, killed $w1, $x0, 0 :: (store (s32))89# CHECK: STPWi $w1, $w1, $x0, 0 :: (store (s32))90# CHECK: $w2 = COPY $w191# CHECK: RET $lr92---93name: store-pair-clearkill194tracksRegLiveness: true95body: |96  bb.0:97    liveins: $x0, $lr98 99    $w1 = MOVi32imm 13100    $w2 = MOVi32imm 7101    STRWui $w1, $x0, 1 :: (store (s32))102    $w2 = COPY killed $w1103    STRWui killed $w2, $x0, 0 :: (store (s32))104 105    $w1 = MOVi32imm 42106    $w2 = MOVi32imm 7107    STRWui $w1, $x0, 0 :: (store (s32))108    $w2 = COPY killed $w1109    STRWui killed $w2, killed $x0, 1 :: (store (s32))110 111    RET $lr112...113# When merging an upper store with a lower one, kill flags along the way need114# to be removed; In this case the kill flag on $w1.115# CHECK-LABEL: store-pair-clearkill1116# CHECK: $w1 = MOVi32imm117# CHECK: $w2 = MOVi32imm118# CHECK-NOT: $w2 = COPY killed $w1119# CHECK: $w2 = COPY $w1120# CHECK: STPWi killed $w2, $w1, $x0, 0121 122# CHECK: $w1 = MOVi32imm123# CHECK: $w2 = MOVi32imm124# CHECK-NOT: $w2 = COPY killed $w1125# CHECK: $w2 = COPY $w1126# CHECK: STPWi $w1, killed $w2, killed $x0, 0127---128name: store-load-clearkill129tracksRegLiveness: true130body: |131  bb.0:132    liveins: $w1133 134    STRWui $w1, $sp, 0 :: (store (s32))135    $wzr = COPY killed $w1 ; killing use of $w1136    $w11 = LDRWui $sp, 0 :: (load (s32))137    HINT 0, implicit $w11 ; some use of $w11138...139# When replaceing the load of a store-load pair with a copy the kill flags140# along the way need to be cleared.141# CHECK-LABEL: name: store-load-clearkill142# CHECK: STRWui $w1, $sp, 0 :: (store (s32))143# CHECK-NOT: COPY killed $w1144# CHECK: $wzr = COPY $w1145# CHECK: $w11 = ORRWrs $wzr, $w1, 0146# CHECK: HINT 0, implicit $w11147---148name: promote-load-from-store-undef149tracksRegLiveness: true150body: |151  bb.0:152    liveins: $x0, $x2, $lr153 154    STRWui undef $w1, $x0, 0 :: (store (s32))155    $w0 = LDRBBui $x0, 1 :: (load (s16))156    STRHHui undef $w3, $x2, 0 :: (store (s32))157    $w1 = LDRBBui $x2, 0 :: (load (s32))158    RET $lr, implicit $w0159...160# CHECK-LABEL: name: promote-load-from-store-undef161# CHECK: STRWui undef $w1162# CHECK: UBFMWri undef $w1163# CHECK: STRHHui undef $w3164# CHECK: ANDWri undef $w3165---166name: promote-load-from-store-trivial-kills167tracksRegLiveness: true168body: |169  bb.0:170    liveins: $x0, $lr171 172    STRXui $x0, $sp, 0 :: (store (s64))173    STRXui killed $x0, $sp, 2 :: (store (s64))174    $x0 = LDRXui $sp, 0 :: (load (s64))175    BL &bar, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0, implicit-def $sp176    RET $lr177...178# CHECK-LABEL: name: promote-load-from-store-trivial-kills179# CHECK: STRXui $x0, $sp, 0180# CHECK: STRXui $x0, $sp, 2181# CHECK-NOT: LDRXui182# CHECK-NOT: ORR183# CHECK: BL &bar, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0, implicit-def $sp184