brintos

brintos / llvm-project-archived public Read only

0
0
Text · 70.1 KiB · a297358 Raw
1253 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=riscv64 \3; RUN:    -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \4; RUN:   | FileCheck -check-prefixes=RV64I,LP64 %s5; RUN: llc -mtriple=riscv64 -mattr=+f -target-abi lp64f \6; RUN:    -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \7; RUN:   | FileCheck -check-prefixes=RV64I,LP64F %s8; RUN: llc -mtriple=riscv64 -mattr=+d -target-abi lp64d \9; RUN:    -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \10; RUN:   | FileCheck -check-prefixes=RV64I,LP64D %s11 12; This file contains tests that should have identical output for the lp64,13; lp64f, and lp64d ABIs. i.e. where no arguments are passed according to14; the floating point ABI.15 16; Check that on RV64, i128 is passed in a pair of registers. Unlike17; the convention for varargs, this need not be an aligned pair.18 19define i64 @callee_i128_in_regs(i64 %a, i128 %b) nounwind {20  ; RV64I-LABEL: name: callee_i128_in_regs21  ; RV64I: bb.1 (%ir-block.0):22  ; RV64I-NEXT:   liveins: $x10, $x11, $x1223  ; RV64I-NEXT: {{  $}}24  ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x1025  ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x1126  ; RV64I-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x1227  ; RV64I-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY1]](s64), [[COPY2]](s64)28  ; RV64I-NEXT:   [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[MV]](s128)29  ; RV64I-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[TRUNC]]30  ; RV64I-NEXT:   $x10 = COPY [[ADD]](s64)31  ; RV64I-NEXT:   PseudoRET implicit $x1032  %b_trunc = trunc i128 %b to i6433  %1 = add i64 %a, %b_trunc34  ret i64 %135}36 37define i64 @caller_i128_in_regs() nounwind {38  ; LP64-LABEL: name: caller_i128_in_regs39  ; LP64: bb.1 (%ir-block.0):40  ; LP64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 141  ; LP64-NEXT:   [[C1:%[0-9]+]]:_(s128) = G_CONSTANT i128 242  ; LP64-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x243  ; LP64-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C1]](s128)44  ; LP64-NEXT:   $x10 = COPY [[C]](s64)45  ; LP64-NEXT:   $x11 = COPY [[UV]](s64)46  ; LP64-NEXT:   $x12 = COPY [[UV1]](s64)47  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i128_in_regs, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit-def $x1048  ; LP64-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x249  ; LP64-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x1050  ; LP64-NEXT:   $x10 = COPY [[COPY]](s64)51  ; LP64-NEXT:   PseudoRET implicit $x1052  ;53  ; LP64F-LABEL: name: caller_i128_in_regs54  ; LP64F: bb.1 (%ir-block.0):55  ; LP64F-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 156  ; LP64F-NEXT:   [[C1:%[0-9]+]]:_(s128) = G_CONSTANT i128 257  ; LP64F-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x258  ; LP64F-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C1]](s128)59  ; LP64F-NEXT:   $x10 = COPY [[C]](s64)60  ; LP64F-NEXT:   $x11 = COPY [[UV]](s64)61  ; LP64F-NEXT:   $x12 = COPY [[UV1]](s64)62  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i128_in_regs, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit-def $x1063  ; LP64F-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x264  ; LP64F-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x1065  ; LP64F-NEXT:   $x10 = COPY [[COPY]](s64)66  ; LP64F-NEXT:   PseudoRET implicit $x1067  ;68  ; LP64D-LABEL: name: caller_i128_in_regs69  ; LP64D: bb.1 (%ir-block.0):70  ; LP64D-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 171  ; LP64D-NEXT:   [[C1:%[0-9]+]]:_(s128) = G_CONSTANT i128 272  ; LP64D-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x273  ; LP64D-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C1]](s128)74  ; LP64D-NEXT:   $x10 = COPY [[C]](s64)75  ; LP64D-NEXT:   $x11 = COPY [[UV]](s64)76  ; LP64D-NEXT:   $x12 = COPY [[UV1]](s64)77  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i128_in_regs, csr_ilp32d_lp64d, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit-def $x1078  ; LP64D-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x279  ; LP64D-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x1080  ; LP64D-NEXT:   $x10 = COPY [[COPY]](s64)81  ; LP64D-NEXT:   PseudoRET implicit $x1082  %1 = call i64 @callee_i128_in_regs(i64 1, i128 2)83  ret i64 %184}85 86define i64 @callee_i128_fp128_in_regs(i128 %a, fp128 %b) nounwind {87  ; RV64I-LABEL: name: callee_i128_fp128_in_regs88  ; RV64I: bb.1 (%ir-block.0):89  ; RV64I-NEXT:   liveins: $x10, $x11, $x12, $x1390  ; RV64I-NEXT: {{  $}}91  ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x1092  ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x1193  ; RV64I-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)94  ; RV64I-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x1295  ; RV64I-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x1396  ; RV64I-NEXT:   [[MV1:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY2]](s64), [[COPY3]](s64)97  ; RV64I-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[MV]](s128), [[MV1]]98  ; RV64I-NEXT:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ICMP]](s1)99  ; RV64I-NEXT:   $x10 = COPY [[ZEXT]](s64)100  ; RV64I-NEXT:   PseudoRET implicit $x10101  %b_bitcast = bitcast fp128 %b to i128102  %1 = icmp eq i128 %a, %b_bitcast103  %2 = zext i1 %1 to i64104  ret i64 %2105}106 107define i64 @caller_i128_fp128_in_regs() nounwind {108  ; LP64-LABEL: name: caller_i128_fp128_in_regs109  ; LP64: bb.1 (%ir-block.0):110  ; LP64-NEXT:   [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 1111  ; LP64-NEXT:   [[C1:%[0-9]+]]:_(s128) = G_FCONSTANT fp128 0xL00000000000000007FFF000000000000112  ; LP64-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2113  ; LP64-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C]](s128)114  ; LP64-NEXT:   [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C1]](s128)115  ; LP64-NEXT:   $x10 = COPY [[UV]](s64)116  ; LP64-NEXT:   $x11 = COPY [[UV1]](s64)117  ; LP64-NEXT:   $x12 = COPY [[UV2]](s64)118  ; LP64-NEXT:   $x13 = COPY [[UV3]](s64)119  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i128_fp128_in_regs, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit-def $x10120  ; LP64-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2121  ; LP64-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10122  ; LP64-NEXT:   $x10 = COPY [[COPY]](s64)123  ; LP64-NEXT:   PseudoRET implicit $x10124  ;125  ; LP64F-LABEL: name: caller_i128_fp128_in_regs126  ; LP64F: bb.1 (%ir-block.0):127  ; LP64F-NEXT:   [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 1128  ; LP64F-NEXT:   [[C1:%[0-9]+]]:_(s128) = G_FCONSTANT fp128 0xL00000000000000007FFF000000000000129  ; LP64F-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2130  ; LP64F-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C]](s128)131  ; LP64F-NEXT:   [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C1]](s128)132  ; LP64F-NEXT:   $x10 = COPY [[UV]](s64)133  ; LP64F-NEXT:   $x11 = COPY [[UV1]](s64)134  ; LP64F-NEXT:   $x12 = COPY [[UV2]](s64)135  ; LP64F-NEXT:   $x13 = COPY [[UV3]](s64)136  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i128_fp128_in_regs, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit-def $x10137  ; LP64F-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2138  ; LP64F-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10139  ; LP64F-NEXT:   $x10 = COPY [[COPY]](s64)140  ; LP64F-NEXT:   PseudoRET implicit $x10141  ;142  ; LP64D-LABEL: name: caller_i128_fp128_in_regs143  ; LP64D: bb.1 (%ir-block.0):144  ; LP64D-NEXT:   [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 1145  ; LP64D-NEXT:   [[C1:%[0-9]+]]:_(s128) = G_FCONSTANT fp128 0xL00000000000000007FFF000000000000146  ; LP64D-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2147  ; LP64D-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C]](s128)148  ; LP64D-NEXT:   [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C1]](s128)149  ; LP64D-NEXT:   $x10 = COPY [[UV]](s64)150  ; LP64D-NEXT:   $x11 = COPY [[UV1]](s64)151  ; LP64D-NEXT:   $x12 = COPY [[UV2]](s64)152  ; LP64D-NEXT:   $x13 = COPY [[UV3]](s64)153  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i128_fp128_in_regs, csr_ilp32d_lp64d, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit-def $x10154  ; LP64D-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2155  ; LP64D-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10156  ; LP64D-NEXT:   $x10 = COPY [[COPY]](s64)157  ; LP64D-NEXT:   PseudoRET implicit $x10158  %1 = call i64 @callee_i128_fp128_in_regs(i128 1, fp128 0xL00000000000000007FFF000000000000)159  ret i64 %1160}161 162; Check the correct handling of passing of values that are larger that 2*XLen.163 164define i32 @caller_i256_indirect_reference_in_stack() {165  ; LP64-LABEL: name: caller_i256_indirect_reference_in_stack166  ; LP64: bb.1 (%ir-block.0):167  ; LP64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1168  ; LP64-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2169  ; LP64-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 3170  ; LP64-NEXT:   [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 4171  ; LP64-NEXT:   [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 5172  ; LP64-NEXT:   [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 6173  ; LP64-NEXT:   [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 7174  ; LP64-NEXT:   [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 8175  ; LP64-NEXT:   [[C8:%[0-9]+]]:_(s256) = G_CONSTANT i256 42176  ; LP64-NEXT:   ADJCALLSTACKDOWN 8, 0, implicit-def $x2, implicit $x2177  ; LP64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0178  ; LP64-NEXT:   G_STORE [[C8]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)179  ; LP64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x2180  ; LP64-NEXT:   [[C9:%[0-9]+]]:_(s64) = G_CONSTANT i64 0181  ; LP64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C9]](s64)182  ; LP64-NEXT:   G_STORE [[FRAME_INDEX]](p0), [[PTR_ADD]](p0) :: (store (p0) into stack, align 16)183  ; LP64-NEXT:   $x10 = COPY [[C]](s64)184  ; LP64-NEXT:   $x11 = COPY [[C1]](s64)185  ; LP64-NEXT:   $x12 = COPY [[C2]](s64)186  ; LP64-NEXT:   $x13 = COPY [[C3]](s64)187  ; LP64-NEXT:   $x14 = COPY [[C4]](s64)188  ; LP64-NEXT:   $x15 = COPY [[C5]](s64)189  ; LP64-NEXT:   $x16 = COPY [[C6]](s64)190  ; LP64-NEXT:   $x17 = COPY [[C7]](s64)191  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i256_indirect_reference_in_stack, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10192  ; LP64-NEXT:   ADJCALLSTACKUP 8, 0, implicit-def $x2, implicit $x2193  ; LP64-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x10194  ; LP64-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)195  ; LP64-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32)196  ; LP64-NEXT:   $x10 = COPY [[ANYEXT]](s64)197  ; LP64-NEXT:   PseudoRET implicit $x10198  ;199  ; LP64F-LABEL: name: caller_i256_indirect_reference_in_stack200  ; LP64F: bb.1 (%ir-block.0):201  ; LP64F-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1202  ; LP64F-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2203  ; LP64F-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 3204  ; LP64F-NEXT:   [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 4205  ; LP64F-NEXT:   [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 5206  ; LP64F-NEXT:   [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 6207  ; LP64F-NEXT:   [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 7208  ; LP64F-NEXT:   [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 8209  ; LP64F-NEXT:   [[C8:%[0-9]+]]:_(s256) = G_CONSTANT i256 42210  ; LP64F-NEXT:   ADJCALLSTACKDOWN 8, 0, implicit-def $x2, implicit $x2211  ; LP64F-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0212  ; LP64F-NEXT:   G_STORE [[C8]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)213  ; LP64F-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x2214  ; LP64F-NEXT:   [[C9:%[0-9]+]]:_(s64) = G_CONSTANT i64 0215  ; LP64F-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C9]](s64)216  ; LP64F-NEXT:   G_STORE [[FRAME_INDEX]](p0), [[PTR_ADD]](p0) :: (store (p0) into stack, align 16)217  ; LP64F-NEXT:   $x10 = COPY [[C]](s64)218  ; LP64F-NEXT:   $x11 = COPY [[C1]](s64)219  ; LP64F-NEXT:   $x12 = COPY [[C2]](s64)220  ; LP64F-NEXT:   $x13 = COPY [[C3]](s64)221  ; LP64F-NEXT:   $x14 = COPY [[C4]](s64)222  ; LP64F-NEXT:   $x15 = COPY [[C5]](s64)223  ; LP64F-NEXT:   $x16 = COPY [[C6]](s64)224  ; LP64F-NEXT:   $x17 = COPY [[C7]](s64)225  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i256_indirect_reference_in_stack, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10226  ; LP64F-NEXT:   ADJCALLSTACKUP 8, 0, implicit-def $x2, implicit $x2227  ; LP64F-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x10228  ; LP64F-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)229  ; LP64F-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32)230  ; LP64F-NEXT:   $x10 = COPY [[ANYEXT]](s64)231  ; LP64F-NEXT:   PseudoRET implicit $x10232  ;233  ; LP64D-LABEL: name: caller_i256_indirect_reference_in_stack234  ; LP64D: bb.1 (%ir-block.0):235  ; LP64D-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1236  ; LP64D-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2237  ; LP64D-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 3238  ; LP64D-NEXT:   [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 4239  ; LP64D-NEXT:   [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 5240  ; LP64D-NEXT:   [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 6241  ; LP64D-NEXT:   [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 7242  ; LP64D-NEXT:   [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 8243  ; LP64D-NEXT:   [[C8:%[0-9]+]]:_(s256) = G_CONSTANT i256 42244  ; LP64D-NEXT:   ADJCALLSTACKDOWN 8, 0, implicit-def $x2, implicit $x2245  ; LP64D-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0246  ; LP64D-NEXT:   G_STORE [[C8]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)247  ; LP64D-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x2248  ; LP64D-NEXT:   [[C9:%[0-9]+]]:_(s64) = G_CONSTANT i64 0249  ; LP64D-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C9]](s64)250  ; LP64D-NEXT:   G_STORE [[FRAME_INDEX]](p0), [[PTR_ADD]](p0) :: (store (p0) into stack, align 16)251  ; LP64D-NEXT:   $x10 = COPY [[C]](s64)252  ; LP64D-NEXT:   $x11 = COPY [[C1]](s64)253  ; LP64D-NEXT:   $x12 = COPY [[C2]](s64)254  ; LP64D-NEXT:   $x13 = COPY [[C3]](s64)255  ; LP64D-NEXT:   $x14 = COPY [[C4]](s64)256  ; LP64D-NEXT:   $x15 = COPY [[C5]](s64)257  ; LP64D-NEXT:   $x16 = COPY [[C6]](s64)258  ; LP64D-NEXT:   $x17 = COPY [[C7]](s64)259  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i256_indirect_reference_in_stack, csr_ilp32d_lp64d, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10260  ; LP64D-NEXT:   ADJCALLSTACKUP 8, 0, implicit-def $x2, implicit $x2261  ; LP64D-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x10262  ; LP64D-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)263  ; LP64D-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32)264  ; LP64D-NEXT:   $x10 = COPY [[ANYEXT]](s64)265  ; LP64D-NEXT:   PseudoRET implicit $x10266  %1 = call i64 @callee_i256_indirect_reference_in_stack(i64 1, i64 2, i64 3, i64 4,i64 5,i64 6,i64 7,i64 8, i256 42)267  %2 = trunc i64 %1 to i32268  ret i32 %2269}270 271 272define i64 @callee_i256_indirect_reference_in_stack(i64 %x1, i64 %x2, i64 %x3, i64 %x4, i64 %x5, i64 %x6, i64 %x7, i64 %x8, i256 %y) {273  ; RV64I-LABEL: name: callee_i256_indirect_reference_in_stack274  ; RV64I: bb.1 (%ir-block.0):275  ; RV64I-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17276  ; RV64I-NEXT: {{  $}}277  ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10278  ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11279  ; RV64I-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x12280  ; RV64I-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x13281  ; RV64I-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x14282  ; RV64I-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x15283  ; RV64I-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x16284  ; RV64I-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x17285  ; RV64I-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0286  ; RV64I-NEXT:   [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (load (p0) from %fixed-stack.0, align 16)287  ; RV64I-NEXT:   [[LOAD1:%[0-9]+]]:_(s256) = G_LOAD [[LOAD]](p0) :: (load (s256), align 16)288  ; RV64I-NEXT:   [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[LOAD1]](s256)289  ; RV64I-NEXT:   $x10 = COPY [[TRUNC]](s64)290  ; RV64I-NEXT:   PseudoRET implicit $x10291  %2 = trunc i256 %y to i64292  ret i64 %2293}294 295 296define i64 @callee_i256_indirect_reference_in_reg(i256 %x, i256 %y) {297  ; RV64I-LABEL: name: callee_i256_indirect_reference_in_reg298  ; RV64I: bb.1 (%ir-block.0):299  ; RV64I-NEXT:   liveins: $x10, $x11300  ; RV64I-NEXT: {{  $}}301  ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10302  ; RV64I-NEXT:   [[LOAD:%[0-9]+]]:_(s256) = G_LOAD [[COPY]](p0) :: (load (s256), align 16)303  ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11304  ; RV64I-NEXT:   [[LOAD1:%[0-9]+]]:_(s256) = G_LOAD [[COPY1]](p0) :: (load (s256), align 16)305  ; RV64I-NEXT:   [[ADD:%[0-9]+]]:_(s256) = G_ADD [[LOAD]], [[LOAD1]]306  ; RV64I-NEXT:   [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[ADD]](s256)307  ; RV64I-NEXT:   $x10 = COPY [[TRUNC]](s64)308  ; RV64I-NEXT:   PseudoRET implicit $x10309  %1 = add i256 %x, %y310  %2 = trunc i256 %1 to i64311  ret i64 %2312}313 314define i32 @caller_i256_indirect_reference_in_reg() {315  ; LP64-LABEL: name: caller_i256_indirect_reference_in_reg316  ; LP64: bb.1 (%ir-block.0):317  ; LP64-NEXT:   [[C:%[0-9]+]]:_(s256) = G_CONSTANT i256 1318  ; LP64-NEXT:   [[C1:%[0-9]+]]:_(s256) = G_CONSTANT i256 2319  ; LP64-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2320  ; LP64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0321  ; LP64-NEXT:   G_STORE [[C]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)322  ; LP64-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1323  ; LP64-NEXT:   G_STORE [[C1]](s256), [[FRAME_INDEX1]](p0) :: (store (s256) into %stack.1, align 16)324  ; LP64-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)325  ; LP64-NEXT:   $x11 = COPY [[FRAME_INDEX1]](p0)326  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i256_indirect_reference_in_reg, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10327  ; LP64-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2328  ; LP64-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10329  ; LP64-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)330  ; LP64-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32)331  ; LP64-NEXT:   $x10 = COPY [[ANYEXT]](s64)332  ; LP64-NEXT:   PseudoRET implicit $x10333  ;334  ; LP64F-LABEL: name: caller_i256_indirect_reference_in_reg335  ; LP64F: bb.1 (%ir-block.0):336  ; LP64F-NEXT:   [[C:%[0-9]+]]:_(s256) = G_CONSTANT i256 1337  ; LP64F-NEXT:   [[C1:%[0-9]+]]:_(s256) = G_CONSTANT i256 2338  ; LP64F-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2339  ; LP64F-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0340  ; LP64F-NEXT:   G_STORE [[C]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)341  ; LP64F-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1342  ; LP64F-NEXT:   G_STORE [[C1]](s256), [[FRAME_INDEX1]](p0) :: (store (s256) into %stack.1, align 16)343  ; LP64F-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)344  ; LP64F-NEXT:   $x11 = COPY [[FRAME_INDEX1]](p0)345  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i256_indirect_reference_in_reg, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10346  ; LP64F-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2347  ; LP64F-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10348  ; LP64F-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)349  ; LP64F-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32)350  ; LP64F-NEXT:   $x10 = COPY [[ANYEXT]](s64)351  ; LP64F-NEXT:   PseudoRET implicit $x10352  ;353  ; LP64D-LABEL: name: caller_i256_indirect_reference_in_reg354  ; LP64D: bb.1 (%ir-block.0):355  ; LP64D-NEXT:   [[C:%[0-9]+]]:_(s256) = G_CONSTANT i256 1356  ; LP64D-NEXT:   [[C1:%[0-9]+]]:_(s256) = G_CONSTANT i256 2357  ; LP64D-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2358  ; LP64D-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0359  ; LP64D-NEXT:   G_STORE [[C]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)360  ; LP64D-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1361  ; LP64D-NEXT:   G_STORE [[C1]](s256), [[FRAME_INDEX1]](p0) :: (store (s256) into %stack.1, align 16)362  ; LP64D-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)363  ; LP64D-NEXT:   $x11 = COPY [[FRAME_INDEX1]](p0)364  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_i256_indirect_reference_in_reg, csr_ilp32d_lp64d, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10365  ; LP64D-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2366  ; LP64D-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10367  ; LP64D-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)368  ; LP64D-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32)369  ; LP64D-NEXT:   $x10 = COPY [[ANYEXT]](s64)370  ; LP64D-NEXT:   PseudoRET implicit $x10371  %1 = call i64 @callee_i256_indirect_reference_in_reg(i256 1, i256 2)372  %2 = trunc i64 %1 to i32373  ret i32 %2374}375 376; Check that the stack is used once the GPRs are exhausted377 378define i32 @callee_many_scalars(i8 %a, i16 %b, i32 %c, i128 %d, i32 %e, i32 %f, i128 %g, i32 %h) nounwind {379  ; RV64I-LABEL: name: callee_many_scalars380  ; RV64I: bb.1 (%ir-block.0):381  ; RV64I-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17382  ; RV64I-NEXT: {{  $}}383  ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10384  ; RV64I-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s64)385  ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11386  ; RV64I-NEXT:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s64)387  ; RV64I-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x12388  ; RV64I-NEXT:   [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[COPY2]](s64)389  ; RV64I-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x13390  ; RV64I-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x14391  ; RV64I-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY3]](s64), [[COPY4]](s64)392  ; RV64I-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x15393  ; RV64I-NEXT:   [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[COPY5]](s64)394  ; RV64I-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x16395  ; RV64I-NEXT:   [[TRUNC4:%[0-9]+]]:_(s32) = G_TRUNC [[COPY6]](s64)396  ; RV64I-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x17397  ; RV64I-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1398  ; RV64I-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s64) from %fixed-stack.1, align 16)399  ; RV64I-NEXT:   [[MV1:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY7]](s64), [[LOAD]](s64)400  ; RV64I-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0401  ; RV64I-NEXT:   [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX1]](p0) :: (load (s64) from %fixed-stack.0)402  ; RV64I-NEXT:   [[TRUNC5:%[0-9]+]]:_(s32) = G_TRUNC [[LOAD1]](s64)403  ; RV64I-NEXT:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s8)404  ; RV64I-NEXT:   [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC1]](s16)405  ; RV64I-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ZEXT]], [[ZEXT1]]406  ; RV64I-NEXT:   [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[ADD]], [[TRUNC2]]407  ; RV64I-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[MV]](s128), [[MV1]]408  ; RV64I-NEXT:   [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[ICMP]](s1)409  ; RV64I-NEXT:   [[ADD2:%[0-9]+]]:_(s32) = G_ADD [[ZEXT2]], [[ADD1]]410  ; RV64I-NEXT:   [[ADD3:%[0-9]+]]:_(s32) = G_ADD [[ADD2]], [[TRUNC3]]411  ; RV64I-NEXT:   [[ADD4:%[0-9]+]]:_(s32) = G_ADD [[ADD3]], [[TRUNC4]]412  ; RV64I-NEXT:   [[ADD5:%[0-9]+]]:_(s32) = G_ADD [[ADD4]], [[TRUNC5]]413  ; RV64I-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[ADD5]](s32)414  ; RV64I-NEXT:   $x10 = COPY [[ANYEXT]](s64)415  ; RV64I-NEXT:   PseudoRET implicit $x10416  %a_ext = zext i8 %a to i32417  %b_ext = zext i16 %b to i32418  %1 = add i32 %a_ext, %b_ext419  %2 = add i32 %1, %c420  %3 = icmp eq i128 %d, %g421  %4 = zext i1 %3 to i32422  %5 = add i32 %4, %2423  %6 = add i32 %5, %e424  %7 = add i32 %6, %f425  %8 = add i32 %7, %h426  ret i32 %8427}428 429define i32 @caller_many_scalars() nounwind {430  ; LP64-LABEL: name: caller_many_scalars431  ; LP64: bb.1 (%ir-block.0):432  ; LP64-NEXT:   [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 1433  ; LP64-NEXT:   [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 2434  ; LP64-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 3435  ; LP64-NEXT:   [[C3:%[0-9]+]]:_(s128) = G_CONSTANT i128 4436  ; LP64-NEXT:   [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 5437  ; LP64-NEXT:   [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 6438  ; LP64-NEXT:   [[C6:%[0-9]+]]:_(s128) = G_CONSTANT i128 7439  ; LP64-NEXT:   [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 8440  ; LP64-NEXT:   ADJCALLSTACKDOWN 16, 0, implicit-def $x2, implicit $x2441  ; LP64-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s8)442  ; LP64-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C1]](s16)443  ; LP64-NEXT:   [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[C2]](s32)444  ; LP64-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C3]](s128)445  ; LP64-NEXT:   [[ANYEXT3:%[0-9]+]]:_(s64) = G_ANYEXT [[C4]](s32)446  ; LP64-NEXT:   [[ANYEXT4:%[0-9]+]]:_(s64) = G_ANYEXT [[C5]](s32)447  ; LP64-NEXT:   [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C6]](s128)448  ; LP64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x2449  ; LP64-NEXT:   [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 0450  ; LP64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C8]](s64)451  ; LP64-NEXT:   G_STORE [[UV3]](s64), [[PTR_ADD]](p0) :: (store (s64) into stack, align 16)452  ; LP64-NEXT:   [[ANYEXT5:%[0-9]+]]:_(s64) = G_ANYEXT [[C7]](s32)453  ; LP64-NEXT:   [[C9:%[0-9]+]]:_(s64) = G_CONSTANT i64 8454  ; LP64-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C9]](s64)455  ; LP64-NEXT:   G_STORE [[ANYEXT5]](s64), [[PTR_ADD1]](p0) :: (store (s64) into stack + 8)456  ; LP64-NEXT:   $x10 = COPY [[ANYEXT]](s64)457  ; LP64-NEXT:   $x11 = COPY [[ANYEXT1]](s64)458  ; LP64-NEXT:   $x12 = COPY [[ANYEXT2]](s64)459  ; LP64-NEXT:   $x13 = COPY [[UV]](s64)460  ; LP64-NEXT:   $x14 = COPY [[UV1]](s64)461  ; LP64-NEXT:   $x15 = COPY [[ANYEXT3]](s64)462  ; LP64-NEXT:   $x16 = COPY [[ANYEXT4]](s64)463  ; LP64-NEXT:   $x17 = COPY [[UV2]](s64)464  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_many_scalars, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10465  ; LP64-NEXT:   ADJCALLSTACKUP 16, 0, implicit-def $x2, implicit $x2466  ; LP64-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x10467  ; LP64-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)468  ; LP64-NEXT:   [[ANYEXT6:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32)469  ; LP64-NEXT:   $x10 = COPY [[ANYEXT6]](s64)470  ; LP64-NEXT:   PseudoRET implicit $x10471  ;472  ; LP64F-LABEL: name: caller_many_scalars473  ; LP64F: bb.1 (%ir-block.0):474  ; LP64F-NEXT:   [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 1475  ; LP64F-NEXT:   [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 2476  ; LP64F-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 3477  ; LP64F-NEXT:   [[C3:%[0-9]+]]:_(s128) = G_CONSTANT i128 4478  ; LP64F-NEXT:   [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 5479  ; LP64F-NEXT:   [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 6480  ; LP64F-NEXT:   [[C6:%[0-9]+]]:_(s128) = G_CONSTANT i128 7481  ; LP64F-NEXT:   [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 8482  ; LP64F-NEXT:   ADJCALLSTACKDOWN 16, 0, implicit-def $x2, implicit $x2483  ; LP64F-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s8)484  ; LP64F-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C1]](s16)485  ; LP64F-NEXT:   [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[C2]](s32)486  ; LP64F-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C3]](s128)487  ; LP64F-NEXT:   [[ANYEXT3:%[0-9]+]]:_(s64) = G_ANYEXT [[C4]](s32)488  ; LP64F-NEXT:   [[ANYEXT4:%[0-9]+]]:_(s64) = G_ANYEXT [[C5]](s32)489  ; LP64F-NEXT:   [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C6]](s128)490  ; LP64F-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x2491  ; LP64F-NEXT:   [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 0492  ; LP64F-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C8]](s64)493  ; LP64F-NEXT:   G_STORE [[UV3]](s64), [[PTR_ADD]](p0) :: (store (s64) into stack, align 16)494  ; LP64F-NEXT:   [[ANYEXT5:%[0-9]+]]:_(s64) = G_ANYEXT [[C7]](s32)495  ; LP64F-NEXT:   [[C9:%[0-9]+]]:_(s64) = G_CONSTANT i64 8496  ; LP64F-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C9]](s64)497  ; LP64F-NEXT:   G_STORE [[ANYEXT5]](s64), [[PTR_ADD1]](p0) :: (store (s64) into stack + 8)498  ; LP64F-NEXT:   $x10 = COPY [[ANYEXT]](s64)499  ; LP64F-NEXT:   $x11 = COPY [[ANYEXT1]](s64)500  ; LP64F-NEXT:   $x12 = COPY [[ANYEXT2]](s64)501  ; LP64F-NEXT:   $x13 = COPY [[UV]](s64)502  ; LP64F-NEXT:   $x14 = COPY [[UV1]](s64)503  ; LP64F-NEXT:   $x15 = COPY [[ANYEXT3]](s64)504  ; LP64F-NEXT:   $x16 = COPY [[ANYEXT4]](s64)505  ; LP64F-NEXT:   $x17 = COPY [[UV2]](s64)506  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_many_scalars, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10507  ; LP64F-NEXT:   ADJCALLSTACKUP 16, 0, implicit-def $x2, implicit $x2508  ; LP64F-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x10509  ; LP64F-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)510  ; LP64F-NEXT:   [[ANYEXT6:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32)511  ; LP64F-NEXT:   $x10 = COPY [[ANYEXT6]](s64)512  ; LP64F-NEXT:   PseudoRET implicit $x10513  ;514  ; LP64D-LABEL: name: caller_many_scalars515  ; LP64D: bb.1 (%ir-block.0):516  ; LP64D-NEXT:   [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 1517  ; LP64D-NEXT:   [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 2518  ; LP64D-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 3519  ; LP64D-NEXT:   [[C3:%[0-9]+]]:_(s128) = G_CONSTANT i128 4520  ; LP64D-NEXT:   [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 5521  ; LP64D-NEXT:   [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 6522  ; LP64D-NEXT:   [[C6:%[0-9]+]]:_(s128) = G_CONSTANT i128 7523  ; LP64D-NEXT:   [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 8524  ; LP64D-NEXT:   ADJCALLSTACKDOWN 16, 0, implicit-def $x2, implicit $x2525  ; LP64D-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s8)526  ; LP64D-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C1]](s16)527  ; LP64D-NEXT:   [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[C2]](s32)528  ; LP64D-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C3]](s128)529  ; LP64D-NEXT:   [[ANYEXT3:%[0-9]+]]:_(s64) = G_ANYEXT [[C4]](s32)530  ; LP64D-NEXT:   [[ANYEXT4:%[0-9]+]]:_(s64) = G_ANYEXT [[C5]](s32)531  ; LP64D-NEXT:   [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C6]](s128)532  ; LP64D-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x2533  ; LP64D-NEXT:   [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 0534  ; LP64D-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C8]](s64)535  ; LP64D-NEXT:   G_STORE [[UV3]](s64), [[PTR_ADD]](p0) :: (store (s64) into stack, align 16)536  ; LP64D-NEXT:   [[ANYEXT5:%[0-9]+]]:_(s64) = G_ANYEXT [[C7]](s32)537  ; LP64D-NEXT:   [[C9:%[0-9]+]]:_(s64) = G_CONSTANT i64 8538  ; LP64D-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C9]](s64)539  ; LP64D-NEXT:   G_STORE [[ANYEXT5]](s64), [[PTR_ADD1]](p0) :: (store (s64) into stack + 8)540  ; LP64D-NEXT:   $x10 = COPY [[ANYEXT]](s64)541  ; LP64D-NEXT:   $x11 = COPY [[ANYEXT1]](s64)542  ; LP64D-NEXT:   $x12 = COPY [[ANYEXT2]](s64)543  ; LP64D-NEXT:   $x13 = COPY [[UV]](s64)544  ; LP64D-NEXT:   $x14 = COPY [[UV1]](s64)545  ; LP64D-NEXT:   $x15 = COPY [[ANYEXT3]](s64)546  ; LP64D-NEXT:   $x16 = COPY [[ANYEXT4]](s64)547  ; LP64D-NEXT:   $x17 = COPY [[UV2]](s64)548  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_many_scalars, csr_ilp32d_lp64d, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10549  ; LP64D-NEXT:   ADJCALLSTACKUP 16, 0, implicit-def $x2, implicit $x2550  ; LP64D-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x10551  ; LP64D-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)552  ; LP64D-NEXT:   [[ANYEXT6:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32)553  ; LP64D-NEXT:   $x10 = COPY [[ANYEXT6]](s64)554  ; LP64D-NEXT:   PseudoRET implicit $x10555  %1 = call i32 @callee_many_scalars(i8 1, i16 2, i32 3, i128 4, i32 5, i32 6, i128 7, i32 8)556  ret i32 %1557}558 559; Check that i256 is passed indirectly.560 561define i64 @callee_large_scalars(i256 %a, i256 %b) nounwind {562  ; RV64I-LABEL: name: callee_large_scalars563  ; RV64I: bb.1 (%ir-block.0):564  ; RV64I-NEXT:   liveins: $x10, $x11565  ; RV64I-NEXT: {{  $}}566  ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10567  ; RV64I-NEXT:   [[LOAD:%[0-9]+]]:_(s256) = G_LOAD [[COPY]](p0) :: (load (s256), align 16)568  ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11569  ; RV64I-NEXT:   [[LOAD1:%[0-9]+]]:_(s256) = G_LOAD [[COPY1]](p0) :: (load (s256), align 16)570  ; RV64I-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[LOAD]](s256), [[LOAD1]]571  ; RV64I-NEXT:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ICMP]](s1)572  ; RV64I-NEXT:   $x10 = COPY [[ZEXT]](s64)573  ; RV64I-NEXT:   PseudoRET implicit $x10574  %1 = icmp eq i256 %a, %b575  %2 = zext i1 %1 to i64576  ret i64 %2577}578 579define i64 @caller_large_scalars() nounwind {580  ; LP64-LABEL: name: caller_large_scalars581  ; LP64: bb.1 (%ir-block.0):582  ; LP64-NEXT:   [[C:%[0-9]+]]:_(s256) = G_CONSTANT i256 1583  ; LP64-NEXT:   [[C1:%[0-9]+]]:_(s256) = G_CONSTANT i256 2584  ; LP64-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2585  ; LP64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0586  ; LP64-NEXT:   G_STORE [[C]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)587  ; LP64-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1588  ; LP64-NEXT:   G_STORE [[C1]](s256), [[FRAME_INDEX1]](p0) :: (store (s256) into %stack.1, align 16)589  ; LP64-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)590  ; LP64-NEXT:   $x11 = COPY [[FRAME_INDEX1]](p0)591  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_scalars, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10592  ; LP64-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2593  ; LP64-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10594  ; LP64-NEXT:   $x10 = COPY [[COPY]](s64)595  ; LP64-NEXT:   PseudoRET implicit $x10596  ;597  ; LP64F-LABEL: name: caller_large_scalars598  ; LP64F: bb.1 (%ir-block.0):599  ; LP64F-NEXT:   [[C:%[0-9]+]]:_(s256) = G_CONSTANT i256 1600  ; LP64F-NEXT:   [[C1:%[0-9]+]]:_(s256) = G_CONSTANT i256 2601  ; LP64F-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2602  ; LP64F-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0603  ; LP64F-NEXT:   G_STORE [[C]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)604  ; LP64F-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1605  ; LP64F-NEXT:   G_STORE [[C1]](s256), [[FRAME_INDEX1]](p0) :: (store (s256) into %stack.1, align 16)606  ; LP64F-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)607  ; LP64F-NEXT:   $x11 = COPY [[FRAME_INDEX1]](p0)608  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_scalars, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10609  ; LP64F-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2610  ; LP64F-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10611  ; LP64F-NEXT:   $x10 = COPY [[COPY]](s64)612  ; LP64F-NEXT:   PseudoRET implicit $x10613  ;614  ; LP64D-LABEL: name: caller_large_scalars615  ; LP64D: bb.1 (%ir-block.0):616  ; LP64D-NEXT:   [[C:%[0-9]+]]:_(s256) = G_CONSTANT i256 1617  ; LP64D-NEXT:   [[C1:%[0-9]+]]:_(s256) = G_CONSTANT i256 2618  ; LP64D-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2619  ; LP64D-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0620  ; LP64D-NEXT:   G_STORE [[C]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)621  ; LP64D-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1622  ; LP64D-NEXT:   G_STORE [[C1]](s256), [[FRAME_INDEX1]](p0) :: (store (s256) into %stack.1, align 16)623  ; LP64D-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)624  ; LP64D-NEXT:   $x11 = COPY [[FRAME_INDEX1]](p0)625  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_scalars, csr_ilp32d_lp64d, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10626  ; LP64D-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2627  ; LP64D-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10628  ; LP64D-NEXT:   $x10 = COPY [[COPY]](s64)629  ; LP64D-NEXT:   PseudoRET implicit $x10630  %1 = call i64 @callee_large_scalars(i256 1, i256 2)631  ret i64 %1632}633 634; Check that arguments larger than 2*xlen are handled correctly when their635; address is passed on the stack rather than in memory636 637; Must keep define on a single line due to an update_llc_test_checks.py limitation638define i64 @callee_large_scalars_exhausted_regs(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, i64 %g, i256 %h, i64 %i, i256 %j) nounwind {639  ; RV64I-LABEL: name: callee_large_scalars_exhausted_regs640  ; RV64I: bb.1 (%ir-block.0):641  ; RV64I-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17642  ; RV64I-NEXT: {{  $}}643  ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10644  ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11645  ; RV64I-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x12646  ; RV64I-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x13647  ; RV64I-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x14648  ; RV64I-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x15649  ; RV64I-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x16650  ; RV64I-NEXT:   [[COPY7:%[0-9]+]]:_(p0) = COPY $x17651  ; RV64I-NEXT:   [[LOAD:%[0-9]+]]:_(s256) = G_LOAD [[COPY7]](p0) :: (load (s256), align 16)652  ; RV64I-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1653  ; RV64I-NEXT:   [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s64) from %fixed-stack.1, align 16)654  ; RV64I-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0655  ; RV64I-NEXT:   [[LOAD2:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX1]](p0) :: (load (p0) from %fixed-stack.0)656  ; RV64I-NEXT:   [[LOAD3:%[0-9]+]]:_(s256) = G_LOAD [[LOAD2]](p0) :: (load (s256), align 16)657  ; RV64I-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[LOAD]](s256), [[LOAD3]]658  ; RV64I-NEXT:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ICMP]](s1)659  ; RV64I-NEXT:   $x10 = COPY [[ZEXT]](s64)660  ; RV64I-NEXT:   PseudoRET implicit $x10661  %1 = icmp eq i256 %h, %j662  %2 = zext i1 %1 to i64663  ret i64 %2664}665 666define i64 @caller_large_scalars_exhausted_regs() nounwind {667  ; LP64-LABEL: name: caller_large_scalars_exhausted_regs668  ; LP64: bb.1 (%ir-block.0):669  ; LP64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1670  ; LP64-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2671  ; LP64-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 3672  ; LP64-NEXT:   [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 4673  ; LP64-NEXT:   [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 5674  ; LP64-NEXT:   [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 6675  ; LP64-NEXT:   [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 7676  ; LP64-NEXT:   [[C7:%[0-9]+]]:_(s256) = G_CONSTANT i256 8677  ; LP64-NEXT:   [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 9678  ; LP64-NEXT:   [[C9:%[0-9]+]]:_(s256) = G_CONSTANT i256 10679  ; LP64-NEXT:   ADJCALLSTACKDOWN 16, 0, implicit-def $x2, implicit $x2680  ; LP64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0681  ; LP64-NEXT:   G_STORE [[C7]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)682  ; LP64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x2683  ; LP64-NEXT:   [[C10:%[0-9]+]]:_(s64) = G_CONSTANT i64 0684  ; LP64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C10]](s64)685  ; LP64-NEXT:   G_STORE [[C8]](s64), [[PTR_ADD]](p0) :: (store (s64) into stack, align 16)686  ; LP64-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1687  ; LP64-NEXT:   G_STORE [[C9]](s256), [[FRAME_INDEX1]](p0) :: (store (s256) into %stack.1, align 16)688  ; LP64-NEXT:   [[C11:%[0-9]+]]:_(s64) = G_CONSTANT i64 8689  ; LP64-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C11]](s64)690  ; LP64-NEXT:   G_STORE [[FRAME_INDEX1]](p0), [[PTR_ADD1]](p0) :: (store (p0) into stack + 8)691  ; LP64-NEXT:   $x10 = COPY [[C]](s64)692  ; LP64-NEXT:   $x11 = COPY [[C1]](s64)693  ; LP64-NEXT:   $x12 = COPY [[C2]](s64)694  ; LP64-NEXT:   $x13 = COPY [[C3]](s64)695  ; LP64-NEXT:   $x14 = COPY [[C4]](s64)696  ; LP64-NEXT:   $x15 = COPY [[C5]](s64)697  ; LP64-NEXT:   $x16 = COPY [[C6]](s64)698  ; LP64-NEXT:   $x17 = COPY [[FRAME_INDEX]](p0)699  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_scalars_exhausted_regs, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10700  ; LP64-NEXT:   ADJCALLSTACKUP 16, 0, implicit-def $x2, implicit $x2701  ; LP64-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x10702  ; LP64-NEXT:   $x10 = COPY [[COPY1]](s64)703  ; LP64-NEXT:   PseudoRET implicit $x10704  ;705  ; LP64F-LABEL: name: caller_large_scalars_exhausted_regs706  ; LP64F: bb.1 (%ir-block.0):707  ; LP64F-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1708  ; LP64F-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2709  ; LP64F-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 3710  ; LP64F-NEXT:   [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 4711  ; LP64F-NEXT:   [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 5712  ; LP64F-NEXT:   [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 6713  ; LP64F-NEXT:   [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 7714  ; LP64F-NEXT:   [[C7:%[0-9]+]]:_(s256) = G_CONSTANT i256 8715  ; LP64F-NEXT:   [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 9716  ; LP64F-NEXT:   [[C9:%[0-9]+]]:_(s256) = G_CONSTANT i256 10717  ; LP64F-NEXT:   ADJCALLSTACKDOWN 16, 0, implicit-def $x2, implicit $x2718  ; LP64F-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0719  ; LP64F-NEXT:   G_STORE [[C7]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)720  ; LP64F-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x2721  ; LP64F-NEXT:   [[C10:%[0-9]+]]:_(s64) = G_CONSTANT i64 0722  ; LP64F-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C10]](s64)723  ; LP64F-NEXT:   G_STORE [[C8]](s64), [[PTR_ADD]](p0) :: (store (s64) into stack, align 16)724  ; LP64F-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1725  ; LP64F-NEXT:   G_STORE [[C9]](s256), [[FRAME_INDEX1]](p0) :: (store (s256) into %stack.1, align 16)726  ; LP64F-NEXT:   [[C11:%[0-9]+]]:_(s64) = G_CONSTANT i64 8727  ; LP64F-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C11]](s64)728  ; LP64F-NEXT:   G_STORE [[FRAME_INDEX1]](p0), [[PTR_ADD1]](p0) :: (store (p0) into stack + 8)729  ; LP64F-NEXT:   $x10 = COPY [[C]](s64)730  ; LP64F-NEXT:   $x11 = COPY [[C1]](s64)731  ; LP64F-NEXT:   $x12 = COPY [[C2]](s64)732  ; LP64F-NEXT:   $x13 = COPY [[C3]](s64)733  ; LP64F-NEXT:   $x14 = COPY [[C4]](s64)734  ; LP64F-NEXT:   $x15 = COPY [[C5]](s64)735  ; LP64F-NEXT:   $x16 = COPY [[C6]](s64)736  ; LP64F-NEXT:   $x17 = COPY [[FRAME_INDEX]](p0)737  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_scalars_exhausted_regs, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10738  ; LP64F-NEXT:   ADJCALLSTACKUP 16, 0, implicit-def $x2, implicit $x2739  ; LP64F-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x10740  ; LP64F-NEXT:   $x10 = COPY [[COPY1]](s64)741  ; LP64F-NEXT:   PseudoRET implicit $x10742  ;743  ; LP64D-LABEL: name: caller_large_scalars_exhausted_regs744  ; LP64D: bb.1 (%ir-block.0):745  ; LP64D-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1746  ; LP64D-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2747  ; LP64D-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 3748  ; LP64D-NEXT:   [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 4749  ; LP64D-NEXT:   [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 5750  ; LP64D-NEXT:   [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 6751  ; LP64D-NEXT:   [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 7752  ; LP64D-NEXT:   [[C7:%[0-9]+]]:_(s256) = G_CONSTANT i256 8753  ; LP64D-NEXT:   [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 9754  ; LP64D-NEXT:   [[C9:%[0-9]+]]:_(s256) = G_CONSTANT i256 10755  ; LP64D-NEXT:   ADJCALLSTACKDOWN 16, 0, implicit-def $x2, implicit $x2756  ; LP64D-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0757  ; LP64D-NEXT:   G_STORE [[C7]](s256), [[FRAME_INDEX]](p0) :: (store (s256) into %stack.0, align 16)758  ; LP64D-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x2759  ; LP64D-NEXT:   [[C10:%[0-9]+]]:_(s64) = G_CONSTANT i64 0760  ; LP64D-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C10]](s64)761  ; LP64D-NEXT:   G_STORE [[C8]](s64), [[PTR_ADD]](p0) :: (store (s64) into stack, align 16)762  ; LP64D-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1763  ; LP64D-NEXT:   G_STORE [[C9]](s256), [[FRAME_INDEX1]](p0) :: (store (s256) into %stack.1, align 16)764  ; LP64D-NEXT:   [[C11:%[0-9]+]]:_(s64) = G_CONSTANT i64 8765  ; LP64D-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C11]](s64)766  ; LP64D-NEXT:   G_STORE [[FRAME_INDEX1]](p0), [[PTR_ADD1]](p0) :: (store (p0) into stack + 8)767  ; LP64D-NEXT:   $x10 = COPY [[C]](s64)768  ; LP64D-NEXT:   $x11 = COPY [[C1]](s64)769  ; LP64D-NEXT:   $x12 = COPY [[C2]](s64)770  ; LP64D-NEXT:   $x13 = COPY [[C3]](s64)771  ; LP64D-NEXT:   $x14 = COPY [[C4]](s64)772  ; LP64D-NEXT:   $x15 = COPY [[C5]](s64)773  ; LP64D-NEXT:   $x16 = COPY [[C6]](s64)774  ; LP64D-NEXT:   $x17 = COPY [[FRAME_INDEX]](p0)775  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_scalars_exhausted_regs, csr_ilp32d_lp64d, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10776  ; LP64D-NEXT:   ADJCALLSTACKUP 16, 0, implicit-def $x2, implicit $x2777  ; LP64D-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x10778  ; LP64D-NEXT:   $x10 = COPY [[COPY1]](s64)779  ; LP64D-NEXT:   PseudoRET implicit $x10780  %1 = call i64 @callee_large_scalars_exhausted_regs(781      i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i256 8, i64 9,782      i256 10)783  ret i64 %1784}785 786; Check passing of coerced integer arrays787 788define i64 @callee_small_coerced_struct([2 x i64] %a.coerce) nounwind {789  ; RV64I-LABEL: name: callee_small_coerced_struct790  ; RV64I: bb.1 (%ir-block.0):791  ; RV64I-NEXT:   liveins: $x10, $x11792  ; RV64I-NEXT: {{  $}}793  ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10794  ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11795  ; RV64I-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]796  ; RV64I-NEXT:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ICMP]](s1)797  ; RV64I-NEXT:   $x10 = COPY [[ZEXT]](s64)798  ; RV64I-NEXT:   PseudoRET implicit $x10799  %1 = extractvalue [2 x i64] %a.coerce, 0800  %2 = extractvalue [2 x i64] %a.coerce, 1801  %3 = icmp eq i64 %1, %2802  %4 = zext i1 %3 to i64803  ret i64 %4804}805 806define i64 @caller_small_coerced_struct() nounwind {807  ; LP64-LABEL: name: caller_small_coerced_struct808  ; LP64: bb.1 (%ir-block.0):809  ; LP64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1810  ; LP64-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2811  ; LP64-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2812  ; LP64-NEXT:   $x10 = COPY [[C]](s64)813  ; LP64-NEXT:   $x11 = COPY [[C1]](s64)814  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_small_coerced_struct, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10815  ; LP64-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2816  ; LP64-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10817  ; LP64-NEXT:   $x10 = COPY [[COPY]](s64)818  ; LP64-NEXT:   PseudoRET implicit $x10819  ;820  ; LP64F-LABEL: name: caller_small_coerced_struct821  ; LP64F: bb.1 (%ir-block.0):822  ; LP64F-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1823  ; LP64F-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2824  ; LP64F-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2825  ; LP64F-NEXT:   $x10 = COPY [[C]](s64)826  ; LP64F-NEXT:   $x11 = COPY [[C1]](s64)827  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_small_coerced_struct, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10828  ; LP64F-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2829  ; LP64F-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10830  ; LP64F-NEXT:   $x10 = COPY [[COPY]](s64)831  ; LP64F-NEXT:   PseudoRET implicit $x10832  ;833  ; LP64D-LABEL: name: caller_small_coerced_struct834  ; LP64D: bb.1 (%ir-block.0):835  ; LP64D-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1836  ; LP64D-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2837  ; LP64D-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2838  ; LP64D-NEXT:   $x10 = COPY [[C]](s64)839  ; LP64D-NEXT:   $x11 = COPY [[C1]](s64)840  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_small_coerced_struct, csr_ilp32d_lp64d, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10841  ; LP64D-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2842  ; LP64D-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10843  ; LP64D-NEXT:   $x10 = COPY [[COPY]](s64)844  ; LP64D-NEXT:   PseudoRET implicit $x10845  %1 = call i64 @callee_small_coerced_struct([2 x i64] [i64 1, i64 2])846  ret i64 %1847}848 849; Check return of 2x xlen scalars850 851define i128 @callee_small_scalar_ret() nounwind {852  ; RV64I-LABEL: name: callee_small_scalar_ret853  ; RV64I: bb.1 (%ir-block.0):854  ; RV64I-NEXT:   [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 -1855  ; RV64I-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C]](s128)856  ; RV64I-NEXT:   $x10 = COPY [[UV]](s64)857  ; RV64I-NEXT:   $x11 = COPY [[UV1]](s64)858  ; RV64I-NEXT:   PseudoRET implicit $x10, implicit $x11859  ret i128 -1860}861 862define i64 @caller_small_scalar_ret() nounwind {863  ; LP64-LABEL: name: caller_small_scalar_ret864  ; LP64: bb.1 (%ir-block.0):865  ; LP64-NEXT:   [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 -2866  ; LP64-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2867  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_small_scalar_ret, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10, implicit-def $x11868  ; LP64-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2869  ; LP64-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10870  ; LP64-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11871  ; LP64-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)872  ; LP64-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[C]](s128), [[MV]]873  ; LP64-NEXT:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ICMP]](s1)874  ; LP64-NEXT:   $x10 = COPY [[ZEXT]](s64)875  ; LP64-NEXT:   PseudoRET implicit $x10876  ;877  ; LP64F-LABEL: name: caller_small_scalar_ret878  ; LP64F: bb.1 (%ir-block.0):879  ; LP64F-NEXT:   [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 -2880  ; LP64F-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2881  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_small_scalar_ret, csr_ilp32f_lp64f, implicit-def $x1, implicit-def $x10, implicit-def $x11882  ; LP64F-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2883  ; LP64F-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10884  ; LP64F-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11885  ; LP64F-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)886  ; LP64F-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[C]](s128), [[MV]]887  ; LP64F-NEXT:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ICMP]](s1)888  ; LP64F-NEXT:   $x10 = COPY [[ZEXT]](s64)889  ; LP64F-NEXT:   PseudoRET implicit $x10890  ;891  ; LP64D-LABEL: name: caller_small_scalar_ret892  ; LP64D: bb.1 (%ir-block.0):893  ; LP64D-NEXT:   [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 -2894  ; LP64D-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2895  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_small_scalar_ret, csr_ilp32d_lp64d, implicit-def $x1, implicit-def $x10, implicit-def $x11896  ; LP64D-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2897  ; LP64D-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10898  ; LP64D-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11899  ; LP64D-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)900  ; LP64D-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[C]](s128), [[MV]]901  ; LP64D-NEXT:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ICMP]](s1)902  ; LP64D-NEXT:   $x10 = COPY [[ZEXT]](s64)903  ; LP64D-NEXT:   PseudoRET implicit $x10904  %1 = call i128 @callee_small_scalar_ret()905  %2 = icmp eq i128 -2, %1906  %3 = zext i1 %2 to i64907  ret i64 %3908}909 910define fp128 @callee_fp128_ret() nounwind {911  ; RV64I-LABEL: name: callee_fp128_ret912  ; RV64I: bb.1 (%ir-block.0):913  ; RV64I-NEXT:   [[C:%[0-9]+]]:_(s128) = G_FCONSTANT fp128 0xL00000000000000007FFF000000000000914  ; RV64I-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[C]](s128)915  ; RV64I-NEXT:   $x10 = COPY [[UV]](s64)916  ; RV64I-NEXT:   $x11 = COPY [[UV1]](s64)917  ; RV64I-NEXT:   PseudoRET implicit $x10, implicit $x11918  ret fp128 0xL00000000000000007FFF000000000000919}920 921define void @caller_fp128_ret() nounwind {922  ; LP64-LABEL: name: caller_fp128_ret923  ; LP64: bb.1 (%ir-block.0):924  ; LP64-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2925  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_fp128_ret, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10, implicit-def $x11926  ; LP64-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2927  ; LP64-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10928  ; LP64-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11929  ; LP64-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)930  ; LP64-NEXT:   PseudoRET931  ;932  ; LP64F-LABEL: name: caller_fp128_ret933  ; LP64F: bb.1 (%ir-block.0):934  ; LP64F-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2935  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_fp128_ret, csr_ilp32f_lp64f, implicit-def $x1, implicit-def $x10, implicit-def $x11936  ; LP64F-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2937  ; LP64F-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10938  ; LP64F-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11939  ; LP64F-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)940  ; LP64F-NEXT:   PseudoRET941  ;942  ; LP64D-LABEL: name: caller_fp128_ret943  ; LP64D: bb.1 (%ir-block.0):944  ; LP64D-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2945  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_fp128_ret, csr_ilp32d_lp64d, implicit-def $x1, implicit-def $x10, implicit-def $x11946  ; LP64D-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2947  ; LP64D-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10948  ; LP64D-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11949  ; LP64D-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)950  ; LP64D-NEXT:   PseudoRET951  %1 = call fp128 @callee_fp128_ret()952  ret void953}954 955; Check return of 2x xlen structs956 957%struct.small = type { i64, ptr }958 959define %struct.small @callee_small_struct_ret() nounwind {960  ; RV64I-LABEL: name: callee_small_struct_ret961  ; RV64I: bb.1 (%ir-block.0):962  ; RV64I-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1963  ; RV64I-NEXT:   [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0964  ; RV64I-NEXT:   $x10 = COPY [[C]](s64)965  ; RV64I-NEXT:   $x11 = COPY [[C1]](p0)966  ; RV64I-NEXT:   PseudoRET implicit $x10, implicit $x11967  ret %struct.small { i64 1, ptr null }968}969 970define i64 @caller_small_struct_ret() nounwind {971  ; LP64-LABEL: name: caller_small_struct_ret972  ; LP64: bb.1 (%ir-block.0):973  ; LP64-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2974  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_small_struct_ret, csr_ilp32_lp64, implicit-def $x1, implicit-def $x10, implicit-def $x11975  ; LP64-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2976  ; LP64-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10977  ; LP64-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11978  ; LP64-NEXT:   [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[COPY1]](p0)979  ; LP64-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[PTRTOINT]]980  ; LP64-NEXT:   $x10 = COPY [[ADD]](s64)981  ; LP64-NEXT:   PseudoRET implicit $x10982  ;983  ; LP64F-LABEL: name: caller_small_struct_ret984  ; LP64F: bb.1 (%ir-block.0):985  ; LP64F-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2986  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_small_struct_ret, csr_ilp32f_lp64f, implicit-def $x1, implicit-def $x10, implicit-def $x11987  ; LP64F-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2988  ; LP64F-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10989  ; LP64F-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11990  ; LP64F-NEXT:   [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[COPY1]](p0)991  ; LP64F-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[PTRTOINT]]992  ; LP64F-NEXT:   $x10 = COPY [[ADD]](s64)993  ; LP64F-NEXT:   PseudoRET implicit $x10994  ;995  ; LP64D-LABEL: name: caller_small_struct_ret996  ; LP64D: bb.1 (%ir-block.0):997  ; LP64D-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2998  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_small_struct_ret, csr_ilp32d_lp64d, implicit-def $x1, implicit-def $x10, implicit-def $x11999  ; LP64D-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x21000  ; LP64D-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x101001  ; LP64D-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x111002  ; LP64D-NEXT:   [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[COPY1]](p0)1003  ; LP64D-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[PTRTOINT]]1004  ; LP64D-NEXT:   $x10 = COPY [[ADD]](s64)1005  ; LP64D-NEXT:   PseudoRET implicit $x101006  %1 = call %struct.small @callee_small_struct_ret()1007  %2 = extractvalue %struct.small %1, 01008  %3 = extractvalue %struct.small %1, 11009  %4 = ptrtoint ptr %3 to i641010  %5 = add i64 %2, %41011  ret i64 %51012}1013 1014; Check return of >2x xlen scalars1015 1016define i256 @callee_large_scalar_ret() nounwind {1017  ; RV64I-LABEL: name: callee_large_scalar_ret1018  ; RV64I: bb.1 (%ir-block.0):1019  ; RV64I-NEXT:   liveins: $x101020  ; RV64I-NEXT: {{  $}}1021  ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x101022  ; RV64I-NEXT:   [[C:%[0-9]+]]:_(s256) = G_CONSTANT i256 -1234567891023  ; RV64I-NEXT:   G_STORE [[C]](s256), [[COPY]](p0) :: (store (s256), align 16)1024  ; RV64I-NEXT:   PseudoRET1025  ret i256 -1234567891026}1027 1028define void @caller_large_scalar_ret() nounwind {1029  ; LP64-LABEL: name: caller_large_scalar_ret1030  ; LP64: bb.1 (%ir-block.0):1031  ; LP64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.01032  ; LP64-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x21033  ; LP64-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)1034  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_scalar_ret, csr_ilp32_lp64, implicit-def $x1, implicit $x101035  ; LP64-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x21036  ; LP64-NEXT:   [[LOAD:%[0-9]+]]:_(s256) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s256) from %stack.0, align 16)1037  ; LP64-NEXT:   PseudoRET1038  ;1039  ; LP64F-LABEL: name: caller_large_scalar_ret1040  ; LP64F: bb.1 (%ir-block.0):1041  ; LP64F-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.01042  ; LP64F-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x21043  ; LP64F-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)1044  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_scalar_ret, csr_ilp32f_lp64f, implicit-def $x1, implicit $x101045  ; LP64F-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x21046  ; LP64F-NEXT:   [[LOAD:%[0-9]+]]:_(s256) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s256) from %stack.0, align 16)1047  ; LP64F-NEXT:   PseudoRET1048  ;1049  ; LP64D-LABEL: name: caller_large_scalar_ret1050  ; LP64D: bb.1 (%ir-block.0):1051  ; LP64D-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.01052  ; LP64D-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x21053  ; LP64D-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)1054  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_scalar_ret, csr_ilp32d_lp64d, implicit-def $x1, implicit $x101055  ; LP64D-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x21056  ; LP64D-NEXT:   [[LOAD:%[0-9]+]]:_(s256) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s256) from %stack.0, align 16)1057  ; LP64D-NEXT:   PseudoRET1058  %1 = call i256 @callee_large_scalar_ret()1059  ret void1060}1061 1062; Check return of >2x xlen structs1063 1064%struct.large = type { i64, i64, i64, i64 }1065 1066define void @callee_large_struct_ret(ptr noalias sret(%struct.large) %agg.result) nounwind {1067  ; RV64I-LABEL: name: callee_large_struct_ret1068  ; RV64I: bb.1 (%ir-block.0):1069  ; RV64I-NEXT:   liveins: $x101070  ; RV64I-NEXT: {{  $}}1071  ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x101072  ; RV64I-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 11073  ; RV64I-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 21074  ; RV64I-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 31075  ; RV64I-NEXT:   [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 41076  ; RV64I-NEXT:   G_STORE [[C]](s64), [[COPY]](p0) :: (store (s64) into %ir.agg.result, align 4)1077  ; RV64I-NEXT:   [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 81078  ; RV64I-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[COPY]], [[C4]](s64)1079  ; RV64I-NEXT:   G_STORE [[C1]](s64), [[PTR_ADD]](p0) :: (store (s64) into %ir.b, align 4)1080  ; RV64I-NEXT:   [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 161081  ; RV64I-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[COPY]], [[C5]](s64)1082  ; RV64I-NEXT:   G_STORE [[C2]](s64), [[PTR_ADD1]](p0) :: (store (s64) into %ir.c, align 4)1083  ; RV64I-NEXT:   [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 241084  ; RV64I-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[COPY]], [[C6]](s64)1085  ; RV64I-NEXT:   G_STORE [[C3]](s64), [[PTR_ADD2]](p0) :: (store (s64) into %ir.d, align 4)1086  ; RV64I-NEXT:   PseudoRET1087  store i64 1, ptr %agg.result, align 41088  %b = getelementptr inbounds %struct.large, ptr %agg.result, i64 0, i32 11089  store i64 2, ptr %b, align 41090  %c = getelementptr inbounds %struct.large, ptr %agg.result, i64 0, i32 21091  store i64 3, ptr %c, align 41092  %d = getelementptr inbounds %struct.large, ptr %agg.result, i64 0, i32 31093  store i64 4, ptr %d, align 41094  ret void1095}1096 1097define i64 @caller_large_struct_ret() nounwind {1098  ; LP64-LABEL: name: caller_large_struct_ret1099  ; LP64: bb.1 (%ir-block.0):1100  ; LP64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.01101  ; LP64-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x21102  ; LP64-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)1103  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_struct_ret, csr_ilp32_lp64, implicit-def $x1, implicit $x101104  ; LP64-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x21105  ; LP64-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (dereferenceable load (s64) from %ir.1)1106  ; LP64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 241107  ; LP64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)1108  ; LP64-NEXT:   [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD]](p0) :: (dereferenceable load (s64) from %ir.3)1109  ; LP64-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[LOAD]], [[LOAD1]]1110  ; LP64-NEXT:   $x10 = COPY [[ADD]](s64)1111  ; LP64-NEXT:   PseudoRET implicit $x101112  ;1113  ; LP64F-LABEL: name: caller_large_struct_ret1114  ; LP64F: bb.1 (%ir-block.0):1115  ; LP64F-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.01116  ; LP64F-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x21117  ; LP64F-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)1118  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_struct_ret, csr_ilp32f_lp64f, implicit-def $x1, implicit $x101119  ; LP64F-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x21120  ; LP64F-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (dereferenceable load (s64) from %ir.1)1121  ; LP64F-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 241122  ; LP64F-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)1123  ; LP64F-NEXT:   [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD]](p0) :: (dereferenceable load (s64) from %ir.3)1124  ; LP64F-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[LOAD]], [[LOAD1]]1125  ; LP64F-NEXT:   $x10 = COPY [[ADD]](s64)1126  ; LP64F-NEXT:   PseudoRET implicit $x101127  ;1128  ; LP64D-LABEL: name: caller_large_struct_ret1129  ; LP64D: bb.1 (%ir-block.0):1130  ; LP64D-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.01131  ; LP64D-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x21132  ; LP64D-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)1133  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_struct_ret, csr_ilp32d_lp64d, implicit-def $x1, implicit $x101134  ; LP64D-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x21135  ; LP64D-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (dereferenceable load (s64) from %ir.1)1136  ; LP64D-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 241137  ; LP64D-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)1138  ; LP64D-NEXT:   [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD]](p0) :: (dereferenceable load (s64) from %ir.3)1139  ; LP64D-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[LOAD]], [[LOAD1]]1140  ; LP64D-NEXT:   $x10 = COPY [[ADD]](s64)1141  ; LP64D-NEXT:   PseudoRET implicit $x101142  %1 = alloca %struct.large1143  call void @callee_large_struct_ret(ptr sret(%struct.large) %1)1144  %2 = load i64, ptr %11145  %3 = getelementptr inbounds %struct.large, ptr %1, i64 0, i32 31146  %4 = load i64, ptr %31147  %5 = add i64 %2, %41148  ret i64 %51149}1150 1151%struct.large2 = type { i64, i128, double, i64 }1152 1153define %struct.large2 @callee_large_struct_ret2() nounwind {1154  ; RV64I-LABEL: name: callee_large_struct_ret21155  ; RV64I: bb.1 (%ir-block.0):1156  ; RV64I-NEXT:   liveins: $x101157  ; RV64I-NEXT: {{  $}}1158  ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x101159  ; RV64I-NEXT:   [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF1160  ; RV64I-NEXT:   [[DEF1:%[0-9]+]]:_(s128) = G_IMPLICIT_DEF1161  ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY [[DEF]](s64)1162  ; RV64I-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 11163  ; RV64I-NEXT:   [[C1:%[0-9]+]]:_(s128) = G_CONSTANT i128 21164  ; RV64I-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_FCONSTANT double 3.000000e+001165  ; RV64I-NEXT:   [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 41166  ; RV64I-NEXT:   G_STORE [[C]](s64), [[COPY]](p0) :: (store (s64), align 16)1167  ; RV64I-NEXT:   [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 161168  ; RV64I-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C4]](s64)1169  ; RV64I-NEXT:   G_STORE [[C1]](s128), [[PTR_ADD]](p0) :: (store (s128))1170  ; RV64I-NEXT:   [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 321171  ; RV64I-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C5]](s64)1172  ; RV64I-NEXT:   G_STORE [[C2]](s64), [[PTR_ADD1]](p0) :: (store (s64), align 16)1173  ; RV64I-NEXT:   [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 401174  ; RV64I-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C6]](s64)1175  ; RV64I-NEXT:   G_STORE [[C3]](s64), [[PTR_ADD2]](p0) :: (store (s64))1176  ; RV64I-NEXT:   PseudoRET1177  %a = insertvalue %struct.large2 poison, i64 1, 01178  %b = insertvalue %struct.large2 %a, i128 2, 11179  %c = insertvalue %struct.large2 %b, double 3.0, 21180  %d = insertvalue %struct.large2 %c, i64 4, 31181  ret %struct.large2 %d1182}1183 1184define i64 @caller_large_struct_ret2() nounwind {1185  ; LP64-LABEL: name: caller_large_struct_ret21186  ; LP64: bb.1 (%ir-block.0):1187  ; LP64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.01188  ; LP64-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x21189  ; LP64-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)1190  ; LP64-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_struct_ret, csr_ilp32_lp64, implicit-def $x1, implicit $x101191  ; LP64-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x21192  ; LP64-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s64) from %stack.0, align 16)1193  ; LP64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 161194  ; LP64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)1195  ; LP64-NEXT:   [[LOAD1:%[0-9]+]]:_(s128) = G_LOAD [[PTR_ADD]](p0) :: (load (s128) from %stack.0)1196  ; LP64-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 321197  ; LP64-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C1]](s64)1198  ; LP64-NEXT:   [[LOAD2:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD1]](p0) :: (load (s64) from %stack.0, align 16)1199  ; LP64-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 401200  ; LP64-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C2]](s64)1201  ; LP64-NEXT:   [[LOAD3:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD2]](p0) :: (load (s64) from %stack.0)1202  ; LP64-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[LOAD]], [[LOAD3]]1203  ; LP64-NEXT:   $x10 = COPY [[ADD]](s64)1204  ; LP64-NEXT:   PseudoRET implicit $x101205  ;1206  ; LP64F-LABEL: name: caller_large_struct_ret21207  ; LP64F: bb.1 (%ir-block.0):1208  ; LP64F-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.01209  ; LP64F-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x21210  ; LP64F-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)1211  ; LP64F-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_struct_ret, csr_ilp32f_lp64f, implicit-def $x1, implicit $x101212  ; LP64F-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x21213  ; LP64F-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s64) from %stack.0, align 16)1214  ; LP64F-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 161215  ; LP64F-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)1216  ; LP64F-NEXT:   [[LOAD1:%[0-9]+]]:_(s128) = G_LOAD [[PTR_ADD]](p0) :: (load (s128) from %stack.0)1217  ; LP64F-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 321218  ; LP64F-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C1]](s64)1219  ; LP64F-NEXT:   [[LOAD2:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD1]](p0) :: (load (s64) from %stack.0, align 16)1220  ; LP64F-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 401221  ; LP64F-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C2]](s64)1222  ; LP64F-NEXT:   [[LOAD3:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD2]](p0) :: (load (s64) from %stack.0)1223  ; LP64F-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[LOAD]], [[LOAD3]]1224  ; LP64F-NEXT:   $x10 = COPY [[ADD]](s64)1225  ; LP64F-NEXT:   PseudoRET implicit $x101226  ;1227  ; LP64D-LABEL: name: caller_large_struct_ret21228  ; LP64D: bb.1 (%ir-block.0):1229  ; LP64D-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.01230  ; LP64D-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x21231  ; LP64D-NEXT:   $x10 = COPY [[FRAME_INDEX]](p0)1232  ; LP64D-NEXT:   PseudoCALL target-flags(riscv-call) @callee_large_struct_ret, csr_ilp32d_lp64d, implicit-def $x1, implicit $x101233  ; LP64D-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x21234  ; LP64D-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s64) from %stack.0, align 16)1235  ; LP64D-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 161236  ; LP64D-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)1237  ; LP64D-NEXT:   [[LOAD1:%[0-9]+]]:_(s128) = G_LOAD [[PTR_ADD]](p0) :: (load (s128) from %stack.0)1238  ; LP64D-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 321239  ; LP64D-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C1]](s64)1240  ; LP64D-NEXT:   [[LOAD2:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD1]](p0) :: (load (s64) from %stack.0, align 16)1241  ; LP64D-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 401242  ; LP64D-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C2]](s64)1243  ; LP64D-NEXT:   [[LOAD3:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD2]](p0) :: (load (s64) from %stack.0)1244  ; LP64D-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[LOAD]], [[LOAD3]]1245  ; LP64D-NEXT:   $x10 = COPY [[ADD]](s64)1246  ; LP64D-NEXT:   PseudoRET implicit $x101247  %1 = call %struct.large2 @callee_large_struct_ret()1248  %2 = extractvalue %struct.large2 %1, 01249  %3 = extractvalue %struct.large2 %1, 31250  %4 = add i64 %2, %31251  ret i64 %41252}1253