250 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -o - %s -mtriple=riscv32 -mattr=+zcb,+zhinx -simplify-mir \3# RUN: -run-pass=riscv-make-compressible | FileCheck --check-prefixes=CHECK %s4# RUN: llc -o - %s -mtriple=riscv64 -mattr=+zcb,+zhinx -simplify-mir \5# RUN: -run-pass=riscv-make-compressible | FileCheck --check-prefixes=CHECK %s6 7--- |8 define void @store_common_value_half(ptr %a, ptr %b, ptr %c) #0 {9 entry:10 store half 0.0, ptr %a, align 211 store half 0.0, ptr %b, align 212 store half 0.0, ptr %c, align 213 ret void14 }15 16 define void @store_common_ptr_half(ptr %p) #0 {17 entry:18 store volatile half 2.0, ptr %p, align 219 store volatile half 32.0, ptr %p, align 220 store volatile half 512.0, ptr %p, align 221 ret void22 }23 24 define void @load_common_ptr_half(ptr %p) #0 {25 entry:26 %0 = load volatile half, ptr %p, align 227 %1 = load volatile half, ptr %p, align 228 %2 = load volatile half, ptr %p, align 229 ret void30 }31 32 define void @store_large_offset_half(ptr %p) #0 {33 entry:34 %0 = getelementptr inbounds half, ptr %p, i32 10035 store volatile half 2.0, ptr %0, align 236 %1 = getelementptr inbounds half, ptr %p, i32 10137 store volatile half 32.0, ptr %1, align 238 %2 = getelementptr inbounds half, ptr %p, i32 10239 store volatile half 512.0, ptr %2, align 240 %3 = getelementptr inbounds half, ptr %p, i32 10341 store volatile half 16384.0, ptr %3, align 242 ret void43 }44 45 define void @load_large_offset_half(ptr %p) #0 {46 entry:47 %0 = getelementptr inbounds half, ptr %p, i32 10048 %a = load volatile half, ptr %0, align 249 %1 = getelementptr inbounds half, ptr %p, i32 10050 %b = load volatile half, ptr %1, align 251 %2 = getelementptr inbounds half, ptr %p, i32 10152 %c = load volatile half, ptr %2, align 253 %3 = getelementptr inbounds half, ptr %p, i32 10154 %d = load volatile half, ptr %3, align 255 ret void56 }57 58 define void @store_large_offset_no_opt_half(ptr %p) #0 {59 entry:60 %0 = getelementptr inbounds i8, ptr %p, i8 10061 store volatile half 2.0, ptr %0, align 262 %1 = getelementptr inbounds i8, ptr %p, i8 10163 store volatile half 32.0, ptr %1, align 264 %2 = getelementptr inbounds i8, ptr %p, i8 10465 store volatile half 512.0, ptr %2, align 266 ret void67 }68 69 define void @load_large_offset_no_opt_half(ptr %p) #0 {70 entry:71 %0 = getelementptr inbounds half, ptr %p, i32 10072 %a = load volatile half, ptr %0, align 273 %1 = getelementptr inbounds half, ptr %p, i32 10174 %c = load volatile half, ptr %1, align 275 %2 = getelementptr inbounds half, ptr %p, i32 10276 %d = load volatile half, ptr %2, align 277 ret void78 }79 80 attributes #0 = { minsize }81 82...83---84name: store_common_value_half85tracksRegLiveness: true86body: |87 bb.0.entry:88 liveins: $x10, $x11, $x1289 90 ; CHECK-LABEL: name: store_common_value_half91 ; CHECK: liveins: $x10, $x11, $x1292 ; CHECK-NEXT: {{ $}}93 ; CHECK-NEXT: $x13_h = PseudoMV_FPR16INX $x0_h94 ; CHECK-NEXT: SH_INX $x13_h, killed renamable $x10, 0 :: (store (s16) into %ir.a)95 ; CHECK-NEXT: SH_INX $x13_h, killed renamable $x11, 0 :: (store (s16) into %ir.b)96 ; CHECK-NEXT: SH_INX $x13_h, killed renamable $x12, 0 :: (store (s16) into %ir.c)97 ; CHECK-NEXT: PseudoRET98 SH_INX $x0_h, killed renamable $x10, 0 :: (store (s16) into %ir.a)99 SH_INX $x0_h, killed renamable $x11, 0 :: (store (s16) into %ir.b)100 SH_INX $x0_h, killed renamable $x12, 0 :: (store (s16) into %ir.c)101 PseudoRET102 103...104---105name: store_common_ptr_half106tracksRegLiveness: true107body: |108 bb.0.entry:109 liveins: $x16110 111 ; CHECK-LABEL: name: store_common_ptr_half112 ; CHECK: liveins: $x16113 ; CHECK-NEXT: {{ $}}114 ; CHECK-NEXT: renamable $x10 = LUI 4115 ; CHECK-NEXT: $x11 = ADDI $x16, 0116 ; CHECK-NEXT: SH_INX killed renamable $x10_h, $x11, 0 :: (volatile store (s16) into %ir.p)117 ; CHECK-NEXT: renamable $x10 = LUI 5118 ; CHECK-NEXT: SH_INX killed renamable $x10_h, $x11, 0 :: (volatile store (s16) into %ir.p)119 ; CHECK-NEXT: renamable $x10 = LUI 6120 ; CHECK-NEXT: SH_INX killed renamable $x10_h, killed $x11, 0 :: (volatile store (s16) into %ir.p)121 ; CHECK-NEXT: PseudoRET122 renamable $x10 = LUI 4123 SH_INX killed renamable $x10_h, renamable $x16, 0 :: (volatile store (s16) into %ir.p)124 renamable $x10 = LUI 5125 SH_INX killed renamable $x10_h, renamable $x16, 0 :: (volatile store (s16) into %ir.p)126 renamable $x10 = LUI 6127 SH_INX killed renamable $x10_h, killed renamable $x16, 0 :: (volatile store (s16) into %ir.p)128 PseudoRET129 130...131---132name: load_common_ptr_half133body: |134 bb.0.entry:135 liveins: $x16136 137 ; CHECK-LABEL: name: load_common_ptr_half138 ; CHECK: liveins: $x16139 ; CHECK-NEXT: {{ $}}140 ; CHECK-NEXT: $x11 = ADDI $x16, 0141 ; CHECK-NEXT: dead $x10_h = LH_INX $x11, 0 :: (volatile load (s16) from %ir.p)142 ; CHECK-NEXT: dead $x10_h = LH_INX $x11, 0 :: (volatile load (s16) from %ir.p)143 ; CHECK-NEXT: dead $x10_h = LH_INX killed $x11, 0 :: (volatile load (s16) from %ir.p)144 ; CHECK-NEXT: PseudoRET145 dead $x10_h = LH_INX renamable $x16, 0 :: (volatile load (s16) from %ir.p)146 dead $x10_h = LH_INX renamable $x16, 0 :: (volatile load (s16) from %ir.p)147 dead $x10_h = LH_INX killed renamable $x16, 0 :: (volatile load (s16) from %ir.p)148 PseudoRET149 150...151---152name: store_large_offset_half153tracksRegLiveness: true154body: |155 bb.0.entry:156 liveins: $x10157 ; CHECK-LABEL: name: store_large_offset_half158 ; CHECK: liveins: $x10159 ; CHECK-NEXT: {{ $}}160 ; CHECK-NEXT: renamable $x11 = LUI 4161 ; CHECK-NEXT: $x12 = ADDI $x10, 200162 ; CHECK-NEXT: SH_INX killed renamable $x11_h, $x12, 0 :: (volatile store (s16) into %ir.0)163 ; CHECK-NEXT: renamable $x11 = LUI 5164 ; CHECK-NEXT: SH_INX killed renamable $x11_h, $x12, 0 :: (volatile store (s16) into %ir.1)165 ; CHECK-NEXT: renamable $x11 = LUI 6166 ; CHECK-NEXT: SH_INX killed renamable $x11_h, $x12, 2 :: (volatile store (s16) into %ir.2)167 ; CHECK-NEXT: renamable $x11 = LUI 7168 ; CHECK-NEXT: SH_INX killed renamable $x11_h, killed $x12, 2 :: (volatile store (s16) into %ir.3)169 ; CHECK-NEXT: PseudoRET170 renamable $x11 = LUI 4171 SH_INX killed renamable $x11_h, renamable $x10, 200 :: (volatile store (s16) into %ir.0)172 renamable $x11 = LUI 5173 SH_INX killed renamable $x11_h, renamable $x10, 200 :: (volatile store (s16) into %ir.1)174 renamable $x11 = LUI 6175 SH_INX killed renamable $x11_h, renamable $x10, 202 :: (volatile store (s16) into %ir.2)176 renamable $x11 = LUI 7177 SH_INX killed renamable $x11_h, killed renamable $x10, 202 :: (volatile store (s16) into %ir.3)178 PseudoRET179 180...181---182name: load_large_offset_half183tracksRegLiveness: true184body: |185 bb.0.entry:186 liveins: $x16187 188 ; CHECK-LABEL: name: load_large_offset_half189 ; CHECK: liveins: $x16190 ; CHECK-NEXT: {{ $}}191 ; CHECK-NEXT: $x11 = ADDI $x16, 100192 ; CHECK-NEXT: dead $x10_h = LH_INX $x11, 0 :: (volatile load (s16) from %ir.0)193 ; CHECK-NEXT: dead $x10_h = LH_INX $x11, 0 :: (volatile load (s16) from %ir.1)194 ; CHECK-NEXT: dead $x10_h = LH_INX $x11, 2 :: (volatile load (s16) from %ir.2)195 ; CHECK-NEXT: dead $x10_h = LH_INX killed $x11, 2 :: (volatile load (s16) from %ir.3)196 ; CHECK-NEXT: PseudoRET197 dead $x10_h = LH_INX renamable $x16, 100 :: (volatile load (s16) from %ir.0)198 dead $x10_h = LH_INX renamable $x16, 100 :: (volatile load (s16) from %ir.1)199 dead $x10_h = LH_INX renamable $x16, 102 :: (volatile load (s16) from %ir.2)200 dead $x10_h = LH_INX killed renamable $x16, 102 :: (volatile load (s16) from %ir.3)201 PseudoRET202 203...204---205name: store_large_offset_no_opt_half206tracksRegLiveness: true207body: |208 bb.0.entry:209 liveins: $x16210 211 ; CHECK-LABEL: name: store_large_offset_no_opt_half212 ; CHECK: liveins: $x16213 ; CHECK-NEXT: {{ $}}214 ; CHECK-NEXT: renamable $x11 = LUI 4215 ; CHECK-NEXT: SH_INX killed renamable $x11_h, renamable $x16, 200 :: (volatile store (s16) into %ir.0)216 ; CHECK-NEXT: renamable $x11 = LUI 5217 ; CHECK-NEXT: SH_INX killed renamable $x11_h, renamable $x16, 202 :: (volatile store (s16) into %ir.1)218 ; CHECK-NEXT: renamable $x11 = LUI 6219 ; CHECK-NEXT: SH_INX killed renamable $x11_h, renamable $x16, 204 :: (volatile store (s16) into %ir.2)220 ; CHECK-NEXT: PseudoRET221 renamable $x11 = LUI 4222 SH_INX killed renamable $x11_h, renamable $x16, 200 :: (volatile store (s16) into %ir.0)223 renamable $x11 = LUI 5224 SH_INX killed renamable $x11_h, renamable $x16, 202 :: (volatile store (s16) into %ir.1)225 renamable $x11 = LUI 6226 SH_INX killed renamable $x11_h, renamable $x16, 204 :: (volatile store (s16) into %ir.2)227 PseudoRET228 229...230---231name: load_large_offset_no_opt_half232tracksRegLiveness: true233body: |234 bb.0.entry:235 liveins: $x16236 237 ; CHECK-LABEL: name: load_large_offset_no_opt_half238 ; CHECK: liveins: $x16239 ; CHECK-NEXT: {{ $}}240 ; CHECK-NEXT: dead $x10_h = LH_INX renamable $x16, 100 :: (volatile load (s8) from %ir.0)241 ; CHECK-NEXT: dead $x10_h = LH_INX renamable $x16, 102 :: (volatile load (s8) from %ir.1)242 ; CHECK-NEXT: dead $x10_h = LH_INX killed renamable $x16, 104 :: (volatile load (s8) from %ir.2)243 ; CHECK-NEXT: PseudoRET244 dead $x10_h = LH_INX renamable $x16, 100 :: (volatile load (s8) from %ir.0)245 dead $x10_h = LH_INX renamable $x16, 102 :: (volatile load (s8) from %ir.1)246 dead $x10_h = LH_INX killed renamable $x16, 104 :: (volatile load (s8) from %ir.2)247 PseudoRET248 249...250