443 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 7declare void @void_noargs()8 9define void @test_call_void_noargs() {10 11 ; RV32I-LABEL: name: test_call_void_noargs12 ; RV32I: bb.1.entry:13 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x214 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @void_noargs, csr_ilp32_lp64, implicit-def $x115 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x216 ; RV32I-NEXT: PseudoRET17 ;18 ; RV64I-LABEL: name: test_call_void_noargs19 ; RV64I: bb.1.entry:20 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x221 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @void_noargs, csr_ilp32_lp64, implicit-def $x122 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x223 ; RV64I-NEXT: PseudoRET24entry:25 call void @void_noargs()26 ret void27}28 29declare void @void_args_i8(i8, i8)30 31define void @test_call_void_args_i8() {32 33 ; RV32I-LABEL: name: test_call_void_args_i834 ; RV32I: bb.1.entry:35 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 036 ; RV32I-NEXT: [[C1:%[0-9]+]]:_(s8) = G_CONSTANT i8 137 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x238 ; RV32I-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[C]](s8)39 ; RV32I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[C1]](s8)40 ; RV32I-NEXT: $x10 = COPY [[ANYEXT]](s32)41 ; RV32I-NEXT: $x11 = COPY [[ANYEXT1]](s32)42 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @void_args_i8, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x1143 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x244 ; RV32I-NEXT: PseudoRET45 ;46 ; RV64I-LABEL: name: test_call_void_args_i847 ; RV64I: bb.1.entry:48 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 049 ; RV64I-NEXT: [[C1:%[0-9]+]]:_(s8) = G_CONSTANT i8 150 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x251 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s8)52 ; RV64I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C1]](s8)53 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64)54 ; RV64I-NEXT: $x11 = COPY [[ANYEXT1]](s64)55 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @void_args_i8, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x1156 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x257 ; RV64I-NEXT: PseudoRET58entry:59 call void @void_args_i8(i8 0, i8 1)60 ret void61}62 63declare void @void_args_i8_zext(i8 zeroext, i8 zeroext)64 65define void @test_call_void_args_i8_zext() {66 67 ; RV32I-LABEL: name: test_call_void_args_i8_zext68 ; RV32I: bb.1.entry:69 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 070 ; RV32I-NEXT: [[C1:%[0-9]+]]:_(s8) = G_CONSTANT i8 171 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x272 ; RV32I-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[C]](s8)73 ; RV32I-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[C1]](s8)74 ; RV32I-NEXT: $x10 = COPY [[ZEXT]](s32)75 ; RV32I-NEXT: $x11 = COPY [[ZEXT1]](s32)76 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @void_args_i8_zext, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x1177 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x278 ; RV32I-NEXT: PseudoRET79 ;80 ; RV64I-LABEL: name: test_call_void_args_i8_zext81 ; RV64I: bb.1.entry:82 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 083 ; RV64I-NEXT: [[C1:%[0-9]+]]:_(s8) = G_CONSTANT i8 184 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x285 ; RV64I-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[C]](s8)86 ; RV64I-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[C1]](s8)87 ; RV64I-NEXT: $x10 = COPY [[ZEXT]](s64)88 ; RV64I-NEXT: $x11 = COPY [[ZEXT1]](s64)89 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @void_args_i8_zext, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x1190 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x291 ; RV64I-NEXT: PseudoRET92entry:93 call void @void_args_i8_zext(i8 zeroext 0, i8 zeroext 1)94 ret void95}96 97declare void @void_args_i16_sext(i16 signext, i16 signext)98 99define void @test_call_void_args_i16_sext() {100 101 ; RV32I-LABEL: name: test_call_void_args_i16_sext102 ; RV32I: bb.1.entry:103 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0104 ; RV32I-NEXT: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 1105 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2106 ; RV32I-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[C]](s16)107 ; RV32I-NEXT: [[SEXT1:%[0-9]+]]:_(s32) = G_SEXT [[C1]](s16)108 ; RV32I-NEXT: $x10 = COPY [[SEXT]](s32)109 ; RV32I-NEXT: $x11 = COPY [[SEXT1]](s32)110 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @void_args_i16_sext, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11111 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2112 ; RV32I-NEXT: PseudoRET113 ;114 ; RV64I-LABEL: name: test_call_void_args_i16_sext115 ; RV64I: bb.1.entry:116 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0117 ; RV64I-NEXT: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 1118 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2119 ; RV64I-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[C]](s16)120 ; RV64I-NEXT: [[SEXT1:%[0-9]+]]:_(s64) = G_SEXT [[C1]](s16)121 ; RV64I-NEXT: $x10 = COPY [[SEXT]](s64)122 ; RV64I-NEXT: $x11 = COPY [[SEXT1]](s64)123 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @void_args_i16_sext, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11124 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2125 ; RV64I-NEXT: PseudoRET126entry:127 call void @void_args_i16_sext(i16 signext 0, i16 signext 1)128 ret void129}130 131declare void @void_args_i32(i32, i32)132 133define void @test_call_void_args_i32() {134 135 ; RV32I-LABEL: name: test_call_void_args_i32136 ; RV32I: bb.1.entry:137 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0138 ; RV32I-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1139 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2140 ; RV32I-NEXT: $x10 = COPY [[C]](s32)141 ; RV32I-NEXT: $x11 = COPY [[C1]](s32)142 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @void_args_i32, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11143 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2144 ; RV32I-NEXT: PseudoRET145 ;146 ; RV64I-LABEL: name: test_call_void_args_i32147 ; RV64I: bb.1.entry:148 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0149 ; RV64I-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1150 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2151 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s32)152 ; RV64I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C1]](s32)153 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64)154 ; RV64I-NEXT: $x11 = COPY [[ANYEXT1]](s64)155 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @void_args_i32, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11156 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2157 ; RV64I-NEXT: PseudoRET158entry:159 call void @void_args_i32(i32 0, i32 1)160 ret void161}162 163declare void @void_args_i64(i64, i64)164 165define void @test_call_void_args_i64() {166 167 ; RV32I-LABEL: name: test_call_void_args_i64168 ; RV32I: bb.1.entry:169 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0170 ; RV32I-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1171 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2172 ; RV32I-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C]](s64)173 ; RV32I-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C1]](s64)174 ; RV32I-NEXT: $x10 = COPY [[UV]](s32)175 ; RV32I-NEXT: $x11 = COPY [[UV1]](s32)176 ; RV32I-NEXT: $x12 = COPY [[UV2]](s32)177 ; RV32I-NEXT: $x13 = COPY [[UV3]](s32)178 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @void_args_i64, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13179 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2180 ; RV32I-NEXT: PseudoRET181 ;182 ; RV64I-LABEL: name: test_call_void_args_i64183 ; RV64I: bb.1.entry:184 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0185 ; RV64I-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1186 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2187 ; RV64I-NEXT: $x10 = COPY [[C]](s64)188 ; RV64I-NEXT: $x11 = COPY [[C1]](s64)189 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @void_args_i64, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11190 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2191 ; RV64I-NEXT: PseudoRET192entry:193 call void @void_args_i64(i64 0, i64 1)194 ret void195}196 197declare i8 @i8_noargs()198 199define void @test_call_i8_noargs() {200 201 ; RV32I-LABEL: name: test_call_i8_noargs202 ; RV32I: bb.1.entry:203 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2204 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @i8_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10205 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2206 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10207 ; RV32I-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)208 ; RV32I-NEXT: PseudoRET209 ;210 ; RV64I-LABEL: name: test_call_i8_noargs211 ; RV64I: bb.1.entry:212 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2213 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @i8_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10214 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2215 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10216 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s64)217 ; RV64I-NEXT: PseudoRET218entry:219 %a = call i8 @i8_noargs()220 ret void221}222 223declare i16 @i16_noargs()224 225define void @test_call_i16_noargs() {226 227 ; RV32I-LABEL: name: test_call_i16_noargs228 ; RV32I: bb.1.entry:229 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2230 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @i16_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10231 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2232 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10233 ; RV32I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)234 ; RV32I-NEXT: PseudoRET235 ;236 ; RV64I-LABEL: name: test_call_i16_noargs237 ; RV64I: bb.1.entry:238 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2239 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @i16_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10240 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2241 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10242 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64)243 ; RV64I-NEXT: PseudoRET244entry:245 %a = call i16 @i16_noargs()246 ret void247}248 249declare i32 @i32_noargs()250 251define void @test_call_i32_noargs() {252 253 ; RV32I-LABEL: name: test_call_i32_noargs254 ; RV32I: bb.1.entry:255 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2256 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @i32_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10257 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2258 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10259 ; RV32I-NEXT: PseudoRET260 ;261 ; RV64I-LABEL: name: test_call_i32_noargs262 ; RV64I: bb.1.entry:263 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2264 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @i32_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10265 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2266 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10267 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)268 ; RV64I-NEXT: PseudoRET269entry:270 %a = call i32 @i32_noargs()271 ret void272}273 274declare i64 @i64_noargs()275 276define void @test_call_i64_noargs() {277 278 ; RV32I-LABEL: name: test_call_i64_noargs279 ; RV32I: bb.1.entry:280 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2281 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @i64_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10, implicit-def $x11282 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2283 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10284 ; RV32I-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11285 ; RV32I-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)286 ; RV32I-NEXT: PseudoRET287 ;288 ; RV64I-LABEL: name: test_call_i64_noargs289 ; RV64I: bb.1.entry:290 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2291 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @i64_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10292 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2293 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10294 ; RV64I-NEXT: PseudoRET295entry:296 %a = call i64 @i64_noargs()297 ret void298}299 300declare ptr @ptr_noargs()301 302define void @test_call_ptr_noargs() {303 ; RV32I-LABEL: name: test_call_ptr_noargs304 ; RV32I: bb.1.entry:305 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2306 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @ptr_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10307 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2308 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10309 ; RV32I-NEXT: PseudoRET310 ;311 ; RV64I-LABEL: name: test_call_ptr_noargs312 ; RV64I: bb.1.entry:313 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2314 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @ptr_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10315 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2316 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10317 ; RV64I-NEXT: PseudoRET318entry:319 %a = call ptr @ptr_noargs()320 ret void321}322 323declare [2 x i32] @i32x2_noargs()324 325define void @test_call_i32x2_noargs() {326 ; RV32I-LABEL: name: test_call_i32x2_noargs327 ; RV32I: bb.1.entry:328 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2329 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @i32x2_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10, implicit-def $x11330 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2331 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10332 ; RV32I-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11333 ; RV32I-NEXT: PseudoRET334 ;335 ; RV64I-LABEL: name: test_call_i32x2_noargs336 ; RV64I: bb.1.entry:337 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2338 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @i32x2_noargs, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10, implicit-def $x11339 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2340 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10341 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)342 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11343 ; RV64I-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)344 ; RV64I-NEXT: PseudoRET345entry:346 %a = call [2 x i32] @i32x2_noargs()347 ret void348}349 350%struct.Foo = type { i32, i32, i32, i16, i8 }351@foo = global %struct.Foo { i32 1, i32 2, i32 3, i16 4, i8 5 }, align 4352 353declare void @void_sret_args(ptr sret(%struct.Foo) %f)354 355define void @test_void_sret_args() {356 ; RV32I-LABEL: name: test_void_sret_args357 ; RV32I: bb.1.entry:358 ; RV32I-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @foo359 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2360 ; RV32I-NEXT: $x10 = COPY [[GV]](p0)361 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @void_sret_args, csr_ilp32_lp64, implicit-def $x1, implicit $x10362 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2363 ; RV32I-NEXT: PseudoRET364 ;365 ; RV64I-LABEL: name: test_void_sret_args366 ; RV64I: bb.1.entry:367 ; RV64I-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @foo368 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2369 ; RV64I-NEXT: $x10 = COPY [[GV]](p0)370 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @void_sret_args, csr_ilp32_lp64, implicit-def $x1, implicit $x10371 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2372 ; RV64I-NEXT: PseudoRET373entry:374 call void @void_sret_args(ptr sret(%struct.Foo) @foo)375 ret void376}377 378declare external void @external_function()379 380define void @test_call_external() {381 ; RV32I-LABEL: name: test_call_external382 ; RV32I: bb.1.entry:383 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2384 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @external_function, csr_ilp32_lp64, implicit-def $x1385 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2386 ; RV32I-NEXT: PseudoRET387 ;388 ; RV64I-LABEL: name: test_call_external389 ; RV64I: bb.1.entry:390 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2391 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @external_function, csr_ilp32_lp64, implicit-def $x1392 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2393 ; RV64I-NEXT: PseudoRET394entry:395 call void @external_function()396 ret void397}398 399declare dso_local void @dso_local_function()400 401define void @test_call_local() {402 ; RV32I-LABEL: name: test_call_local403 ; RV32I: bb.1.entry:404 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2405 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @dso_local_function, csr_ilp32_lp64, implicit-def $x1406 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2407 ; RV32I-NEXT: PseudoRET408 ;409 ; RV64I-LABEL: name: test_call_local410 ; RV64I: bb.1.entry:411 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2412 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @dso_local_function, csr_ilp32_lp64, implicit-def $x1413 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2414 ; RV64I-NEXT: PseudoRET415entry:416 call void @dso_local_function()417 ret void418}419 420define void @test_indirect_call(ptr %func) {421 ; RV32I-LABEL: name: test_indirect_call422 ; RV32I: bb.1 (%ir-block.0):423 ; RV32I-NEXT: liveins: $x10424 ; RV32I-NEXT: {{ $}}425 ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprjalr(p0) = COPY $x10426 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2427 ; RV32I-NEXT: PseudoCALLIndirect [[COPY]](p0), csr_ilp32_lp64, implicit-def $x1428 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2429 ; RV32I-NEXT: PseudoRET430 ;431 ; RV64I-LABEL: name: test_indirect_call432 ; RV64I: bb.1 (%ir-block.0):433 ; RV64I-NEXT: liveins: $x10434 ; RV64I-NEXT: {{ $}}435 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprjalr(p0) = COPY $x10436 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2437 ; RV64I-NEXT: PseudoCALLIndirect [[COPY]](p0), csr_ilp32_lp64, implicit-def $x1438 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2439 ; RV64I-NEXT: PseudoRET440 call void %func()441 ret void442}443