Home | History | Annotate | Download | only in AArch64
      1 # RUN: llc -mtriple=aarch64--linux-gnu -run-pass=aarch64-ldst-opt %s -verify-machineinstrs -o - | FileCheck %s
      2 ---
      3 name: promote-load-from-store
      4 tracksRegLiveness: true
      5 body: |
      6   bb.0:
      7     liveins: $w1, $x0, $lr
      8 
      9     STRWui killed $w1, $x0, 0 :: (store 4)
     10     CFI_INSTRUCTION 0
     11     CFI_INSTRUCTION 0
     12     CFI_INSTRUCTION 0
     13     CFI_INSTRUCTION 0
     14     CFI_INSTRUCTION 0
     15     CFI_INSTRUCTION 0
     16     CFI_INSTRUCTION 0
     17     CFI_INSTRUCTION 0
     18     CFI_INSTRUCTION 0
     19     CFI_INSTRUCTION 0
     20     CFI_INSTRUCTION 0
     21     CFI_INSTRUCTION 0
     22     CFI_INSTRUCTION 0
     23     CFI_INSTRUCTION 0
     24     CFI_INSTRUCTION 0
     25     CFI_INSTRUCTION 0
     26     CFI_INSTRUCTION 0
     27     CFI_INSTRUCTION 0
     28     CFI_INSTRUCTION 0
     29     CFI_INSTRUCTION 0
     30     $w0 = LDRHHui killed $x0, 1 :: (load 2)
     31     RET $lr, implicit $w0
     32 
     33 ...
     34 # Don't count transient instructions towards search limits.
     35 # CHECK-LABEL: name: promote-load-from-store
     36 # CHECK: STRWui $w1
     37 # CHECK: UBFMWri killed $w1
     38 ---
     39 name: store-pair
     40 tracksRegLiveness: true
     41 body: |
     42   bb.0:
     43     liveins: $w1, $x0, $lr
     44 
     45     STRWui $w1, $x0, 0 :: (store 4)
     46     CFI_INSTRUCTION 0
     47     CFI_INSTRUCTION 0
     48     CFI_INSTRUCTION 0
     49     CFI_INSTRUCTION 0
     50     CFI_INSTRUCTION 0
     51     CFI_INSTRUCTION 0
     52     CFI_INSTRUCTION 0
     53     CFI_INSTRUCTION 0
     54     CFI_INSTRUCTION 0
     55     CFI_INSTRUCTION 0
     56     CFI_INSTRUCTION 0
     57     CFI_INSTRUCTION 0
     58     CFI_INSTRUCTION 0
     59     CFI_INSTRUCTION 0
     60     CFI_INSTRUCTION 0
     61     CFI_INSTRUCTION 0
     62     CFI_INSTRUCTION 0
     63     CFI_INSTRUCTION 0
     64     CFI_INSTRUCTION 0
     65     CFI_INSTRUCTION 0
     66     STRWui killed $w1, killed $x0, 1 :: (store 4)
     67     RET $lr
     68 
     69 ...
     70 # CHECK-LABEL: name: store-pair
     71 # CHECK: STPWi
     72 ---
     73 name: store-pair-clearkill0
     74 tracksRegLiveness: true
     75 body: |
     76   bb.0:
     77     liveins: $w1, $x0, $lr
     78 
     79     STRWui $w1, $x0, 0 :: (store 4)
     80     $w2 = COPY $w1
     81     $x3 = COPY $x0
     82     STRWui killed $w1, killed $x0, 1 :: (store 4)
     83     RET $lr
     84 ...
     85 # When merging a lower store with an upper one, we must clear kill flags on
     86 # the lower store.
     87 # CHECK-LABEL: store-pair-clearkill0
     88 # CHECK-NOT: STPWi $w1, killed $w1, $x0, 0 :: (store 4)
     89 # CHECK: STPWi $w1, $w1, $x0, 0 :: (store 4)
     90 # CHECK: $w2 = COPY $w1
     91 # CHECK: RET $lr
     92 ---
     93 name: store-pair-clearkill1
     94 tracksRegLiveness: true
     95 body: |
     96   bb.0:
     97     liveins: $x0, $lr
     98 
     99     $w1 = MOVi32imm 13
    100     $w2 = MOVi32imm 7
    101     STRWui $w1, $x0, 1 :: (store 4)
    102     $w2 = COPY killed $w1
    103     STRWui killed $w2, $x0, 0 :: (store 4)
    104 
    105     $w1 = MOVi32imm 42
    106     $w2 = MOVi32imm 7
    107     STRWui $w1, $x0, 0 :: (store 4)
    108     $w2 = COPY killed $w1
    109     STRWui killed $w2, killed $x0, 1 :: (store 4)
    110 
    111     RET $lr
    112 ...
    113 # When merging an upper store with a lower one, kill flags along the way need
    114 # to be removed; In this case the kill flag on $w1.
    115 # CHECK-LABEL: store-pair-clearkill1
    116 # CHECK: $w1 = MOVi32imm
    117 # CHECK: $w2 = MOVi32imm
    118 # CHECK-NOT: $w2 = COPY killed $w1
    119 # CHECK: $w2 = COPY $w1
    120 # CHECK: STPWi killed $w2, $w1, $x0, 0
    121 
    122 # CHECK: $w1 = MOVi32imm
    123 # CHECK: $w2 = MOVi32imm
    124 # CHECK-NOT: $w2 = COPY killed $w1
    125 # CHECK: $w2 = COPY $w1
    126 # CHECK: STPWi $w1, killed $w2, killed $x0, 0
    127 ---
    128 name: store-load-clearkill
    129 tracksRegLiveness: true
    130 body: |
    131   bb.0:
    132     liveins: $w1
    133 
    134     STRWui $w1, $sp, 0 :: (store 4)
    135     $wzr = COPY killed $w1 ; killing use of $w1
    136     $w11 = LDRWui $sp, 0 :: (load 4)
    137     HINT 0, implicit $w11 ; some use of $w11
    138 ...
    139 # When replaceing the load of a store-load pair with a copy the kill flags
    140 # along the way need to be cleared.
    141 # CHECK-LABEL: name: store-load-clearkill
    142 # CHECK: STRWui $w1, $sp, 0 :: (store 4)
    143 # CHECK-NOT: COPY killed $w1
    144 # CHECK: $wzr = COPY $w1
    145 # CHECK: $w11 = ORRWrs $wzr, $w1, 0
    146 # CHECK: HINT 0, implicit $w11
    147 ---
    148 name: promote-load-from-store-undef
    149 tracksRegLiveness: true
    150 body: |
    151   bb.0:
    152     liveins: $x0, $x2, $lr
    153 
    154     STRWui undef $w1, $x0, 0 :: (store 4)
    155     $w0 = LDRBBui $x0, 1 :: (load 2)
    156     STRHHui undef $w3, $x2, 0 :: (store 4)
    157     $w1 = LDRBBui $x2, 0 :: (load 4)
    158     RET $lr, implicit $w0
    159 ...
    160 # CHECK-LABEL: name: promote-load-from-store-undef
    161 # CHECK: STRWui undef $w1
    162 # CHECK: UBFMWri undef $w1
    163 # CHECK: STRHHui undef $w3
    164 # CHECK: ANDWri undef $w3
    165 ---
    166 name: promote-load-from-store-trivial-kills
    167 tracksRegLiveness: true
    168 body: |
    169   bb.0:
    170     liveins: $x0, $lr
    171 
    172     STRXui $x0, $sp, 0 :: (store 8)
    173     STRXui killed $x0, $sp, 2 :: (store 8)
    174     $x0 = LDRXui $sp, 0 :: (load 8)
    175     BL &bar, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0, implicit-def $sp
    176     RET $lr
    177 ...
    178 # CHECK-LABEL: name: promote-load-from-store-trivial-kills
    179 # CHECK: STRXui $x0, $sp, 0
    180 # CHECK: STRXui $x0, $sp, 2
    181 # CHECK-NOT: LDRXui
    182 # CHECK-NOT: ORR
    183 # CHECK: BL &bar, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0, implicit-def $sp
    184