297 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -o - %s -mtriple=riscv32 -mattr=+c,+zfinx -simplify-mir \3# RUN: -run-pass=riscv-make-compressible | FileCheck --check-prefixes=CHECK %s4# RUN: llc -o - %s -mtriple=riscv64 -mattr=+c,+zfinx -simplify-mir \5# RUN: -run-pass=riscv-make-compressible | FileCheck --check-prefixes=CHECK %s6 7--- |8 9 define void @store_common_value_float(ptr %a, ptr %b, ptr %c, float %d, float %e, float %f, float %g, float %h, float %i, float %j) #0 {10 entry:11 store float %j, ptr %a, align 412 store float %j, ptr %b, align 413 store float %j, ptr %c, align 414 ret void15 }16 17 define void @store_common_ptr_float(float %a, float %b, float %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h, i32 %i, ptr %p) #0 {18 entry:19 store volatile float %a, ptr %p, align 420 store volatile float %b, ptr %p, align 421 store volatile float %c, ptr %p, align 422 ret void23 }24 25 define void @load_common_ptr_float(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, ptr %g) #0 {26 entry:27 %0 = load float, ptr %g, align 428 %arrayidx1 = getelementptr inbounds float, ptr %g, i32 129 %1 = load float, ptr %arrayidx1, align 430 %arrayidx2 = getelementptr inbounds float, ptr %g, i32 231 %2 = load float, ptr %arrayidx2, align 432 tail call void @load_common_ptr_float_1(float %0, float %1, float %2)33 ret void34 }35 36 declare void @load_common_ptr_float_1(float, float, float) #037 38 define void @store_large_offset_float(ptr %p, float %a, float %b, float %c, float %d) #0 {39 entry:40 %0 = getelementptr inbounds float, ptr %p, i32 10041 store volatile float %a, ptr %0, align 442 %1 = getelementptr inbounds float, ptr %p, i32 10143 store volatile float %b, ptr %1, align 444 %2 = getelementptr inbounds float, ptr %p, i32 10245 store volatile float %c, ptr %2, align 446 %3 = getelementptr inbounds float, ptr %p, i32 10347 store volatile float %d, ptr %3, align 448 ret void49 }50 51 define void @load_large_offset_float(ptr %p) #0 {52 entry:53 %arrayidx = getelementptr inbounds float, ptr %p, i32 10054 %0 = load float, ptr %arrayidx, align 455 %arrayidx1 = getelementptr inbounds float, ptr %p, i32 10156 %1 = load float, ptr %arrayidx1, align 457 %arrayidx2 = getelementptr inbounds float, ptr %p, i32 10258 %2 = load float, ptr %arrayidx2, align 459 tail call void @load_large_offset_float_1(float %0, float %1, float %2)60 ret void61 }62 63 declare void @load_large_offset_float_1(float, float, float) #064 65 define void @store_common_value_float_no_opt(ptr %a, float %b, float %c, float %d, float %e, float %f, float %g, float %h) #0 {66 entry:67 store float %h, ptr %a, align 468 ret void69 }70 71 define void @store_common_ptr_float_no_opt(float %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, ptr %p) #0 {72 entry:73 store volatile float %a, ptr %p, align 474 ret void75 }76 77 define float @load_common_ptr_float_no_opt(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, ptr %g) #0 {78 entry:79 %0 = load float, ptr %g, align 480 ret float %081 }82 83 define void @store_large_offset_float_no_opt(ptr %p, float %a, float %b) #0 {84 entry:85 %0 = getelementptr inbounds float, ptr %p, i32 10086 store volatile float %a, ptr %0, align 487 %1 = getelementptr inbounds float, ptr %p, i32 10188 store volatile float %b, ptr %1, align 489 ret void90 }91 92 define { float, float } @load_large_offset_float_no_opt(ptr %p) #0 {93 entry:94 %arrayidx = getelementptr inbounds float, ptr %p, i32 10095 %0 = load float, ptr %arrayidx, align 496 %arrayidx1 = getelementptr inbounds float, ptr %p, i32 10197 %1 = load float, ptr %arrayidx1, align 498 %2 = insertvalue { float, float } undef, float %0, 099 %3 = insertvalue { float, float } %2, float %1, 1100 ret { float, float } %3101 }102 103 attributes #0 = { minsize }104 105...106---107name: store_common_value_float108tracksRegLiveness: true109body: |110 bb.0.entry:111 liveins: $x10, $x11, $x12112 113 ; CHECK-LABEL: name: store_common_value_float114 ; CHECK: liveins: $x10, $x11, $x12115 ; CHECK-NEXT: {{ $}}116 ; CHECK-NEXT: $x13_w = PseudoMV_FPR32INX $x0_w117 ; CHECK-NEXT: SW_INX $x13_w, killed renamable $x10, 0 :: (store (s32) into %ir.a)118 ; CHECK-NEXT: SW_INX $x13_w, killed renamable $x11, 0 :: (store (s32) into %ir.b)119 ; CHECK-NEXT: SW_INX killed $x13_w, killed renamable $x12, 0 :: (store (s32) into %ir.c)120 ; CHECK-NEXT: PseudoRET121 SW_INX $x0_w, killed renamable $x10, 0 :: (store (s32) into %ir.a)122 SW_INX $x0_w, killed renamable $x11, 0 :: (store (s32) into %ir.b)123 SW_INX killed $x0_w, killed renamable $x12, 0 :: (store (s32) into %ir.c)124 PseudoRET125 126...127---128name: store_common_ptr_float129tracksRegLiveness: true130body: |131 bb.0.entry:132 liveins: $x10_w, $x11_w, $x12_w, $x16133 134 ; CHECK-LABEL: name: store_common_ptr_float135 ; CHECK: liveins: $x10_w, $x11_w, $x12_w, $x16136 ; CHECK-NEXT: {{ $}}137 ; CHECK-NEXT: $x13 = ADDI $x16, 0138 ; CHECK-NEXT: SW_INX killed renamable $x10_w, $x13, 0 :: (volatile store (s32) into %ir.p)139 ; CHECK-NEXT: SW_INX killed renamable $x11_w, $x13, 0 :: (volatile store (s32) into %ir.p)140 ; CHECK-NEXT: SW_INX killed renamable $x12_w, killed $x13, 0 :: (volatile store (s32) into %ir.p)141 ; CHECK-NEXT: PseudoRET142 SW_INX killed renamable $x10_w, renamable $x16, 0 :: (volatile store (s32) into %ir.p)143 SW_INX killed renamable $x11_w, renamable $x16, 0 :: (volatile store (s32) into %ir.p)144 SW_INX killed renamable $x12_w, killed renamable $x16, 0 :: (volatile store (s32) into %ir.p)145 PseudoRET146 147...148---149name: load_common_ptr_float150tracksRegLiveness: true151body: |152 bb.0.entry:153 liveins: $x16154 155 ; CHECK-LABEL: name: load_common_ptr_float156 ; CHECK: liveins: $x16157 ; CHECK-NEXT: {{ $}}158 ; CHECK-NEXT: $x13 = ADDI $x16, 0159 ; CHECK-NEXT: renamable $x10_w = LW_INX $x13, 0 :: (load (s32) from %ir.g)160 ; CHECK-NEXT: renamable $x11_w = LW_INX $x13, 4 :: (load (s32) from %ir.arrayidx1)161 ; CHECK-NEXT: renamable $x12_w = LW_INX killed $x13, 8 :: (load (s32) from %ir.arrayidx2)162 ; CHECK-NEXT: PseudoTAIL target-flags(riscv-call) @load_common_ptr_float_1, implicit $x2, implicit $x10_w, implicit $x11_w, implicit $x12_w163 renamable $x10_w = LW_INX renamable $x16, 0 :: (load (s32) from %ir.g)164 renamable $x11_w = LW_INX renamable $x16, 4 :: (load (s32) from %ir.arrayidx1)165 renamable $x12_w = LW_INX killed renamable $x16, 8 :: (load (s32) from %ir.arrayidx2)166 PseudoTAIL target-flags(riscv-call) @load_common_ptr_float_1, implicit $x2, implicit $x10_w, implicit $x11_w, implicit $x12_w167 168...169---170name: store_large_offset_float171tracksRegLiveness: true172body: |173 bb.0.entry:174 liveins: $x10, $x11_w, $x11_w, $x12_w, $x13_w175 176 ; CHECK-LABEL: name: store_large_offset_float177 ; CHECK: liveins: $x10, $x11_w, $x11_w, $x12_w, $x13_w178 ; CHECK-NEXT: {{ $}}179 ; CHECK-NEXT: $x14 = ADDI $x10, 384180 ; CHECK-NEXT: SW_INX killed renamable $x10_w, $x14, 16 :: (volatile store (s32) into %ir.0)181 ; CHECK-NEXT: SW_INX killed renamable $x11_w, $x14, 20 :: (volatile store (s32) into %ir.1)182 ; CHECK-NEXT: SW_INX killed renamable $x12_w, $x14, 24 :: (volatile store (s32) into %ir.2)183 ; CHECK-NEXT: SW_INX killed renamable $x13_w, killed $x14, 28 :: (volatile store (s32) into %ir.3)184 ; CHECK-NEXT: PseudoRET185 SW_INX killed renamable $x10_w, renamable $x10, 400 :: (volatile store (s32) into %ir.0)186 SW_INX killed renamable $x11_w, renamable $x10, 404 :: (volatile store (s32) into %ir.1)187 SW_INX killed renamable $x12_w, renamable $x10, 408 :: (volatile store (s32) into %ir.2)188 SW_INX killed renamable $x13_w, killed renamable $x10, 412 :: (volatile store (s32) into %ir.3)189 PseudoRET190 191...192---193name: load_large_offset_float194tracksRegLiveness: true195body: |196 bb.0.entry:197 liveins: $x10198 199 ; CHECK-LABEL: name: load_large_offset_float200 ; CHECK: liveins: $x10201 ; CHECK-NEXT: {{ $}}202 ; CHECK-NEXT: $x14 = ADDI $x10, 384203 ; CHECK-NEXT: renamable $x11_w = LW_INX $x14, 16 :: (load (s32) from %ir.arrayidx)204 ; CHECK-NEXT: renamable $x12_w = LW_INX $x14, 20 :: (load (s32) from %ir.arrayidx1)205 ; CHECK-NEXT: renamable $x13_w = LW_INX killed $x14, 24 :: (load (s32) from %ir.arrayidx2)206 ; CHECK-NEXT: PseudoTAIL target-flags(riscv-call) @load_large_offset_float_1, implicit $x2, implicit $x11_w, implicit $x12_w, implicit $x12_w207 renamable $x11_w = LW_INX renamable $x10, 400 :: (load (s32) from %ir.arrayidx)208 renamable $x12_w = LW_INX renamable $x10, 404 :: (load (s32) from %ir.arrayidx1)209 renamable $x13_w = LW_INX killed renamable $x10, 408 :: (load (s32) from %ir.arrayidx2)210 PseudoTAIL target-flags(riscv-call) @load_large_offset_float_1, implicit $x2, implicit $x11_w, implicit $x12_w, implicit $x12_w211 212...213---214name: store_common_value_float_no_opt215tracksRegLiveness: true216body: |217 bb.0.entry:218 liveins: $x10, $x16_w219 220 ; CHECK-LABEL: name: store_common_value_float_no_opt221 ; CHECK: liveins: $x10, $x16_w222 ; CHECK-NEXT: {{ $}}223 ; CHECK-NEXT: SW_INX killed renamable $x16_w, killed renamable $x10, 0 :: (store (s32) into %ir.a)224 ; CHECK-NEXT: PseudoRET225 SW_INX killed renamable $x16_w, killed renamable $x10, 0 :: (store (s32) into %ir.a)226 PseudoRET227 228...229---230name: store_common_ptr_float_no_opt231tracksRegLiveness: true232body: |233 bb.0.entry:234 liveins: $x16, $x10_w235 236 ; CHECK-LABEL: name: store_common_ptr_float_no_opt237 ; CHECK: liveins: $x16, $x10_w238 ; CHECK-NEXT: {{ $}}239 ; CHECK-NEXT: SW_INX killed renamable $x10_w, killed renamable $x16, 0 :: (volatile store (s32) into %ir.p)240 ; CHECK-NEXT: PseudoRET241 SW_INX killed renamable $x10_w, killed renamable $x16, 0 :: (volatile store (s32) into %ir.p)242 PseudoRET243 244...245---246name: load_common_ptr_float_no_opt247tracksRegLiveness: true248body: |249 bb.0.entry:250 liveins: $x16251 252 ; CHECK-LABEL: name: load_common_ptr_float_no_opt253 ; CHECK: liveins: $x16254 ; CHECK-NEXT: {{ $}}255 ; CHECK-NEXT: renamable $x10_w = LW_INX killed renamable $x16, 0 :: (load (s32) from %ir.g)256 ; CHECK-NEXT: PseudoRET implicit $x10_w257 renamable $x10_w = LW_INX killed renamable $x16, 0 :: (load (s32) from %ir.g)258 PseudoRET implicit $x10_w259 260...261---262name: store_large_offset_float_no_opt263tracksRegLiveness: true264body: |265 bb.0.entry:266 liveins: $x10, $x11_w, $x12_w267 268 ; CHECK-LABEL: name: store_large_offset_float_no_opt269 ; CHECK: liveins: $x10, $x11_w, $x12_w270 ; CHECK-NEXT: {{ $}}271 ; CHECK-NEXT: SW_INX killed renamable $x11_w, renamable $x10, 400 :: (volatile store (s32) into %ir.0)272 ; CHECK-NEXT: SW_INX killed renamable $x12_w, killed renamable $x10, 404 :: (volatile store (s32) into %ir.1)273 ; CHECK-NEXT: PseudoRET274 SW_INX killed renamable $x11_w, renamable $x10, 400 :: (volatile store (s32) into %ir.0)275 SW_INX killed renamable $x12_w, killed renamable $x10, 404 :: (volatile store (s32) into %ir.1)276 PseudoRET277 278...279---280name: load_large_offset_float_no_opt281tracksRegLiveness: true282body: |283 bb.0.entry:284 liveins: $x10285 286 ; CHECK-LABEL: name: load_large_offset_float_no_opt287 ; CHECK: liveins: $x10288 ; CHECK-NEXT: {{ $}}289 ; CHECK-NEXT: renamable $x11_w = LW_INX renamable $x10, 400 :: (load (s32) from %ir.arrayidx)290 ; CHECK-NEXT: renamable $x12_w = LW_INX killed renamable $x10, 404 :: (load (s32) from %ir.arrayidx1)291 ; CHECK-NEXT: PseudoRET implicit $x11_w, implicit $x12_w292 renamable $x11_w = LW_INX renamable $x10, 400 :: (load (s32) from %ir.arrayidx)293 renamable $x12_w = LW_INX killed renamable $x10, 404 :: (load (s32) from %ir.arrayidx1)294 PseudoRET implicit $x11_w, implicit $x12_w295 296...297