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=MIPS32
5 define void @load_i32(ptr %ptr) {entry: ret void}
6 define void @load_i64(ptr %ptr) {entry: ret void}
7 define void @load_ambiguous_i64_in_fpr(ptr %i64_ptr_a, ptr %i64_ptr_b) {entry: ret void}
8 define void @load_float(ptr %ptr) {entry: ret void}
9 define void @load_ambiguous_float_in_gpr(ptr %float_ptr_a, ptr %float_ptr_b) {entry: ret void}
10 define void @load_double(ptr %ptr) {entry: ret void}
17 tracksRegLiveness: true
22 ; MIPS32-LABEL: name: load_i32
23 ; MIPS32: liveins: $a0
24 ; MIPS32: [[COPY:%[0-9]+]]:gprb(p0) = COPY $a0
25 ; MIPS32: [[LOAD:%[0-9]+]]:gprb(s32) = G_LOAD [[COPY]](p0) :: (load (s32) from %ir.ptr)
26 ; MIPS32: $v0 = COPY [[LOAD]](s32)
27 ; MIPS32: RetRA implicit $v0
29 %1:_(s32) = G_LOAD %0(p0) :: (load (s32) from %ir.ptr)
38 tracksRegLiveness: true
43 ; MIPS32-LABEL: name: load_i64
44 ; MIPS32: liveins: $a0
45 ; MIPS32: [[COPY:%[0-9]+]]:gprb(p0) = COPY $a0
46 ; MIPS32: [[LOAD:%[0-9]+]]:gprb(s32) = G_LOAD [[COPY]](p0) :: (load (s32) from %ir.ptr, align 8)
47 ; MIPS32: [[C:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 4
48 ; MIPS32: [[PTR_ADD:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
49 ; MIPS32: [[LOAD1:%[0-9]+]]:gprb(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s32) from %ir.ptr + 4, basealign 8)
50 ; MIPS32: $v0 = COPY [[LOAD]](s32)
51 ; MIPS32: $v1 = COPY [[LOAD1]](s32)
52 ; MIPS32: RetRA implicit $v0, implicit $v1
54 %1:_(s64) = G_LOAD %0(p0) :: (load (s64) from %ir.ptr)
55 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64)
58 RetRA implicit $v0, implicit $v1
62 name: load_ambiguous_i64_in_fpr
65 tracksRegLiveness: true
70 ; MIPS32-LABEL: name: load_ambiguous_i64_in_fpr
71 ; MIPS32: liveins: $a0, $a1
72 ; MIPS32: [[COPY:%[0-9]+]]:gprb(p0) = COPY $a0
73 ; MIPS32: [[COPY1:%[0-9]+]]:gprb(p0) = COPY $a1
74 ; MIPS32: [[LOAD:%[0-9]+]]:fprb(s64) = G_LOAD [[COPY]](p0) :: (load (s64) from %ir.i64_ptr_a)
75 ; MIPS32: G_STORE [[LOAD]](s64), [[COPY1]](p0) :: (store (s64) into %ir.i64_ptr_b)
79 %2:_(s64) = G_LOAD %0(p0) :: (load (s64) from %ir.i64_ptr_a)
80 G_STORE %2(s64), %1(p0) :: (store (s64) into %ir.i64_ptr_b)
88 tracksRegLiveness: true
93 ; MIPS32-LABEL: name: load_float
94 ; MIPS32: liveins: $a0
95 ; MIPS32: [[COPY:%[0-9]+]]:gprb(p0) = COPY $a0
96 ; MIPS32: [[LOAD:%[0-9]+]]:fprb(s32) = G_LOAD [[COPY]](p0) :: (load (s32) from %ir.ptr)
97 ; MIPS32: $f0 = COPY [[LOAD]](s32)
98 ; MIPS32: RetRA implicit $f0
100 %1:_(s32) = G_LOAD %0(p0) :: (load (s32) from %ir.ptr)
106 name: load_ambiguous_float_in_gpr
109 tracksRegLiveness: true
114 ; MIPS32-LABEL: name: load_ambiguous_float_in_gpr
115 ; MIPS32: liveins: $a0, $a1
116 ; MIPS32: [[COPY:%[0-9]+]]:gprb(p0) = COPY $a0
117 ; MIPS32: [[COPY1:%[0-9]+]]:gprb(p0) = COPY $a1
118 ; MIPS32: [[LOAD:%[0-9]+]]:gprb(s32) = G_LOAD [[COPY]](p0) :: (load (s32) from %ir.float_ptr_a)
119 ; MIPS32: G_STORE [[LOAD]](s32), [[COPY1]](p0) :: (store (s32) into %ir.float_ptr_b)
123 %2:_(s32) = G_LOAD %0(p0) :: (load (s32) from %ir.float_ptr_a)
124 G_STORE %2(s32), %1(p0) :: (store (s32) into %ir.float_ptr_b)
132 tracksRegLiveness: true
137 ; MIPS32-LABEL: name: load_double
138 ; MIPS32: liveins: $a0
139 ; MIPS32: [[COPY:%[0-9]+]]:gprb(p0) = COPY $a0
140 ; MIPS32: [[LOAD:%[0-9]+]]:fprb(s64) = G_LOAD [[COPY]](p0) :: (load (s64) from %ir.ptr)
141 ; MIPS32: $d0 = COPY [[LOAD]](s64)
142 ; MIPS32: RetRA implicit $d0
144 %1:_(s64) = G_LOAD %0(p0) :: (load (s64) from %ir.ptr)