137 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2; RUN: llc -mtriple=riscv32 -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \3; RUN: | FileCheck -check-prefix=RV32I %s4; RUN: llc -mtriple=riscv64 -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \5; RUN: | FileCheck -check-prefix=RV64I %s6 7define void @test_ret_void() {8 ; RV32I-LABEL: name: test_ret_void9 ; RV32I: bb.1.entry:10 ; RV32I-NEXT: PseudoRET11 ; RV64I-LABEL: name: test_ret_void12 ; RV64I: bb.1.entry:13 ; RV64I-NEXT: PseudoRET14entry:15 ret void16}17 18define i8 @test_ret_i8() {19 ; RV32I-LABEL: name: test_ret_i820 ; RV32I: bb.1.entry:21 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 122 ; RV32I-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[C]](s8)23 ; RV32I-NEXT: $x10 = COPY [[ANYEXT]](s32)24 ; RV32I-NEXT: PseudoRET implicit $x1025 ; RV64I-LABEL: name: test_ret_i826 ; RV64I: bb.1.entry:27 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 128 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s8)29 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64)30 ; RV64I-NEXT: PseudoRET implicit $x1031entry:32 ret i8 133}34 35define zeroext i8 @test_ret_i8_zext() {36 ; RV32I-LABEL: name: test_ret_i8_zext37 ; RV32I: bb.1.entry:38 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 139 ; RV32I-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[C]](s8)40 ; RV32I-NEXT: $x10 = COPY [[ZEXT]](s32)41 ; RV32I-NEXT: PseudoRET implicit $x1042 ; RV64I-LABEL: name: test_ret_i8_zext43 ; RV64I: bb.1.entry:44 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 145 ; RV64I-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[C]](s8)46 ; RV64I-NEXT: $x10 = COPY [[ZEXT]](s64)47 ; RV64I-NEXT: PseudoRET implicit $x1048entry:49 ret i8 150}51 52define signext i16 @test_ret_i16_sext() {53 ; RV32I-LABEL: name: test_ret_i16_sext54 ; RV32I: bb.1.entry:55 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 156 ; RV32I-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[C]](s16)57 ; RV32I-NEXT: $x10 = COPY [[SEXT]](s32)58 ; RV32I-NEXT: PseudoRET implicit $x1059 ; RV64I-LABEL: name: test_ret_i16_sext60 ; RV64I: bb.1.entry:61 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 162 ; RV64I-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[C]](s16)63 ; RV64I-NEXT: $x10 = COPY [[SEXT]](s64)64 ; RV64I-NEXT: PseudoRET implicit $x1065entry:66 ret i16 167}68 69define i32 @test_ret_i32() {70 ; RV32I-LABEL: name: test_ret_i3271 ; RV32I: bb.1.entry:72 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 173 ; RV32I-NEXT: $x10 = COPY [[C]](s32)74 ; RV32I-NEXT: PseudoRET implicit $x1075 ; RV64I-LABEL: name: test_ret_i3276 ; RV64I: bb.1.entry:77 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 178 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s32)79 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64)80 ; RV64I-NEXT: PseudoRET implicit $x1081entry:82 ret i32 183}84 85define i64 @test_ret_i64() {86 ; RV32I-LABEL: name: test_ret_i6487 ; RV32I: bb.1.entry:88 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 429496729689 ; RV32I-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C]](s64)90 ; RV32I-NEXT: $x10 = COPY [[UV]](s32)91 ; RV32I-NEXT: $x11 = COPY [[UV1]](s32)92 ; RV32I-NEXT: PseudoRET implicit $x10, implicit $x1193 ; RV64I-LABEL: name: test_ret_i6494 ; RV64I: bb.1.entry:95 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 429496729696 ; RV64I-NEXT: $x10 = COPY [[C]](s64)97 ; RV64I-NEXT: PseudoRET implicit $x1098entry:99 ret i64 4294967296100}101 102define ptr @test_ret_ptr() {103 ; RV32I-LABEL: name: test_ret_ptr104 ; RV32I: bb.1.entry:105 ; RV32I-NEXT: [[DEF:%[0-9]+]]:_(p0) = G_IMPLICIT_DEF106 ; RV32I-NEXT: $x10 = COPY [[DEF]](p0)107 ; RV32I-NEXT: PseudoRET implicit $x10108 ; RV64I-LABEL: name: test_ret_ptr109 ; RV64I: bb.1.entry:110 ; RV64I-NEXT: [[DEF:%[0-9]+]]:_(p0) = G_IMPLICIT_DEF111 ; RV64I-NEXT: $x10 = COPY [[DEF]](p0)112 ; RV64I-NEXT: PseudoRET implicit $x10113entry:114 ret ptr poison115}116 117define [2 x i32] @test_ret_2xi32() {118 ; RV32I-LABEL: name: test_ret_2xi32119 ; RV32I: bb.1.entry:120 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1121 ; RV32I-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2122 ; RV32I-NEXT: $x10 = COPY [[C]](s32)123 ; RV32I-NEXT: $x11 = COPY [[C1]](s32)124 ; RV32I-NEXT: PseudoRET implicit $x10, implicit $x11125 ; RV64I-LABEL: name: test_ret_2xi32126 ; RV64I: bb.1.entry:127 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1128 ; RV64I-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2129 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s32)130 ; RV64I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C1]](s32)131 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64)132 ; RV64I-NEXT: $x11 = COPY [[ANYEXT1]](s64)133 ; RV64I-NEXT: PseudoRET implicit $x10, implicit $x11134entry:135 ret [2 x i32] [i32 1, i32 2]136}137