1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=FP32
3 # RUN: llc -O0 -mtriple=mipsel-linux-gnu -mattr=+fp64,+mips32r2 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=FP64
6 define void @i32tof32() {entry: ret void}
7 define void @i32tof64() {entry: ret void}
8 define void @u32tof64() {entry: ret void}
16 tracksRegLiveness: true
21 ; FP32-LABEL: name: i32tof32
23 ; FP32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0
24 ; FP32: [[PseudoCVT_S_W:%[0-9]+]]:fgr32 = PseudoCVT_S_W [[COPY]]
25 ; FP32: $f0 = COPY [[PseudoCVT_S_W]]
26 ; FP32: RetRA implicit $f0
27 ; FP64-LABEL: name: i32tof32
29 ; FP64: [[COPY:%[0-9]+]]:gpr32 = COPY $a0
30 ; FP64: [[PseudoCVT_S_W:%[0-9]+]]:fgr32 = PseudoCVT_S_W [[COPY]]
31 ; FP64: $f0 = COPY [[PseudoCVT_S_W]]
32 ; FP64: RetRA implicit $f0
33 %0:gprb(s32) = COPY $a0
34 %1:fprb(s32) = G_SITOFP %0(s32)
44 tracksRegLiveness: true
49 ; FP32-LABEL: name: i32tof64
51 ; FP32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0
52 ; FP32: [[PseudoCVT_D32_W:%[0-9]+]]:afgr64 = PseudoCVT_D32_W [[COPY]]
53 ; FP32: $d0 = COPY [[PseudoCVT_D32_W]]
54 ; FP32: RetRA implicit $d0
55 ; FP64-LABEL: name: i32tof64
57 ; FP64: [[COPY:%[0-9]+]]:gpr32 = COPY $a0
58 ; FP64: [[PseudoCVT_D64_W:%[0-9]+]]:fgr64 = PseudoCVT_D64_W [[COPY]]
59 ; FP64: $d0 = COPY [[PseudoCVT_D64_W]]
60 ; FP64: RetRA implicit $d0
61 %0:gprb(s32) = COPY $a0
62 %1:fprb(s64) = G_SITOFP %0(s32)
72 tracksRegLiveness: true
77 ; FP32-LABEL: name: u32tof64
79 ; FP32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0
80 ; FP32: [[LUi:%[0-9]+]]:gpr32 = LUi 17200
81 ; FP32: [[BuildPairF64_:%[0-9]+]]:afgr64 = BuildPairF64 [[COPY]], [[LUi]]
82 ; FP32: [[LUi1:%[0-9]+]]:gpr32 = LUi 17200
83 ; FP32: [[ORi:%[0-9]+]]:gpr32 = ORi $zero, 0
84 ; FP32: [[BuildPairF64_1:%[0-9]+]]:afgr64 = BuildPairF64 [[ORi]], [[LUi1]]
85 ; FP32: [[FSUB_D32_:%[0-9]+]]:afgr64 = FSUB_D32 [[BuildPairF64_]], [[BuildPairF64_1]]
86 ; FP32: $d0 = COPY [[FSUB_D32_]]
87 ; FP32: RetRA implicit $d0
88 ; FP64-LABEL: name: u32tof64
90 ; FP64: [[COPY:%[0-9]+]]:gpr32 = COPY $a0
91 ; FP64: [[LUi:%[0-9]+]]:gpr32 = LUi 17200
92 ; FP64: [[BuildPairF64_64_:%[0-9]+]]:fgr64 = BuildPairF64_64 [[COPY]], [[LUi]]
93 ; FP64: [[LUi1:%[0-9]+]]:gpr32 = LUi 17200
94 ; FP64: [[ORi:%[0-9]+]]:gpr32 = ORi $zero, 0
95 ; FP64: [[BuildPairF64_64_1:%[0-9]+]]:fgr64 = BuildPairF64_64 [[ORi]], [[LUi1]]
96 ; FP64: [[FSUB_D64_:%[0-9]+]]:fgr64 = FSUB_D64 [[BuildPairF64_64_]], [[BuildPairF64_64_1]]
97 ; FP64: $d0 = COPY [[FSUB_D64_]]
98 ; FP64: RetRA implicit $d0
99 %0:gprb(s32) = COPY $a0
100 %2:gprb(s32) = G_CONSTANT i32 1127219200
101 %3:fprb(s64) = G_MERGE_VALUES %0(s32), %2(s32)
102 %4:fprb(s64) = G_FCONSTANT double 0x4330000000000000
103 %1:fprb(s64) = G_FSUB %3, %4