342 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -o - %s -mtriple=riscv64 -mattr=+c -simplify-mir \3# RUN: -run-pass=riscv-make-compressible | FileCheck %s4--- |5 6 define void @store_common_value(ptr %a, ptr %b, ptr %c) #0 {7 entry:8 store i64 0, ptr %a, align 89 store i64 0, ptr %b, align 810 store i64 0, ptr %c, align 811 ret void12 }13 14 define void @store_common_ptr(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, ptr %p) #0 {15 entry:16 store volatile i64 1, ptr %p, align 817 store volatile i64 3, ptr %p, align 818 store volatile i64 5, ptr %p, align 819 ret void20 }21 22 define void @store_common_ptr_self(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, ptr %p) #0 {23 entry:24 %q = bitcast ptr %p to ptr25 store volatile i64 1, ptr %p, align 826 store volatile i64 3, ptr %p, align 827 store volatile ptr %p, ptr %q, align 828 ret void29 }30 31 define void @load_common_ptr(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, ptr %p) #0 {32 entry:33 %g = load volatile i64, ptr %p, align 834 %h = load volatile i64, ptr %p, align 835 %i = load volatile i64, ptr %p, align 836 ret void37 }38 39 define void @store_large_offset(ptr %p) #0 {40 entry:41 %0 = getelementptr inbounds i64, ptr %p, i64 10042 store volatile i64 1, ptr %0, align 843 %1 = getelementptr inbounds i64, ptr %p, i64 10144 store volatile i64 3, ptr %1, align 845 %2 = getelementptr inbounds i64, ptr %p, i64 10246 store volatile i64 5, ptr %2, align 847 %3 = getelementptr inbounds i64, ptr %p, i64 10348 store volatile i64 7, ptr %3, align 849 ret void50 }51 52 define void @load_large_offset(ptr %p) #0 {53 entry:54 %0 = getelementptr inbounds i64, ptr %p, i64 10055 %a = load volatile i64, ptr %0, align 856 %1 = getelementptr inbounds i64, ptr %p, i64 10157 %b = load volatile i64, ptr %1, align 858 %2 = getelementptr inbounds i64, ptr %p, i64 10259 %c = load volatile i64, ptr %2, align 860 %3 = getelementptr inbounds i64, ptr %p, i64 10361 %d = load volatile i64, ptr %3, align 862 ret void63 }64 65 define void @store_common_value_no_opt(ptr %a) #0 {66 entry:67 store i64 0, ptr %a, align 868 ret void69 }70 71 define void @store_common_ptr_no_opt(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, ptr %p) #0 {72 entry:73 store volatile i64 1, ptr %p, align 874 ret void75 }76 77 define void @load_common_ptr_no_opt(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, ptr %p) #0 {78 entry:79 %g = load volatile i64, ptr %p, align 880 ret void81 }82 83 define void @store_large_offset_no_opt(ptr %p) #0 {84 entry:85 %0 = getelementptr inbounds i64, ptr %p, i64 10086 store volatile i64 1, ptr %0, align 887 %1 = getelementptr inbounds i64, ptr %p, i64 10188 store volatile i64 3, ptr %1, align 889 ret void90 }91 92 define void @load_large_offset_no_opt(ptr %p) #0 {93 entry:94 %0 = getelementptr inbounds i64, ptr %p, i64 10095 %a = load volatile i64, ptr %0, align 896 %1 = getelementptr inbounds i64, ptr %p, i64 10197 %b = load volatile i64, ptr %1, align 898 ret void99 }100 101 attributes #0 = { minsize "target-features"="+c" }102 103...104---105name: store_common_value106tracksRegLiveness: true107body: |108 bb.0.entry:109 liveins: $x10, $x11, $x12110 111 ; CHECK-LABEL: name: store_common_value112 ; CHECK: liveins: $x10, $x11, $x12113 ; CHECK-NEXT: {{ $}}114 ; CHECK-NEXT: $x13 = ADDI $x0, 0115 ; CHECK-NEXT: SD $x13, killed renamable $x10, 0 :: (store (s64) into %ir.a)116 ; CHECK-NEXT: SD $x13, killed renamable $x11, 0 :: (store (s64) into %ir.b)117 ; CHECK-NEXT: SD $x13, killed renamable $x12, 0 :: (store (s64) into %ir.c)118 ; CHECK-NEXT: PseudoRET119 SD $x0, killed renamable $x10, 0 :: (store (s64) into %ir.a)120 SD $x0, killed renamable $x11, 0 :: (store (s64) into %ir.b)121 SD $x0, killed renamable $x12, 0 :: (store (s64) into %ir.c)122 PseudoRET123 124...125---126name: store_common_ptr127tracksRegLiveness: true128body: |129 bb.0.entry:130 liveins: $x16131 132 ; CHECK-LABEL: name: store_common_ptr133 ; CHECK: liveins: $x16134 ; CHECK-NEXT: {{ $}}135 ; CHECK-NEXT: renamable $x10 = ADDI $x0, 1136 ; CHECK-NEXT: $x11 = ADDI $x16, 0137 ; CHECK-NEXT: SD killed renamable $x10, $x11, 0 :: (volatile store (s64) into %ir.p)138 ; CHECK-NEXT: renamable $x10 = ADDI $x0, 3139 ; CHECK-NEXT: SD killed renamable $x10, $x11, 0 :: (volatile store (s64) into %ir.p)140 ; CHECK-NEXT: renamable $x10 = ADDI $x0, 5141 ; CHECK-NEXT: SD killed renamable $x10, killed $x11, 0 :: (volatile store (s64) into %ir.p)142 ; CHECK-NEXT: PseudoRET143 renamable $x10 = ADDI $x0, 1144 SD killed renamable $x10, renamable $x16, 0 :: (volatile store (s64) into %ir.p)145 renamable $x10 = ADDI $x0, 3146 SD killed renamable $x10, renamable $x16, 0 :: (volatile store (s64) into %ir.p)147 renamable $x10 = ADDI $x0, 5148 SD killed renamable $x10, killed renamable $x16, 0 :: (volatile store (s64) into %ir.p)149 PseudoRET150 151...152---153name: store_common_ptr_self154tracksRegLiveness: true155body: |156 bb.0.entry:157 liveins: $x16158 159 ; CHECK-LABEL: name: store_common_ptr_self160 ; CHECK: liveins: $x16161 ; CHECK-NEXT: {{ $}}162 ; CHECK-NEXT: renamable $x10 = ADDI $x0, 1163 ; CHECK-NEXT: $x11 = ADDI $x16, 0164 ; CHECK-NEXT: SD killed renamable $x10, $x11, 0 :: (volatile store (s64) into %ir.p)165 ; CHECK-NEXT: renamable $x10 = ADDI $x0, 3166 ; CHECK-NEXT: SD killed renamable $x10, $x11, 0 :: (volatile store (s64) into %ir.p)167 ; CHECK-NEXT: SD killed $x11, $x11, 0 :: (volatile store (s64) into %ir.q)168 ; CHECK-NEXT: PseudoRET169 renamable $x10 = ADDI $x0, 1170 SD killed renamable $x10, renamable $x16, 0 :: (volatile store (s64) into %ir.p)171 renamable $x10 = ADDI $x0, 3172 SD killed renamable $x10, renamable $x16, 0 :: (volatile store (s64) into %ir.p)173 SD killed renamable $x16, renamable $x16, 0 :: (volatile store (s64) into %ir.q)174 PseudoRET175 176...177---178name: load_common_ptr179tracksRegLiveness: true180body: |181 bb.0.entry:182 liveins: $x16183 184 ; CHECK-LABEL: name: load_common_ptr185 ; CHECK: liveins: $x16186 ; CHECK-NEXT: {{ $}}187 ; CHECK-NEXT: $x11 = ADDI $x16, 0188 ; CHECK-NEXT: dead renamable $x10 = LD $x11, 0 :: (volatile load (s64) from %ir.p)189 ; CHECK-NEXT: dead renamable $x10 = LD $x11, 0 :: (volatile load (s64) from %ir.p)190 ; CHECK-NEXT: dead renamable $x10 = LD killed $x11, 0 :: (volatile load (s64) from %ir.p)191 ; CHECK-NEXT: PseudoRET192 dead renamable $x10 = LD renamable $x16, 0 :: (volatile load (s64) from %ir.p)193 dead renamable $x10 = LD renamable $x16, 0 :: (volatile load (s64) from %ir.p)194 dead renamable $x10 = LD killed renamable $x16, 0 :: (volatile load (s64) from %ir.p)195 PseudoRET196 197...198---199name: store_large_offset200tracksRegLiveness: true201body: |202 bb.0.entry:203 liveins: $x10204 205 ; CHECK-LABEL: name: store_large_offset206 ; CHECK: liveins: $x10207 ; CHECK-NEXT: {{ $}}208 ; CHECK-NEXT: renamable $x11 = ADDI $x0, 1209 ; CHECK-NEXT: $x12 = ADDI $x10, 768210 ; CHECK-NEXT: SD killed renamable $x11, $x12, 32 :: (volatile store (s64) into %ir.0)211 ; CHECK-NEXT: renamable $x11 = ADDI $x0, 3212 ; CHECK-NEXT: SD killed renamable $x11, $x12, 40 :: (volatile store (s64) into %ir.1)213 ; CHECK-NEXT: renamable $x11 = ADDI $x0, 5214 ; CHECK-NEXT: SD killed renamable $x11, $x12, 48 :: (volatile store (s64) into %ir.2)215 ; CHECK-NEXT: renamable $x11 = ADDI $x0, 7216 ; CHECK-NEXT: SD killed renamable $x11, killed $x12, 56 :: (volatile store (s64) into %ir.3)217 ; CHECK-NEXT: PseudoRET218 renamable $x11 = ADDI $x0, 1219 SD killed renamable $x11, renamable $x10, 800 :: (volatile store (s64) into %ir.0)220 renamable $x11 = ADDI $x0, 3221 SD killed renamable $x11, renamable $x10, 808 :: (volatile store (s64) into %ir.1)222 renamable $x11 = ADDI $x0, 5223 SD killed renamable $x11, renamable $x10, 816 :: (volatile store (s64) into %ir.2)224 renamable $x11 = ADDI $x0, 7225 SD killed renamable $x11, killed renamable $x10, 824 :: (volatile store (s64) into %ir.3)226 PseudoRET227 228...229---230name: load_large_offset231tracksRegLiveness: true232body: |233 bb.0.entry:234 liveins: $x10235 236 ; CHECK-LABEL: name: load_large_offset237 ; CHECK: liveins: $x10238 ; CHECK-NEXT: {{ $}}239 ; CHECK-NEXT: $x12 = ADDI $x10, 768240 ; CHECK-NEXT: dead renamable $x11 = LD $x12, 32 :: (volatile load (s64) from %ir.0)241 ; CHECK-NEXT: dead renamable $x11 = LD $x12, 40 :: (volatile load (s64) from %ir.1)242 ; CHECK-NEXT: dead renamable $x11 = LD $x12, 48 :: (volatile load (s64) from %ir.2)243 ; CHECK-NEXT: dead renamable $x10 = LD killed $x12, 56 :: (volatile load (s64) from %ir.3)244 ; CHECK-NEXT: PseudoRET245 dead renamable $x11 = LD renamable $x10, 800 :: (volatile load (s64) from %ir.0)246 dead renamable $x11 = LD renamable $x10, 808 :: (volatile load (s64) from %ir.1)247 dead renamable $x11 = LD renamable $x10, 816 :: (volatile load (s64) from %ir.2)248 dead renamable $x10 = LD killed renamable $x10, 824 :: (volatile load (s64) from %ir.3)249 PseudoRET250 251...252---253name: store_common_value_no_opt254tracksRegLiveness: true255body: |256 bb.0.entry:257 liveins: $x10258 259 ; CHECK-LABEL: name: store_common_value_no_opt260 ; CHECK: liveins: $x10261 ; CHECK-NEXT: {{ $}}262 ; CHECK-NEXT: SD $x0, killed renamable $x10, 0 :: (store (s64) into %ir.a)263 ; CHECK-NEXT: PseudoRET264 SD $x0, killed renamable $x10, 0 :: (store (s64) into %ir.a)265 PseudoRET266 267...268---269name: store_common_ptr_no_opt270tracksRegLiveness: true271body: |272 bb.0.entry:273 liveins: $x16274 275 ; CHECK-LABEL: name: store_common_ptr_no_opt276 ; CHECK: liveins: $x16277 ; CHECK-NEXT: {{ $}}278 ; CHECK-NEXT: renamable $x10 = ADDI $x0, 1279 ; CHECK-NEXT: SD killed renamable $x10, killed renamable $x16, 0 :: (volatile store (s64) into %ir.p)280 ; CHECK-NEXT: PseudoRET281 renamable $x10 = ADDI $x0, 1282 SD killed renamable $x10, killed renamable $x16, 0 :: (volatile store (s64) into %ir.p)283 PseudoRET284 285...286---287name: load_common_ptr_no_opt288tracksRegLiveness: true289body: |290 bb.0.entry:291 liveins: $x16292 293 ; CHECK-LABEL: name: load_common_ptr_no_opt294 ; CHECK: liveins: $x16295 ; CHECK-NEXT: {{ $}}296 ; CHECK-NEXT: dead renamable $x10 = LD killed renamable $x16, 0 :: (volatile load (s64) from %ir.p)297 ; CHECK-NEXT: PseudoRET298 dead renamable $x10 = LD killed renamable $x16, 0 :: (volatile load (s64) from %ir.p)299 PseudoRET300 301...302---303name: store_large_offset_no_opt304tracksRegLiveness: true305body: |306 bb.0.entry:307 liveins: $x10308 309 ; CHECK-LABEL: name: store_large_offset_no_opt310 ; CHECK: liveins: $x10311 ; CHECK-NEXT: {{ $}}312 ; CHECK-NEXT: renamable $x11 = ADDI $x0, 1313 ; CHECK-NEXT: SD killed renamable $x11, renamable $x10, 800 :: (volatile store (s64) into %ir.0)314 ; CHECK-NEXT: renamable $x11 = ADDI $x0, 3315 ; CHECK-NEXT: SD killed renamable $x11, killed renamable $x10, 808 :: (volatile store (s64) into %ir.1)316 ; CHECK-NEXT: PseudoRET317 renamable $x11 = ADDI $x0, 1318 SD killed renamable $x11, renamable $x10, 800 :: (volatile store (s64) into %ir.0)319 renamable $x11 = ADDI $x0, 3320 SD killed renamable $x11, killed renamable $x10, 808 :: (volatile store (s64) into %ir.1)321 PseudoRET322 323...324---325name: load_large_offset_no_opt326tracksRegLiveness: true327body: |328 bb.0.entry:329 liveins: $x10330 331 ; CHECK-LABEL: name: load_large_offset_no_opt332 ; CHECK: liveins: $x10333 ; CHECK-NEXT: {{ $}}334 ; CHECK-NEXT: dead renamable $x11 = LD renamable $x10, 800 :: (volatile load (s64) from %ir.0)335 ; CHECK-NEXT: dead renamable $x10 = LD killed renamable $x10, 808 :: (volatile load (s64) from %ir.1)336 ; CHECK-NEXT: PseudoRET337 dead renamable $x11 = LD renamable $x10, 800 :: (volatile load (s64) from %ir.0)338 dead renamable $x10 = LD killed renamable $x10, 808 :: (volatile load (s64) from %ir.1)339 PseudoRET340 341...342