1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=regbankselect -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=FP32 3# RUN: llc -O0 -mtriple=mipsel-linux-gnu -mattr=+fp64,+mips32r2 -run-pass=regbankselect -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=FP64 4 5--- | 6 7 define void @float_in_fpr() {entry: ret void} 8 define void @double_in_fpr() {entry: ret void} 9 define void @float_in_gpr() {entry: ret void} 10 define void @double_in_gpr() {entry: ret void} 11 define void @call_float_in_fpr() {entry: ret void} 12 define void @call_double_in_fpr() {entry: ret void} 13 define void @call_float_in_gpr() {entry: ret void} 14 define void @call_double_in_gpr() {entry: ret void} 15 16... 17--- 18name: float_in_fpr 19alignment: 4 20legalized: true 21tracksRegLiveness: true 22body: | 23 bb.1.entry: 24 liveins: $f12, $f14 25 26 ; FP32-LABEL: name: float_in_fpr 27 ; FP32: liveins: $f12, $f14 28 ; FP32: [[COPY:%[0-9]+]]:fprb(s32) = COPY $f14 29 ; FP32: $f0 = COPY [[COPY]](s32) 30 ; FP32: RetRA implicit $f0 31 ; FP64-LABEL: name: float_in_fpr 32 ; FP64: liveins: $f12, $f14 33 ; FP64: [[COPY:%[0-9]+]]:fprb(s32) = COPY $f14 34 ; FP64: $f0 = COPY [[COPY]](s32) 35 ; FP64: RetRA implicit $f0 36 %1:_(s32) = COPY $f14 37 $f0 = COPY %1(s32) 38 RetRA implicit $f0 39 40... 41--- 42name: double_in_fpr 43alignment: 4 44legalized: true 45tracksRegLiveness: true 46body: | 47 bb.1.entry: 48 liveins: $d6, $d7 49 50 ; FP32-LABEL: name: double_in_fpr 51 ; FP32: liveins: $d6, $d7 52 ; FP32: [[COPY:%[0-9]+]]:fprb(s64) = COPY $d7 53 ; FP32: $d0 = COPY [[COPY]](s64) 54 ; FP32: RetRA implicit $d0 55 ; FP64-LABEL: name: double_in_fpr 56 ; FP64: liveins: $d6, $d7 57 ; FP64: [[COPY:%[0-9]+]]:fprb(s64) = COPY $d7 58 ; FP64: $d0 = COPY [[COPY]](s64) 59 ; FP64: RetRA implicit $d0 60 %1:_(s64) = COPY $d7 61 $d0 = COPY %1(s64) 62 RetRA implicit $d0 63 64... 65--- 66name: float_in_gpr 67alignment: 4 68legalized: true 69tracksRegLiveness: true 70body: | 71 bb.1.entry: 72 liveins: $a0, $a1 73 74 ; FP32-LABEL: name: float_in_gpr 75 ; FP32: liveins: $a0, $a1 76 ; FP32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a1 77 ; FP32: $f0 = COPY [[COPY]](s32) 78 ; FP32: RetRA implicit $f0 79 ; FP64-LABEL: name: float_in_gpr 80 ; FP64: liveins: $a0, $a1 81 ; FP64: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a1 82 ; FP64: $f0 = COPY [[COPY]](s32) 83 ; FP64: RetRA implicit $f0 84 %1:_(s32) = COPY $a1 85 $f0 = COPY %1(s32) 86 RetRA implicit $f0 87 88... 89--- 90name: double_in_gpr 91alignment: 4 92legalized: true 93tracksRegLiveness: true 94body: | 95 bb.1.entry: 96 liveins: $a0, $a2, $a3 97 98 ; FP32-LABEL: name: double_in_gpr 99 ; FP32: liveins: $a0, $a2, $a3 100 ; FP32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a2 101 ; FP32: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a3 102 ; FP32: [[MV:%[0-9]+]]:fprb(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32) 103 ; FP32: $d0 = COPY [[MV]](s64) 104 ; FP32: RetRA implicit $d0 105 ; FP64-LABEL: name: double_in_gpr 106 ; FP64: liveins: $a0, $a2, $a3 107 ; FP64: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a2 108 ; FP64: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a3 109 ; FP64: [[MV:%[0-9]+]]:fprb(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32) 110 ; FP64: $d0 = COPY [[MV]](s64) 111 ; FP64: RetRA implicit $d0 112 %2:_(s32) = COPY $a2 113 %3:_(s32) = COPY $a3 114 %1:_(s64) = G_MERGE_VALUES %2(s32), %3(s32) 115 $d0 = COPY %1(s64) 116 RetRA implicit $d0 117 118... 119--- 120name: call_float_in_fpr 121alignment: 4 122legalized: true 123tracksRegLiveness: true 124body: | 125 bb.1.entry: 126 liveins: $f12, $f14 127 128 ; FP32-LABEL: name: call_float_in_fpr 129 ; FP32: liveins: $f12, $f14 130 ; FP32: [[COPY:%[0-9]+]]:fprb(s32) = COPY $f12 131 ; FP32: [[COPY1:%[0-9]+]]:fprb(s32) = COPY $f14 132 ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 133 ; FP32: $f12 = COPY [[COPY]](s32) 134 ; FP32: $f14 = COPY [[COPY1]](s32) 135 ; FP32: JAL @float_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $f12, implicit $f14, implicit-def $f0 136 ; FP32: [[COPY2:%[0-9]+]]:fprb(s32) = COPY $f0 137 ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 138 ; FP32: $f0 = COPY [[COPY2]](s32) 139 ; FP32: RetRA implicit $f0 140 ; FP64-LABEL: name: call_float_in_fpr 141 ; FP64: liveins: $f12, $f14 142 ; FP64: [[COPY:%[0-9]+]]:fprb(s32) = COPY $f12 143 ; FP64: [[COPY1:%[0-9]+]]:fprb(s32) = COPY $f14 144 ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 145 ; FP64: $f12 = COPY [[COPY]](s32) 146 ; FP64: $f14 = COPY [[COPY1]](s32) 147 ; FP64: JAL @float_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $f12, implicit $f14, implicit-def $f0 148 ; FP64: [[COPY2:%[0-9]+]]:fprb(s32) = COPY $f0 149 ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 150 ; FP64: $f0 = COPY [[COPY2]](s32) 151 ; FP64: RetRA implicit $f0 152 %0:_(s32) = COPY $f12 153 %1:_(s32) = COPY $f14 154 ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 155 $f12 = COPY %0(s32) 156 $f14 = COPY %1(s32) 157 JAL @float_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $f12, implicit $f14, implicit-def $f0 158 %2:_(s32) = COPY $f0 159 ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 160 $f0 = COPY %2(s32) 161 RetRA implicit $f0 162 163... 164--- 165name: call_double_in_fpr 166alignment: 4 167legalized: true 168tracksRegLiveness: true 169body: | 170 bb.1.entry: 171 liveins: $d6, $d7 172 173 ; FP32-LABEL: name: call_double_in_fpr 174 ; FP32: liveins: $d6, $d7 175 ; FP32: [[COPY:%[0-9]+]]:fprb(s64) = COPY $d6 176 ; FP32: [[COPY1:%[0-9]+]]:fprb(s64) = COPY $d7 177 ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 178 ; FP32: $d6 = COPY [[COPY]](s64) 179 ; FP32: $d7 = COPY [[COPY1]](s64) 180 ; FP32: JAL @double_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $d6, implicit $d7, implicit-def $d0 181 ; FP32: [[COPY2:%[0-9]+]]:fprb(s64) = COPY $d0 182 ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 183 ; FP32: $d0 = COPY [[COPY2]](s64) 184 ; FP32: RetRA implicit $d0 185 ; FP64-LABEL: name: call_double_in_fpr 186 ; FP64: liveins: $d6, $d7 187 ; FP64: [[COPY:%[0-9]+]]:fprb(s64) = COPY $d6 188 ; FP64: [[COPY1:%[0-9]+]]:fprb(s64) = COPY $d7 189 ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 190 ; FP64: $d6 = COPY [[COPY]](s64) 191 ; FP64: $d7 = COPY [[COPY1]](s64) 192 ; FP64: JAL @double_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $d6, implicit $d7, implicit-def $d0 193 ; FP64: [[COPY2:%[0-9]+]]:fprb(s64) = COPY $d0 194 ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 195 ; FP64: $d0 = COPY [[COPY2]](s64) 196 ; FP64: RetRA implicit $d0 197 %0:_(s64) = COPY $d6 198 %1:_(s64) = COPY $d7 199 ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 200 $d6 = COPY %0(s64) 201 $d7 = COPY %1(s64) 202 JAL @double_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $d6, implicit $d7, implicit-def $d0 203 %2:_(s64) = COPY $d0 204 ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 205 $d0 = COPY %2(s64) 206 RetRA implicit $d0 207 208... 209--- 210name: call_float_in_gpr 211alignment: 4 212legalized: true 213tracksRegLiveness: true 214body: | 215 bb.1.entry: 216 liveins: $a0, $a1 217 218 ; FP32-LABEL: name: call_float_in_gpr 219 ; FP32: liveins: $a0, $a1 220 ; FP32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0 221 ; FP32: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a1 222 ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 223 ; FP32: $a0 = COPY [[COPY]](s32) 224 ; FP32: $a1 = COPY [[COPY1]](s32) 225 ; FP32: JAL @float_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $f0 226 ; FP32: [[COPY2:%[0-9]+]]:fprb(s32) = COPY $f0 227 ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 228 ; FP32: $f0 = COPY [[COPY2]](s32) 229 ; FP32: RetRA implicit $f0 230 ; FP64-LABEL: name: call_float_in_gpr 231 ; FP64: liveins: $a0, $a1 232 ; FP64: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0 233 ; FP64: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a1 234 ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 235 ; FP64: $a0 = COPY [[COPY]](s32) 236 ; FP64: $a1 = COPY [[COPY1]](s32) 237 ; FP64: JAL @float_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $f0 238 ; FP64: [[COPY2:%[0-9]+]]:fprb(s32) = COPY $f0 239 ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 240 ; FP64: $f0 = COPY [[COPY2]](s32) 241 ; FP64: RetRA implicit $f0 242 %0:_(s32) = COPY $a0 243 %1:_(s32) = COPY $a1 244 ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 245 $a0 = COPY %0(s32) 246 $a1 = COPY %1(s32) 247 JAL @float_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $f0 248 %2:_(s32) = COPY $f0 249 ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 250 $f0 = COPY %2(s32) 251 RetRA implicit $f0 252 253... 254--- 255name: call_double_in_gpr 256alignment: 4 257legalized: true 258tracksRegLiveness: true 259body: | 260 bb.1.entry: 261 liveins: $a0, $a2, $a3 262 263 ; FP32-LABEL: name: call_double_in_gpr 264 ; FP32: liveins: $a0, $a2, $a3 265 ; FP32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0 266 ; FP32: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a2 267 ; FP32: [[COPY2:%[0-9]+]]:gprb(s32) = COPY $a3 268 ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 269 ; FP32: $a0 = COPY [[COPY]](s32) 270 ; FP32: $a2 = COPY [[COPY1]](s32) 271 ; FP32: $a3 = COPY [[COPY2]](s32) 272 ; FP32: JAL @double_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $d0 273 ; FP32: [[COPY3:%[0-9]+]]:fprb(s64) = COPY $d0 274 ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 275 ; FP32: $d0 = COPY [[COPY3]](s64) 276 ; FP32: RetRA implicit $d0 277 ; FP64-LABEL: name: call_double_in_gpr 278 ; FP64: liveins: $a0, $a2, $a3 279 ; FP64: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0 280 ; FP64: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a2 281 ; FP64: [[COPY2:%[0-9]+]]:gprb(s32) = COPY $a3 282 ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 283 ; FP64: $a0 = COPY [[COPY]](s32) 284 ; FP64: $a2 = COPY [[COPY1]](s32) 285 ; FP64: $a3 = COPY [[COPY2]](s32) 286 ; FP64: JAL @double_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $d0 287 ; FP64: [[COPY3:%[0-9]+]]:fprb(s64) = COPY $d0 288 ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 289 ; FP64: $d0 = COPY [[COPY3]](s64) 290 ; FP64: RetRA implicit $d0 291 %0:_(s32) = COPY $a0 292 %2:_(s32) = COPY $a2 293 %3:_(s32) = COPY $a3 294 ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 295 $a0 = COPY %0(s32) 296 $a2 = COPY %2(s32) 297 $a3 = COPY %3(s32) 298 JAL @double_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $d0 299 %4:_(s64) = COPY $d0 300 ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 301 $d0 = COPY %4(s64) 302 RetRA implicit $d0 303 304... 305