# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32 --- | define void @_16_bit_positive_offset() {entry: ret void} define void @_16_bit_negative_offset() {entry: ret void} define void @_large_positive_offset() {entry: ret void} define void @_large_negative_offset() {entry: ret void} define void @fold_f32_load() {entry: ret void} define void @fold_f64_store() {entry: ret void} define void @fold_i16_load() {entry: ret void} define void @fold_i32_store() {entry: ret void} ... --- name: _16_bit_positive_offset alignment: 4 legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.1.entry: liveins: $a0 ; MIPS32-LABEL: name: _16_bit_positive_offset ; MIPS32: liveins: $a0 ; MIPS32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0 ; MIPS32: [[LBu:%[0-9]+]]:gpr32 = LBu [[COPY]], 32767 :: (load (s8)) ; MIPS32: $v0 = COPY [[LBu]] ; MIPS32: RetRA implicit $v0 %0:gprb(p0) = COPY $a0 %1:gprb(s32) = G_CONSTANT i32 32767 %2:gprb(p0) = G_PTR_ADD %0, %1(s32) %4:gprb(s32) = G_ZEXTLOAD %2(p0) :: (load (s8)) $v0 = COPY %4(s32) RetRA implicit $v0 ... --- name: _16_bit_negative_offset alignment: 4 legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.1.entry: liveins: $a0, $a1 ; MIPS32-LABEL: name: _16_bit_negative_offset ; MIPS32: liveins: $a0, $a1 ; MIPS32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0 ; MIPS32: [[COPY1:%[0-9]+]]:gpr32 = COPY $a1 ; MIPS32: SB [[COPY]], [[COPY1]], -32768 :: (store (s8)) ; MIPS32: RetRA %2:gprb(s32) = COPY $a0 %1:gprb(p0) = COPY $a1 %3:gprb(s32) = G_CONSTANT i32 -32768 %4:gprb(p0) = G_PTR_ADD %1, %3(s32) %5:gprb(s32) = COPY %2(s32) G_STORE %5(s32), %4(p0) :: (store (s8)) RetRA ... --- name: _large_positive_offset alignment: 4 legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.1.entry: liveins: $a0, $a1 ; MIPS32-LABEL: name: _large_positive_offset ; MIPS32: liveins: $a0, $a1 ; MIPS32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0 ; MIPS32: [[COPY1:%[0-9]+]]:gpr32 = COPY $a1 ; MIPS32: [[ORi:%[0-9]+]]:gpr32 = ORi $zero, 32768 ; MIPS32: [[ADDu:%[0-9]+]]:gpr32 = ADDu [[COPY1]], [[ORi]] ; MIPS32: SB [[COPY]], [[ADDu]], 0 :: (store (s8)) ; MIPS32: RetRA %2:gprb(s32) = COPY $a0 %1:gprb(p0) = COPY $a1 %3:gprb(s32) = G_CONSTANT i32 32768 %4:gprb(p0) = G_PTR_ADD %1, %3(s32) %5:gprb(s32) = COPY %2(s32) G_STORE %5(s32), %4(p0) :: (store (s8)) RetRA ... --- name: _large_negative_offset alignment: 4 legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.1.entry: liveins: $a0 ; MIPS32-LABEL: name: _large_negative_offset ; MIPS32: liveins: $a0 ; MIPS32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0 ; MIPS32: [[LUi:%[0-9]+]]:gpr32 = LUi 65535 ; MIPS32: [[ORi:%[0-9]+]]:gpr32 = ORi [[LUi]], 32767 ; MIPS32: [[ADDu:%[0-9]+]]:gpr32 = ADDu [[COPY]], [[ORi]] ; MIPS32: [[LB:%[0-9]+]]:gpr32 = LB [[ADDu]], 0 :: (load (s8)) ; MIPS32: $v0 = COPY [[LB]] ; MIPS32: RetRA implicit $v0 %0:gprb(p0) = COPY $a0 %1:gprb(s32) = G_CONSTANT i32 -32769 %2:gprb(p0) = G_PTR_ADD %0, %1(s32) %4:gprb(s32) = G_SEXTLOAD %2(p0) :: (load (s8)) $v0 = COPY %4(s32) RetRA implicit $v0 ... --- name: fold_f32_load alignment: 4 legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.1.entry: liveins: $a0 ; MIPS32-LABEL: name: fold_f32_load ; MIPS32: liveins: $a0 ; MIPS32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0 ; MIPS32: [[LWC1_:%[0-9]+]]:fgr32 = LWC1 [[COPY]], 40 :: (load (s32)) ; MIPS32: $f0 = COPY [[LWC1_]] ; MIPS32: RetRA implicit $f0 %0:gprb(p0) = COPY $a0 %1:gprb(s32) = G_CONSTANT i32 40 %2:gprb(p0) = G_PTR_ADD %0, %1(s32) %3:fprb(s32) = G_LOAD %2(p0) :: (load (s32)) $f0 = COPY %3(s32) RetRA implicit $f0 ... --- name: fold_f64_store alignment: 4 legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.1.entry: liveins: $a2, $d6 ; MIPS32-LABEL: name: fold_f64_store ; MIPS32: liveins: $a2, $d6 ; MIPS32: [[COPY:%[0-9]+]]:afgr64 = COPY $d6 ; MIPS32: [[COPY1:%[0-9]+]]:gpr32 = COPY $a2 ; MIPS32: SDC1 [[COPY]], [[COPY1]], -80 :: (store (s64)) ; MIPS32: RetRA %0:fprb(s64) = COPY $d6 %1:gprb(p0) = COPY $a2 %2:gprb(s32) = G_CONSTANT i32 -80 %3:gprb(p0) = G_PTR_ADD %1, %2(s32) G_STORE %0(s64), %3(p0) :: (store (s64)) RetRA ... --- name: fold_i16_load alignment: 4 legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.1.entry: liveins: $a0 ; MIPS32-LABEL: name: fold_i16_load ; MIPS32: liveins: $a0 ; MIPS32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0 ; MIPS32: [[LHu:%[0-9]+]]:gpr32 = LHu [[COPY]], -20 :: (load (s16)) ; MIPS32: $v0 = COPY [[LHu]] ; MIPS32: RetRA implicit $v0 %0:gprb(p0) = COPY $a0 %1:gprb(s32) = G_CONSTANT i32 -20 %2:gprb(p0) = G_PTR_ADD %0, %1(s32) %4:gprb(s32) = G_LOAD %2(p0) :: (load (s16)) $v0 = COPY %4(s32) RetRA implicit $v0 ... --- name: fold_i32_store alignment: 4 legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.1.entry: liveins: $a0, $a1 ; MIPS32-LABEL: name: fold_i32_store ; MIPS32: liveins: $a0, $a1 ; MIPS32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0 ; MIPS32: [[COPY1:%[0-9]+]]:gpr32 = COPY $a1 ; MIPS32: SW [[COPY]], [[COPY1]], 40 :: (store (s32)) ; MIPS32: RetRA %0:gprb(s32) = COPY $a0 %1:gprb(p0) = COPY $a1 %2:gprb(s32) = G_CONSTANT i32 40 %3:gprb(p0) = G_PTR_ADD %1, %2(s32) G_STORE %0(s32), %3(p0) :: (store (s32)) RetRA ...