1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 2; RUN: llc -mtriple=riscv32 -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \ 3; RUN: | FileCheck -check-prefix=RV32I %s 4; RUN: llc -mtriple=riscv32 -mattr=+f -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \ 5; RUN: | FileCheck -check-prefix=RV32IF %s 6; RUN: llc -mtriple=riscv32 -mattr=+zfh -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \ 7; RUN: | FileCheck -check-prefix=RV32IZFH %s 8; RUN: llc -mtriple=riscv64 -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \ 9; RUN: | FileCheck -check-prefix=RV64I %s 10; RUN: llc -mtriple=riscv64 -mattr=+f -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \ 11; RUN: | FileCheck -check-prefix=RV64IF %s 12; RUN: llc -mtriple=riscv64 -mattr=+zfh -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \ 13; RUN: | FileCheck -check-prefix=RV64IZFH %s 14 15define half @callee_half_in_regs(half %x) nounwind { 16 ; RV32I-LABEL: name: callee_half_in_regs 17 ; RV32I: bb.1 (%ir-block.0): 18 ; RV32I-NEXT: liveins: $x10 19 ; RV32I-NEXT: {{ $}} 20 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 21 ; RV32I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 22 ; RV32I-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 23 ; RV32I-NEXT: $x10 = COPY [[ANYEXT]](s32) 24 ; RV32I-NEXT: PseudoRET implicit $x10 25 ; 26 ; RV32IF-LABEL: name: callee_half_in_regs 27 ; RV32IF: bb.1 (%ir-block.0): 28 ; RV32IF-NEXT: liveins: $f10_f 29 ; RV32IF-NEXT: {{ $}} 30 ; RV32IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f 31 ; RV32IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 32 ; RV32IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 33 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 34 ; RV32IF-NEXT: PseudoRET implicit $f10_f 35 ; 36 ; RV32IZFH-LABEL: name: callee_half_in_regs 37 ; RV32IZFH: bb.1 (%ir-block.0): 38 ; RV32IZFH-NEXT: liveins: $f10_h 39 ; RV32IZFH-NEXT: {{ $}} 40 ; RV32IZFH-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h 41 ; RV32IZFH-NEXT: $f10_h = COPY [[COPY]](s16) 42 ; RV32IZFH-NEXT: PseudoRET implicit $f10_h 43 ; 44 ; RV64I-LABEL: name: callee_half_in_regs 45 ; RV64I: bb.1 (%ir-block.0): 46 ; RV64I-NEXT: liveins: $x10 47 ; RV64I-NEXT: {{ $}} 48 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 49 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64) 50 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s16) 51 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64) 52 ; RV64I-NEXT: PseudoRET implicit $x10 53 ; 54 ; RV64IF-LABEL: name: callee_half_in_regs 55 ; RV64IF: bb.1 (%ir-block.0): 56 ; RV64IF-NEXT: liveins: $f10_f 57 ; RV64IF-NEXT: {{ $}} 58 ; RV64IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f 59 ; RV64IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 60 ; RV64IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 61 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 62 ; RV64IF-NEXT: PseudoRET implicit $f10_f 63 ; 64 ; RV64IZFH-LABEL: name: callee_half_in_regs 65 ; RV64IZFH: bb.1 (%ir-block.0): 66 ; RV64IZFH-NEXT: liveins: $f10_h 67 ; RV64IZFH-NEXT: {{ $}} 68 ; RV64IZFH-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h 69 ; RV64IZFH-NEXT: $f10_h = COPY [[COPY]](s16) 70 ; RV64IZFH-NEXT: PseudoRET implicit $f10_h 71 ret half %x 72} 73 74define half @caller_half_in_regs(half %x) nounwind { 75 ; RV32I-LABEL: name: caller_half_in_regs 76 ; RV32I: bb.1 (%ir-block.0): 77 ; RV32I-NEXT: liveins: $x10 78 ; RV32I-NEXT: {{ $}} 79 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 80 ; RV32I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 81 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 82 ; RV32I-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 83 ; RV32I-NEXT: $x10 = COPY [[ANYEXT]](s32) 84 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @caller_half_in_regs, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit-def $x10 85 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 86 ; RV32I-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x10 87 ; RV32I-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 88 ; RV32I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 89 ; RV32I-NEXT: $x10 = COPY [[ANYEXT1]](s32) 90 ; RV32I-NEXT: PseudoRET implicit $x10 91 ; 92 ; RV32IF-LABEL: name: caller_half_in_regs 93 ; RV32IF: bb.1 (%ir-block.0): 94 ; RV32IF-NEXT: liveins: $f10_f 95 ; RV32IF-NEXT: {{ $}} 96 ; RV32IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f 97 ; RV32IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 98 ; RV32IF-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 99 ; RV32IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 100 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 101 ; RV32IF-NEXT: PseudoCALL target-flags(riscv-call) @caller_half_in_regs, csr_ilp32f_lp64f, implicit-def $x1, implicit $f10_f, implicit-def $f10_f 102 ; RV32IF-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 103 ; RV32IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f10_f 104 ; RV32IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 105 ; RV32IF-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 106 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT1]](s32) 107 ; RV32IF-NEXT: PseudoRET implicit $f10_f 108 ; 109 ; RV32IZFH-LABEL: name: caller_half_in_regs 110 ; RV32IZFH: bb.1 (%ir-block.0): 111 ; RV32IZFH-NEXT: liveins: $f10_h 112 ; RV32IZFH-NEXT: {{ $}} 113 ; RV32IZFH-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h 114 ; RV32IZFH-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 115 ; RV32IZFH-NEXT: $f10_h = COPY [[COPY]](s16) 116 ; RV32IZFH-NEXT: PseudoCALL target-flags(riscv-call) @caller_half_in_regs, csr_ilp32f_lp64f, implicit-def $x1, implicit $f10_h, implicit-def $f10_h 117 ; RV32IZFH-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 118 ; RV32IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f10_h 119 ; RV32IZFH-NEXT: $f10_h = COPY [[COPY1]](s16) 120 ; RV32IZFH-NEXT: PseudoRET implicit $f10_h 121 ; 122 ; RV64I-LABEL: name: caller_half_in_regs 123 ; RV64I: bb.1 (%ir-block.0): 124 ; RV64I-NEXT: liveins: $x10 125 ; RV64I-NEXT: {{ $}} 126 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 127 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64) 128 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 129 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s16) 130 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64) 131 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @caller_half_in_regs, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit-def $x10 132 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 133 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x10 134 ; RV64I-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s64) 135 ; RV64I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC1]](s16) 136 ; RV64I-NEXT: $x10 = COPY [[ANYEXT1]](s64) 137 ; RV64I-NEXT: PseudoRET implicit $x10 138 ; 139 ; RV64IF-LABEL: name: caller_half_in_regs 140 ; RV64IF: bb.1 (%ir-block.0): 141 ; RV64IF-NEXT: liveins: $f10_f 142 ; RV64IF-NEXT: {{ $}} 143 ; RV64IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f 144 ; RV64IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 145 ; RV64IF-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 146 ; RV64IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 147 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 148 ; RV64IF-NEXT: PseudoCALL target-flags(riscv-call) @caller_half_in_regs, csr_ilp32f_lp64f, implicit-def $x1, implicit $f10_f, implicit-def $f10_f 149 ; RV64IF-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 150 ; RV64IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f10_f 151 ; RV64IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 152 ; RV64IF-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 153 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT1]](s32) 154 ; RV64IF-NEXT: PseudoRET implicit $f10_f 155 ; 156 ; RV64IZFH-LABEL: name: caller_half_in_regs 157 ; RV64IZFH: bb.1 (%ir-block.0): 158 ; RV64IZFH-NEXT: liveins: $f10_h 159 ; RV64IZFH-NEXT: {{ $}} 160 ; RV64IZFH-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h 161 ; RV64IZFH-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 162 ; RV64IZFH-NEXT: $f10_h = COPY [[COPY]](s16) 163 ; RV64IZFH-NEXT: PseudoCALL target-flags(riscv-call) @caller_half_in_regs, csr_ilp32f_lp64f, implicit-def $x1, implicit $f10_h, implicit-def $f10_h 164 ; RV64IZFH-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 165 ; RV64IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f10_h 166 ; RV64IZFH-NEXT: $f10_h = COPY [[COPY1]](s16) 167 ; RV64IZFH-NEXT: PseudoRET implicit $f10_h 168 %y = call half @caller_half_in_regs(half %x) 169 ret half %y 170} 171 172define half @callee_half_mixed_with_int(i32 %x0, half %x) nounwind { 173 ; RV32I-LABEL: name: callee_half_mixed_with_int 174 ; RV32I: bb.1 (%ir-block.0): 175 ; RV32I-NEXT: liveins: $x10, $x11 176 ; RV32I-NEXT: {{ $}} 177 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 178 ; RV32I-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11 179 ; RV32I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 180 ; RV32I-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 181 ; RV32I-NEXT: $x10 = COPY [[ANYEXT]](s32) 182 ; RV32I-NEXT: PseudoRET implicit $x10 183 ; 184 ; RV32IF-LABEL: name: callee_half_mixed_with_int 185 ; RV32IF: bb.1 (%ir-block.0): 186 ; RV32IF-NEXT: liveins: $x10, $f10_f 187 ; RV32IF-NEXT: {{ $}} 188 ; RV32IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 189 ; RV32IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f10_f 190 ; RV32IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 191 ; RV32IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 192 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 193 ; RV32IF-NEXT: PseudoRET implicit $f10_f 194 ; 195 ; RV32IZFH-LABEL: name: callee_half_mixed_with_int 196 ; RV32IZFH: bb.1 (%ir-block.0): 197 ; RV32IZFH-NEXT: liveins: $x10, $f10_h 198 ; RV32IZFH-NEXT: {{ $}} 199 ; RV32IZFH-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 200 ; RV32IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f10_h 201 ; RV32IZFH-NEXT: $f10_h = COPY [[COPY1]](s16) 202 ; RV32IZFH-NEXT: PseudoRET implicit $f10_h 203 ; 204 ; RV64I-LABEL: name: callee_half_mixed_with_int 205 ; RV64I: bb.1 (%ir-block.0): 206 ; RV64I-NEXT: liveins: $x10, $x11 207 ; RV64I-NEXT: {{ $}} 208 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 209 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 210 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11 211 ; RV64I-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s64) 212 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC1]](s16) 213 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64) 214 ; RV64I-NEXT: PseudoRET implicit $x10 215 ; 216 ; RV64IF-LABEL: name: callee_half_mixed_with_int 217 ; RV64IF: bb.1 (%ir-block.0): 218 ; RV64IF-NEXT: liveins: $x10, $f10_f 219 ; RV64IF-NEXT: {{ $}} 220 ; RV64IF-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 221 ; RV64IF-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 222 ; RV64IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f10_f 223 ; RV64IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 224 ; RV64IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 225 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 226 ; RV64IF-NEXT: PseudoRET implicit $f10_f 227 ; 228 ; RV64IZFH-LABEL: name: callee_half_mixed_with_int 229 ; RV64IZFH: bb.1 (%ir-block.0): 230 ; RV64IZFH-NEXT: liveins: $x10, $f10_h 231 ; RV64IZFH-NEXT: {{ $}} 232 ; RV64IZFH-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 233 ; RV64IZFH-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 234 ; RV64IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f10_h 235 ; RV64IZFH-NEXT: $f10_h = COPY [[COPY1]](s16) 236 ; RV64IZFH-NEXT: PseudoRET implicit $f10_h 237 ret half %x 238} 239 240define half @caller_half_mixed_with_int(half %x, i32 %x0) nounwind { 241 ; RV32I-LABEL: name: caller_half_mixed_with_int 242 ; RV32I: bb.1 (%ir-block.0): 243 ; RV32I-NEXT: liveins: $x10, $x11 244 ; RV32I-NEXT: {{ $}} 245 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 246 ; RV32I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 247 ; RV32I-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11 248 ; RV32I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 249 ; RV32I-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 250 ; RV32I-NEXT: $x10 = COPY [[COPY1]](s32) 251 ; RV32I-NEXT: $x11 = COPY [[ANYEXT]](s32) 252 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_mixed_with_int, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10 253 ; RV32I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 254 ; RV32I-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x10 255 ; RV32I-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32) 256 ; RV32I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 257 ; RV32I-NEXT: $x10 = COPY [[ANYEXT1]](s32) 258 ; RV32I-NEXT: PseudoRET implicit $x10 259 ; 260 ; RV32IF-LABEL: name: caller_half_mixed_with_int 261 ; RV32IF: bb.1 (%ir-block.0): 262 ; RV32IF-NEXT: liveins: $x10, $f10_f 263 ; RV32IF-NEXT: {{ $}} 264 ; RV32IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f 265 ; RV32IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 266 ; RV32IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x10 267 ; RV32IF-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 268 ; RV32IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 269 ; RV32IF-NEXT: $x10 = COPY [[COPY1]](s32) 270 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 271 ; RV32IF-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_mixed_with_int, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $f10_f, implicit-def $f10_f 272 ; RV32IF-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 273 ; RV32IF-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $f10_f 274 ; RV32IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32) 275 ; RV32IF-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 276 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT1]](s32) 277 ; RV32IF-NEXT: PseudoRET implicit $f10_f 278 ; 279 ; RV32IZFH-LABEL: name: caller_half_mixed_with_int 280 ; RV32IZFH: bb.1 (%ir-block.0): 281 ; RV32IZFH-NEXT: liveins: $x10, $f10_h 282 ; RV32IZFH-NEXT: {{ $}} 283 ; RV32IZFH-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h 284 ; RV32IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x10 285 ; RV32IZFH-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 286 ; RV32IZFH-NEXT: $x10 = COPY [[COPY1]](s32) 287 ; RV32IZFH-NEXT: $f10_h = COPY [[COPY]](s16) 288 ; RV32IZFH-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_mixed_with_int, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $f10_h, implicit-def $f10_h 289 ; RV32IZFH-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 290 ; RV32IZFH-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY $f10_h 291 ; RV32IZFH-NEXT: $f10_h = COPY [[COPY2]](s16) 292 ; RV32IZFH-NEXT: PseudoRET implicit $f10_h 293 ; 294 ; RV64I-LABEL: name: caller_half_mixed_with_int 295 ; RV64I: bb.1 (%ir-block.0): 296 ; RV64I-NEXT: liveins: $x10, $x11 297 ; RV64I-NEXT: {{ $}} 298 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 299 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64) 300 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11 301 ; RV64I-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64) 302 ; RV64I-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 303 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC1]](s32) 304 ; RV64I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s16) 305 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64) 306 ; RV64I-NEXT: $x11 = COPY [[ANYEXT1]](s64) 307 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_mixed_with_int, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10 308 ; RV64I-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 309 ; RV64I-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x10 310 ; RV64I-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s64) 311 ; RV64I-NEXT: [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC2]](s16) 312 ; RV64I-NEXT: $x10 = COPY [[ANYEXT2]](s64) 313 ; RV64I-NEXT: PseudoRET implicit $x10 314 ; 315 ; RV64IF-LABEL: name: caller_half_mixed_with_int 316 ; RV64IF: bb.1 (%ir-block.0): 317 ; RV64IF-NEXT: liveins: $x10, $f10_f 318 ; RV64IF-NEXT: {{ $}} 319 ; RV64IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f 320 ; RV64IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 321 ; RV64IF-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x10 322 ; RV64IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64) 323 ; RV64IF-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 324 ; RV64IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC1]](s32) 325 ; RV64IF-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 326 ; RV64IF-NEXT: $x10 = COPY [[ANYEXT]](s64) 327 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT1]](s32) 328 ; RV64IF-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_mixed_with_int, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $f10_f, implicit-def $f10_f 329 ; RV64IF-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 330 ; RV64IF-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $f10_f 331 ; RV64IF-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32) 332 ; RV64IF-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC2]](s16) 333 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT2]](s32) 334 ; RV64IF-NEXT: PseudoRET implicit $f10_f 335 ; 336 ; RV64IZFH-LABEL: name: caller_half_mixed_with_int 337 ; RV64IZFH: bb.1 (%ir-block.0): 338 ; RV64IZFH-NEXT: liveins: $x10, $f10_h 339 ; RV64IZFH-NEXT: {{ $}} 340 ; RV64IZFH-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h 341 ; RV64IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x10 342 ; RV64IZFH-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64) 343 ; RV64IZFH-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 344 ; RV64IZFH-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32) 345 ; RV64IZFH-NEXT: $x10 = COPY [[ANYEXT]](s64) 346 ; RV64IZFH-NEXT: $f10_h = COPY [[COPY]](s16) 347 ; RV64IZFH-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_mixed_with_int, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $f10_h, implicit-def $f10_h 348 ; RV64IZFH-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 349 ; RV64IZFH-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY $f10_h 350 ; RV64IZFH-NEXT: $f10_h = COPY [[COPY2]](s16) 351 ; RV64IZFH-NEXT: PseudoRET implicit $f10_h 352 %y = call half @callee_half_mixed_with_int(i32 %x0, half %x) 353 ret half %y 354} 355 356define half @callee_half_return_stack1(i32 %v1, i32 %v2, i32 %v3, i32 %v4, i32 %v5, i32 %v6, i32 %v7, i32 %v8, half %x) nounwind { 357 ; RV32I-LABEL: name: callee_half_return_stack1 358 ; RV32I: bb.1 (%ir-block.0): 359 ; RV32I-NEXT: liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17 360 ; RV32I-NEXT: {{ $}} 361 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 362 ; RV32I-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11 363 ; RV32I-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x12 364 ; RV32I-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $x13 365 ; RV32I-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $x14 366 ; RV32I-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $x15 367 ; RV32I-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $x16 368 ; RV32I-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $x17 369 ; RV32I-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0 370 ; RV32I-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 16) 371 ; RV32I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[LOAD]](s32) 372 ; RV32I-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 373 ; RV32I-NEXT: $x10 = COPY [[ANYEXT]](s32) 374 ; RV32I-NEXT: PseudoRET implicit $x10 375 ; 376 ; RV32IF-LABEL: name: callee_half_return_stack1 377 ; RV32IF: bb.1 (%ir-block.0): 378 ; RV32IF-NEXT: liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $f10_f 379 ; RV32IF-NEXT: {{ $}} 380 ; RV32IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 381 ; RV32IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11 382 ; RV32IF-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x12 383 ; RV32IF-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $x13 384 ; RV32IF-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $x14 385 ; RV32IF-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $x15 386 ; RV32IF-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $x16 387 ; RV32IF-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $x17 388 ; RV32IF-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $f10_f 389 ; RV32IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY8]](s32) 390 ; RV32IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 391 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 392 ; RV32IF-NEXT: PseudoRET implicit $f10_f 393 ; 394 ; RV32IZFH-LABEL: name: callee_half_return_stack1 395 ; RV32IZFH: bb.1 (%ir-block.0): 396 ; RV32IZFH-NEXT: liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $f10_h 397 ; RV32IZFH-NEXT: {{ $}} 398 ; RV32IZFH-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 399 ; RV32IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11 400 ; RV32IZFH-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x12 401 ; RV32IZFH-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $x13 402 ; RV32IZFH-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $x14 403 ; RV32IZFH-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $x15 404 ; RV32IZFH-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $x16 405 ; RV32IZFH-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $x17 406 ; RV32IZFH-NEXT: [[COPY8:%[0-9]+]]:_(s16) = COPY $f10_h 407 ; RV32IZFH-NEXT: $f10_h = COPY [[COPY8]](s16) 408 ; RV32IZFH-NEXT: PseudoRET implicit $f10_h 409 ; 410 ; RV64I-LABEL: name: callee_half_return_stack1 411 ; RV64I: bb.1 (%ir-block.0): 412 ; RV64I-NEXT: liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17 413 ; RV64I-NEXT: {{ $}} 414 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 415 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 416 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11 417 ; RV64I-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64) 418 ; RV64I-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x12 419 ; RV64I-NEXT: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[COPY2]](s64) 420 ; RV64I-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x13 421 ; RV64I-NEXT: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[COPY3]](s64) 422 ; RV64I-NEXT: [[COPY4:%[0-9]+]]:_(s64) = COPY $x14 423 ; RV64I-NEXT: [[TRUNC4:%[0-9]+]]:_(s32) = G_TRUNC [[COPY4]](s64) 424 ; RV64I-NEXT: [[COPY5:%[0-9]+]]:_(s64) = COPY $x15 425 ; RV64I-NEXT: [[TRUNC5:%[0-9]+]]:_(s32) = G_TRUNC [[COPY5]](s64) 426 ; RV64I-NEXT: [[COPY6:%[0-9]+]]:_(s64) = COPY $x16 427 ; RV64I-NEXT: [[TRUNC6:%[0-9]+]]:_(s32) = G_TRUNC [[COPY6]](s64) 428 ; RV64I-NEXT: [[COPY7:%[0-9]+]]:_(s64) = COPY $x17 429 ; RV64I-NEXT: [[TRUNC7:%[0-9]+]]:_(s32) = G_TRUNC [[COPY7]](s64) 430 ; RV64I-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0 431 ; RV64I-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s64) from %fixed-stack.0, align 16) 432 ; RV64I-NEXT: [[TRUNC8:%[0-9]+]]:_(s16) = G_TRUNC [[LOAD]](s64) 433 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC8]](s16) 434 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64) 435 ; RV64I-NEXT: PseudoRET implicit $x10 436 ; 437 ; RV64IF-LABEL: name: callee_half_return_stack1 438 ; RV64IF: bb.1 (%ir-block.0): 439 ; RV64IF-NEXT: liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $f10_f 440 ; RV64IF-NEXT: {{ $}} 441 ; RV64IF-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 442 ; RV64IF-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 443 ; RV64IF-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11 444 ; RV64IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64) 445 ; RV64IF-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x12 446 ; RV64IF-NEXT: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[COPY2]](s64) 447 ; RV64IF-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x13 448 ; RV64IF-NEXT: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[COPY3]](s64) 449 ; RV64IF-NEXT: [[COPY4:%[0-9]+]]:_(s64) = COPY $x14 450 ; RV64IF-NEXT: [[TRUNC4:%[0-9]+]]:_(s32) = G_TRUNC [[COPY4]](s64) 451 ; RV64IF-NEXT: [[COPY5:%[0-9]+]]:_(s64) = COPY $x15 452 ; RV64IF-NEXT: [[TRUNC5:%[0-9]+]]:_(s32) = G_TRUNC [[COPY5]](s64) 453 ; RV64IF-NEXT: [[COPY6:%[0-9]+]]:_(s64) = COPY $x16 454 ; RV64IF-NEXT: [[TRUNC6:%[0-9]+]]:_(s32) = G_TRUNC [[COPY6]](s64) 455 ; RV64IF-NEXT: [[COPY7:%[0-9]+]]:_(s64) = COPY $x17 456 ; RV64IF-NEXT: [[TRUNC7:%[0-9]+]]:_(s32) = G_TRUNC [[COPY7]](s64) 457 ; RV64IF-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $f10_f 458 ; RV64IF-NEXT: [[TRUNC8:%[0-9]+]]:_(s16) = G_TRUNC [[COPY8]](s32) 459 ; RV64IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC8]](s16) 460 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 461 ; RV64IF-NEXT: PseudoRET implicit $f10_f 462 ; 463 ; RV64IZFH-LABEL: name: callee_half_return_stack1 464 ; RV64IZFH: bb.1 (%ir-block.0): 465 ; RV64IZFH-NEXT: liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $f10_h 466 ; RV64IZFH-NEXT: {{ $}} 467 ; RV64IZFH-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 468 ; RV64IZFH-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 469 ; RV64IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11 470 ; RV64IZFH-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64) 471 ; RV64IZFH-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x12 472 ; RV64IZFH-NEXT: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[COPY2]](s64) 473 ; RV64IZFH-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x13 474 ; RV64IZFH-NEXT: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[COPY3]](s64) 475 ; RV64IZFH-NEXT: [[COPY4:%[0-9]+]]:_(s64) = COPY $x14 476 ; RV64IZFH-NEXT: [[TRUNC4:%[0-9]+]]:_(s32) = G_TRUNC [[COPY4]](s64) 477 ; RV64IZFH-NEXT: [[COPY5:%[0-9]+]]:_(s64) = COPY $x15 478 ; RV64IZFH-NEXT: [[TRUNC5:%[0-9]+]]:_(s32) = G_TRUNC [[COPY5]](s64) 479 ; RV64IZFH-NEXT: [[COPY6:%[0-9]+]]:_(s64) = COPY $x16 480 ; RV64IZFH-NEXT: [[TRUNC6:%[0-9]+]]:_(s32) = G_TRUNC [[COPY6]](s64) 481 ; RV64IZFH-NEXT: [[COPY7:%[0-9]+]]:_(s64) = COPY $x17 482 ; RV64IZFH-NEXT: [[TRUNC7:%[0-9]+]]:_(s32) = G_TRUNC [[COPY7]](s64) 483 ; RV64IZFH-NEXT: [[COPY8:%[0-9]+]]:_(s16) = COPY $f10_h 484 ; RV64IZFH-NEXT: $f10_h = COPY [[COPY8]](s16) 485 ; RV64IZFH-NEXT: PseudoRET implicit $f10_h 486 ret half %x 487} 488 489define half @caller_half_return_stack1(i32 %v1, half %x) nounwind { 490 ; RV32I-LABEL: name: caller_half_return_stack1 491 ; RV32I: bb.1 (%ir-block.0): 492 ; RV32I-NEXT: liveins: $x10, $x11 493 ; RV32I-NEXT: {{ $}} 494 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 495 ; RV32I-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11 496 ; RV32I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 497 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 498 ; RV32I-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 499 ; RV32I-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2 500 ; RV32I-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 5 501 ; RV32I-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 6 502 ; RV32I-NEXT: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 7 503 ; RV32I-NEXT: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 504 ; RV32I-NEXT: ADJCALLSTACKDOWN 4, 0, implicit-def $x2, implicit $x2 505 ; RV32I-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 506 ; RV32I-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2 507 ; RV32I-NEXT: [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 508 ; RV32I-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY2]], [[C7]](s32) 509 ; RV32I-NEXT: G_STORE [[ANYEXT]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack, align 16) 510 ; RV32I-NEXT: $x10 = COPY [[C]](s32) 511 ; RV32I-NEXT: $x11 = COPY [[C1]](s32) 512 ; RV32I-NEXT: $x12 = COPY [[C2]](s32) 513 ; RV32I-NEXT: $x13 = COPY [[COPY]](s32) 514 ; RV32I-NEXT: $x14 = COPY [[C3]](s32) 515 ; RV32I-NEXT: $x15 = COPY [[C4]](s32) 516 ; RV32I-NEXT: $x16 = COPY [[C5]](s32) 517 ; RV32I-NEXT: $x17 = COPY [[C6]](s32) 518 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack1, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10 519 ; RV32I-NEXT: ADJCALLSTACKUP 4, 0, implicit-def $x2, implicit $x2 520 ; RV32I-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $x10 521 ; RV32I-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s32) 522 ; RV32I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 523 ; RV32I-NEXT: $x10 = COPY [[ANYEXT1]](s32) 524 ; RV32I-NEXT: PseudoRET implicit $x10 525 ; 526 ; RV32IF-LABEL: name: caller_half_return_stack1 527 ; RV32IF: bb.1 (%ir-block.0): 528 ; RV32IF-NEXT: liveins: $x10, $f10_f 529 ; RV32IF-NEXT: {{ $}} 530 ; RV32IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 531 ; RV32IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f10_f 532 ; RV32IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 533 ; RV32IF-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 534 ; RV32IF-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 535 ; RV32IF-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2 536 ; RV32IF-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 5 537 ; RV32IF-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 6 538 ; RV32IF-NEXT: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 7 539 ; RV32IF-NEXT: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 540 ; RV32IF-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 541 ; RV32IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 542 ; RV32IF-NEXT: $x10 = COPY [[C]](s32) 543 ; RV32IF-NEXT: $x11 = COPY [[C1]](s32) 544 ; RV32IF-NEXT: $x12 = COPY [[C2]](s32) 545 ; RV32IF-NEXT: $x13 = COPY [[COPY]](s32) 546 ; RV32IF-NEXT: $x14 = COPY [[C3]](s32) 547 ; RV32IF-NEXT: $x15 = COPY [[C4]](s32) 548 ; RV32IF-NEXT: $x16 = COPY [[C5]](s32) 549 ; RV32IF-NEXT: $x17 = COPY [[C6]](s32) 550 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 551 ; RV32IF-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack1, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit $f10_f, implicit-def $f10_f 552 ; RV32IF-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 553 ; RV32IF-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $f10_f 554 ; RV32IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32) 555 ; RV32IF-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 556 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT1]](s32) 557 ; RV32IF-NEXT: PseudoRET implicit $f10_f 558 ; 559 ; RV32IZFH-LABEL: name: caller_half_return_stack1 560 ; RV32IZFH: bb.1 (%ir-block.0): 561 ; RV32IZFH-NEXT: liveins: $x10, $f10_h 562 ; RV32IZFH-NEXT: {{ $}} 563 ; RV32IZFH-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 564 ; RV32IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f10_h 565 ; RV32IZFH-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 566 ; RV32IZFH-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 567 ; RV32IZFH-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2 568 ; RV32IZFH-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 5 569 ; RV32IZFH-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 6 570 ; RV32IZFH-NEXT: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 7 571 ; RV32IZFH-NEXT: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 572 ; RV32IZFH-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 573 ; RV32IZFH-NEXT: $x10 = COPY [[C]](s32) 574 ; RV32IZFH-NEXT: $x11 = COPY [[C1]](s32) 575 ; RV32IZFH-NEXT: $x12 = COPY [[C2]](s32) 576 ; RV32IZFH-NEXT: $x13 = COPY [[COPY]](s32) 577 ; RV32IZFH-NEXT: $x14 = COPY [[C3]](s32) 578 ; RV32IZFH-NEXT: $x15 = COPY [[C4]](s32) 579 ; RV32IZFH-NEXT: $x16 = COPY [[C5]](s32) 580 ; RV32IZFH-NEXT: $x17 = COPY [[C6]](s32) 581 ; RV32IZFH-NEXT: $f10_h = COPY [[COPY1]](s16) 582 ; RV32IZFH-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack1, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit $f10_h, implicit-def $f10_h 583 ; RV32IZFH-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 584 ; RV32IZFH-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY $f10_h 585 ; RV32IZFH-NEXT: $f10_h = COPY [[COPY2]](s16) 586 ; RV32IZFH-NEXT: PseudoRET implicit $f10_h 587 ; 588 ; RV64I-LABEL: name: caller_half_return_stack1 589 ; RV64I: bb.1 (%ir-block.0): 590 ; RV64I-NEXT: liveins: $x10, $x11 591 ; RV64I-NEXT: {{ $}} 592 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 593 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 594 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11 595 ; RV64I-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s64) 596 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 597 ; RV64I-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 598 ; RV64I-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2 599 ; RV64I-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 5 600 ; RV64I-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 6 601 ; RV64I-NEXT: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 7 602 ; RV64I-NEXT: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 603 ; RV64I-NEXT: ADJCALLSTACKDOWN 8, 0, implicit-def $x2, implicit $x2 604 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s32) 605 ; RV64I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C1]](s32) 606 ; RV64I-NEXT: [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[C2]](s32) 607 ; RV64I-NEXT: [[ANYEXT3:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32) 608 ; RV64I-NEXT: [[ANYEXT4:%[0-9]+]]:_(s64) = G_ANYEXT [[C3]](s32) 609 ; RV64I-NEXT: [[ANYEXT5:%[0-9]+]]:_(s64) = G_ANYEXT [[C4]](s32) 610 ; RV64I-NEXT: [[ANYEXT6:%[0-9]+]]:_(s64) = G_ANYEXT [[C5]](s32) 611 ; RV64I-NEXT: [[ANYEXT7:%[0-9]+]]:_(s64) = G_ANYEXT [[C6]](s32) 612 ; RV64I-NEXT: [[ANYEXT8:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC1]](s16) 613 ; RV64I-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2 614 ; RV64I-NEXT: [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 615 ; RV64I-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY2]], [[C7]](s64) 616 ; RV64I-NEXT: G_STORE [[ANYEXT8]](s64), [[PTR_ADD]](p0) :: (store (s64) into stack, align 16) 617 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64) 618 ; RV64I-NEXT: $x11 = COPY [[ANYEXT1]](s64) 619 ; RV64I-NEXT: $x12 = COPY [[ANYEXT2]](s64) 620 ; RV64I-NEXT: $x13 = COPY [[ANYEXT3]](s64) 621 ; RV64I-NEXT: $x14 = COPY [[ANYEXT4]](s64) 622 ; RV64I-NEXT: $x15 = COPY [[ANYEXT5]](s64) 623 ; RV64I-NEXT: $x16 = COPY [[ANYEXT6]](s64) 624 ; RV64I-NEXT: $x17 = COPY [[ANYEXT7]](s64) 625 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack1, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10 626 ; RV64I-NEXT: ADJCALLSTACKUP 8, 0, implicit-def $x2, implicit $x2 627 ; RV64I-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x10 628 ; RV64I-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s64) 629 ; RV64I-NEXT: [[ANYEXT9:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC2]](s16) 630 ; RV64I-NEXT: $x10 = COPY [[ANYEXT9]](s64) 631 ; RV64I-NEXT: PseudoRET implicit $x10 632 ; 633 ; RV64IF-LABEL: name: caller_half_return_stack1 634 ; RV64IF: bb.1 (%ir-block.0): 635 ; RV64IF-NEXT: liveins: $x10, $f10_f 636 ; RV64IF-NEXT: {{ $}} 637 ; RV64IF-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 638 ; RV64IF-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 639 ; RV64IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f10_f 640 ; RV64IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 641 ; RV64IF-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 642 ; RV64IF-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 643 ; RV64IF-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2 644 ; RV64IF-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 5 645 ; RV64IF-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 6 646 ; RV64IF-NEXT: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 7 647 ; RV64IF-NEXT: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 648 ; RV64IF-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 649 ; RV64IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s32) 650 ; RV64IF-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C1]](s32) 651 ; RV64IF-NEXT: [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[C2]](s32) 652 ; RV64IF-NEXT: [[ANYEXT3:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32) 653 ; RV64IF-NEXT: [[ANYEXT4:%[0-9]+]]:_(s64) = G_ANYEXT [[C3]](s32) 654 ; RV64IF-NEXT: [[ANYEXT5:%[0-9]+]]:_(s64) = G_ANYEXT [[C4]](s32) 655 ; RV64IF-NEXT: [[ANYEXT6:%[0-9]+]]:_(s64) = G_ANYEXT [[C5]](s32) 656 ; RV64IF-NEXT: [[ANYEXT7:%[0-9]+]]:_(s64) = G_ANYEXT [[C6]](s32) 657 ; RV64IF-NEXT: [[ANYEXT8:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 658 ; RV64IF-NEXT: $x10 = COPY [[ANYEXT]](s64) 659 ; RV64IF-NEXT: $x11 = COPY [[ANYEXT1]](s64) 660 ; RV64IF-NEXT: $x12 = COPY [[ANYEXT2]](s64) 661 ; RV64IF-NEXT: $x13 = COPY [[ANYEXT3]](s64) 662 ; RV64IF-NEXT: $x14 = COPY [[ANYEXT4]](s64) 663 ; RV64IF-NEXT: $x15 = COPY [[ANYEXT5]](s64) 664 ; RV64IF-NEXT: $x16 = COPY [[ANYEXT6]](s64) 665 ; RV64IF-NEXT: $x17 = COPY [[ANYEXT7]](s64) 666 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT8]](s32) 667 ; RV64IF-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack1, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit $f10_f, implicit-def $f10_f 668 ; RV64IF-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 669 ; RV64IF-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $f10_f 670 ; RV64IF-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32) 671 ; RV64IF-NEXT: [[ANYEXT9:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC2]](s16) 672 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT9]](s32) 673 ; RV64IF-NEXT: PseudoRET implicit $f10_f 674 ; 675 ; RV64IZFH-LABEL: name: caller_half_return_stack1 676 ; RV64IZFH: bb.1 (%ir-block.0): 677 ; RV64IZFH-NEXT: liveins: $x10, $f10_h 678 ; RV64IZFH-NEXT: {{ $}} 679 ; RV64IZFH-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 680 ; RV64IZFH-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 681 ; RV64IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f10_h 682 ; RV64IZFH-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 683 ; RV64IZFH-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 684 ; RV64IZFH-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2 685 ; RV64IZFH-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 5 686 ; RV64IZFH-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 6 687 ; RV64IZFH-NEXT: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 7 688 ; RV64IZFH-NEXT: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 689 ; RV64IZFH-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 690 ; RV64IZFH-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s32) 691 ; RV64IZFH-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C1]](s32) 692 ; RV64IZFH-NEXT: [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[C2]](s32) 693 ; RV64IZFH-NEXT: [[ANYEXT3:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s32) 694 ; RV64IZFH-NEXT: [[ANYEXT4:%[0-9]+]]:_(s64) = G_ANYEXT [[C3]](s32) 695 ; RV64IZFH-NEXT: [[ANYEXT5:%[0-9]+]]:_(s64) = G_ANYEXT [[C4]](s32) 696 ; RV64IZFH-NEXT: [[ANYEXT6:%[0-9]+]]:_(s64) = G_ANYEXT [[C5]](s32) 697 ; RV64IZFH-NEXT: [[ANYEXT7:%[0-9]+]]:_(s64) = G_ANYEXT [[C6]](s32) 698 ; RV64IZFH-NEXT: $x10 = COPY [[ANYEXT]](s64) 699 ; RV64IZFH-NEXT: $x11 = COPY [[ANYEXT1]](s64) 700 ; RV64IZFH-NEXT: $x12 = COPY [[ANYEXT2]](s64) 701 ; RV64IZFH-NEXT: $x13 = COPY [[ANYEXT3]](s64) 702 ; RV64IZFH-NEXT: $x14 = COPY [[ANYEXT4]](s64) 703 ; RV64IZFH-NEXT: $x15 = COPY [[ANYEXT5]](s64) 704 ; RV64IZFH-NEXT: $x16 = COPY [[ANYEXT6]](s64) 705 ; RV64IZFH-NEXT: $x17 = COPY [[ANYEXT7]](s64) 706 ; RV64IZFH-NEXT: $f10_h = COPY [[COPY1]](s16) 707 ; RV64IZFH-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack1, csr_ilp32f_lp64f, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit $f10_h, implicit-def $f10_h 708 ; RV64IZFH-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 709 ; RV64IZFH-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY $f10_h 710 ; RV64IZFH-NEXT: $f10_h = COPY [[COPY2]](s16) 711 ; RV64IZFH-NEXT: PseudoRET implicit $f10_h 712 %y = call half @callee_half_return_stack1(i32 0, i32 1, i32 2, i32 %v1, i32 5, i32 6, i32 7, i32 8, half %x) 713 ret half %y 714} 715 716define half @callee_half_return_stack2(half %v1, half %v2, half %v3, half %v4, half %v5, half %v6, half %v7, half %v8, half %x) nounwind { 717 ; RV32I-LABEL: name: callee_half_return_stack2 718 ; RV32I: bb.1 (%ir-block.0): 719 ; RV32I-NEXT: liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17 720 ; RV32I-NEXT: {{ $}} 721 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 722 ; RV32I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 723 ; RV32I-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11 724 ; RV32I-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 725 ; RV32I-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x12 726 ; RV32I-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32) 727 ; RV32I-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $x13 728 ; RV32I-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s32) 729 ; RV32I-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $x14 730 ; RV32I-NEXT: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[COPY4]](s32) 731 ; RV32I-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $x15 732 ; RV32I-NEXT: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[COPY5]](s32) 733 ; RV32I-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $x16 734 ; RV32I-NEXT: [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[COPY6]](s32) 735 ; RV32I-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $x17 736 ; RV32I-NEXT: [[TRUNC7:%[0-9]+]]:_(s16) = G_TRUNC [[COPY7]](s32) 737 ; RV32I-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0 738 ; RV32I-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 16) 739 ; RV32I-NEXT: [[TRUNC8:%[0-9]+]]:_(s16) = G_TRUNC [[LOAD]](s32) 740 ; RV32I-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC8]](s16) 741 ; RV32I-NEXT: $x10 = COPY [[ANYEXT]](s32) 742 ; RV32I-NEXT: PseudoRET implicit $x10 743 ; 744 ; RV32IF-LABEL: name: callee_half_return_stack2 745 ; RV32IF: bb.1 (%ir-block.0): 746 ; RV32IF-NEXT: liveins: $x10, $f10_f, $f11_f, $f12_f, $f13_f, $f14_f, $f15_f, $f16_f, $f17_f 747 ; RV32IF-NEXT: {{ $}} 748 ; RV32IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f 749 ; RV32IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 750 ; RV32IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f11_f 751 ; RV32IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 752 ; RV32IF-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $f12_f 753 ; RV32IF-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32) 754 ; RV32IF-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $f13_f 755 ; RV32IF-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s32) 756 ; RV32IF-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $f14_f 757 ; RV32IF-NEXT: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[COPY4]](s32) 758 ; RV32IF-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $f15_f 759 ; RV32IF-NEXT: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[COPY5]](s32) 760 ; RV32IF-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $f16_f 761 ; RV32IF-NEXT: [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[COPY6]](s32) 762 ; RV32IF-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $f17_f 763 ; RV32IF-NEXT: [[TRUNC7:%[0-9]+]]:_(s16) = G_TRUNC [[COPY7]](s32) 764 ; RV32IF-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $x10 765 ; RV32IF-NEXT: [[TRUNC8:%[0-9]+]]:_(s16) = G_TRUNC [[COPY8]](s32) 766 ; RV32IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC8]](s16) 767 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 768 ; RV32IF-NEXT: PseudoRET implicit $f10_f 769 ; 770 ; RV32IZFH-LABEL: name: callee_half_return_stack2 771 ; RV32IZFH: bb.1 (%ir-block.0): 772 ; RV32IZFH-NEXT: liveins: $x10, $f10_h, $f11_h, $f12_h, $f13_h, $f14_h, $f15_h, $f16_h, $f17_h 773 ; RV32IZFH-NEXT: {{ $}} 774 ; RV32IZFH-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h 775 ; RV32IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f11_h 776 ; RV32IZFH-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY $f12_h 777 ; RV32IZFH-NEXT: [[COPY3:%[0-9]+]]:_(s16) = COPY $f13_h 778 ; RV32IZFH-NEXT: [[COPY4:%[0-9]+]]:_(s16) = COPY $f14_h 779 ; RV32IZFH-NEXT: [[COPY5:%[0-9]+]]:_(s16) = COPY $f15_h 780 ; RV32IZFH-NEXT: [[COPY6:%[0-9]+]]:_(s16) = COPY $f16_h 781 ; RV32IZFH-NEXT: [[COPY7:%[0-9]+]]:_(s16) = COPY $f17_h 782 ; RV32IZFH-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $x10 783 ; RV32IZFH-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY8]](s32) 784 ; RV32IZFH-NEXT: $f10_h = COPY [[TRUNC]](s16) 785 ; RV32IZFH-NEXT: PseudoRET implicit $f10_h 786 ; 787 ; RV64I-LABEL: name: callee_half_return_stack2 788 ; RV64I: bb.1 (%ir-block.0): 789 ; RV64I-NEXT: liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17 790 ; RV64I-NEXT: {{ $}} 791 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 792 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64) 793 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11 794 ; RV64I-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s64) 795 ; RV64I-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x12 796 ; RV64I-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s64) 797 ; RV64I-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x13 798 ; RV64I-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s64) 799 ; RV64I-NEXT: [[COPY4:%[0-9]+]]:_(s64) = COPY $x14 800 ; RV64I-NEXT: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[COPY4]](s64) 801 ; RV64I-NEXT: [[COPY5:%[0-9]+]]:_(s64) = COPY $x15 802 ; RV64I-NEXT: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[COPY5]](s64) 803 ; RV64I-NEXT: [[COPY6:%[0-9]+]]:_(s64) = COPY $x16 804 ; RV64I-NEXT: [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[COPY6]](s64) 805 ; RV64I-NEXT: [[COPY7:%[0-9]+]]:_(s64) = COPY $x17 806 ; RV64I-NEXT: [[TRUNC7:%[0-9]+]]:_(s16) = G_TRUNC [[COPY7]](s64) 807 ; RV64I-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0 808 ; RV64I-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s64) from %fixed-stack.0, align 16) 809 ; RV64I-NEXT: [[TRUNC8:%[0-9]+]]:_(s16) = G_TRUNC [[LOAD]](s64) 810 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC8]](s16) 811 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64) 812 ; RV64I-NEXT: PseudoRET implicit $x10 813 ; 814 ; RV64IF-LABEL: name: callee_half_return_stack2 815 ; RV64IF: bb.1 (%ir-block.0): 816 ; RV64IF-NEXT: liveins: $x10, $f10_f, $f11_f, $f12_f, $f13_f, $f14_f, $f15_f, $f16_f, $f17_f 817 ; RV64IF-NEXT: {{ $}} 818 ; RV64IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f 819 ; RV64IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 820 ; RV64IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f11_f 821 ; RV64IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 822 ; RV64IF-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $f12_f 823 ; RV64IF-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32) 824 ; RV64IF-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $f13_f 825 ; RV64IF-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s32) 826 ; RV64IF-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $f14_f 827 ; RV64IF-NEXT: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[COPY4]](s32) 828 ; RV64IF-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $f15_f 829 ; RV64IF-NEXT: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[COPY5]](s32) 830 ; RV64IF-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $f16_f 831 ; RV64IF-NEXT: [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[COPY6]](s32) 832 ; RV64IF-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $f17_f 833 ; RV64IF-NEXT: [[TRUNC7:%[0-9]+]]:_(s16) = G_TRUNC [[COPY7]](s32) 834 ; RV64IF-NEXT: [[COPY8:%[0-9]+]]:_(s64) = COPY $x10 835 ; RV64IF-NEXT: [[TRUNC8:%[0-9]+]]:_(s16) = G_TRUNC [[COPY8]](s64) 836 ; RV64IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC8]](s16) 837 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 838 ; RV64IF-NEXT: PseudoRET implicit $f10_f 839 ; 840 ; RV64IZFH-LABEL: name: callee_half_return_stack2 841 ; RV64IZFH: bb.1 (%ir-block.0): 842 ; RV64IZFH-NEXT: liveins: $x10, $f10_h, $f11_h, $f12_h, $f13_h, $f14_h, $f15_h, $f16_h, $f17_h 843 ; RV64IZFH-NEXT: {{ $}} 844 ; RV64IZFH-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h 845 ; RV64IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f11_h 846 ; RV64IZFH-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY $f12_h 847 ; RV64IZFH-NEXT: [[COPY3:%[0-9]+]]:_(s16) = COPY $f13_h 848 ; RV64IZFH-NEXT: [[COPY4:%[0-9]+]]:_(s16) = COPY $f14_h 849 ; RV64IZFH-NEXT: [[COPY5:%[0-9]+]]:_(s16) = COPY $f15_h 850 ; RV64IZFH-NEXT: [[COPY6:%[0-9]+]]:_(s16) = COPY $f16_h 851 ; RV64IZFH-NEXT: [[COPY7:%[0-9]+]]:_(s16) = COPY $f17_h 852 ; RV64IZFH-NEXT: [[COPY8:%[0-9]+]]:_(s64) = COPY $x10 853 ; RV64IZFH-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY8]](s64) 854 ; RV64IZFH-NEXT: $f10_h = COPY [[TRUNC]](s16) 855 ; RV64IZFH-NEXT: PseudoRET implicit $f10_h 856 ret half %x 857} 858 859define half @caller_half_return_stack2(half %x, half %y) nounwind { 860 ; RV32I-LABEL: name: caller_half_return_stack2 861 ; RV32I: bb.1 (%ir-block.0): 862 ; RV32I-NEXT: liveins: $x10, $x11 863 ; RV32I-NEXT: {{ $}} 864 ; RV32I-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10 865 ; RV32I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 866 ; RV32I-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11 867 ; RV32I-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 868 ; RV32I-NEXT: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH3C00 869 ; RV32I-NEXT: [[C1:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH4200 870 ; RV32I-NEXT: ADJCALLSTACKDOWN 4, 0, implicit-def $x2, implicit $x2 871 ; RV32I-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 872 ; RV32I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[C]](s16) 873 ; RV32I-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32) 874 ; RV32I-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[C1]](s16) 875 ; RV32I-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32) 876 ; RV32I-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 877 ; RV32I-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY [[ANYEXT3]](s32) 878 ; RV32I-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY [[ANYEXT3]](s32) 879 ; RV32I-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32) 880 ; RV32I-NEXT: [[COPY7:%[0-9]+]]:_(p0) = COPY $x2 881 ; RV32I-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 882 ; RV32I-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY7]], [[C2]](s32) 883 ; RV32I-NEXT: G_STORE [[COPY6]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack, align 16) 884 ; RV32I-NEXT: $x10 = COPY [[ANYEXT]](s32) 885 ; RV32I-NEXT: $x11 = COPY [[ANYEXT1]](s32) 886 ; RV32I-NEXT: $x12 = COPY [[COPY2]](s32) 887 ; RV32I-NEXT: $x13 = COPY [[ANYEXT2]](s32) 888 ; RV32I-NEXT: $x14 = COPY [[COPY3]](s32) 889 ; RV32I-NEXT: $x15 = COPY [[ANYEXT3]](s32) 890 ; RV32I-NEXT: $x16 = COPY [[COPY4]](s32) 891 ; RV32I-NEXT: $x17 = COPY [[COPY5]](s32) 892 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack2, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10 893 ; RV32I-NEXT: ADJCALLSTACKUP 4, 0, implicit-def $x2, implicit $x2 894 ; RV32I-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $x10 895 ; RV32I-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY8]](s32) 896 ; RV32I-NEXT: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC2]](s16) 897 ; RV32I-NEXT: $x10 = COPY [[ANYEXT4]](s32) 898 ; RV32I-NEXT: PseudoRET implicit $x10 899 ; 900 ; RV32IF-LABEL: name: caller_half_return_stack2 901 ; RV32IF: bb.1 (%ir-block.0): 902 ; RV32IF-NEXT: liveins: $f10_f, $f11_f 903 ; RV32IF-NEXT: {{ $}} 904 ; RV32IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f 905 ; RV32IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 906 ; RV32IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f11_f 907 ; RV32IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 908 ; RV32IF-NEXT: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH3C00 909 ; RV32IF-NEXT: [[C1:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH4200 910 ; RV32IF-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 911 ; RV32IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 912 ; RV32IF-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[C]](s16) 913 ; RV32IF-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32) 914 ; RV32IF-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[C1]](s16) 915 ; RV32IF-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32) 916 ; RV32IF-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 917 ; RV32IF-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY [[ANYEXT3]](s32) 918 ; RV32IF-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY [[ANYEXT3]](s32) 919 ; RV32IF-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32) 920 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 921 ; RV32IF-NEXT: $f11_f = COPY [[ANYEXT1]](s32) 922 ; RV32IF-NEXT: $f12_f = COPY [[COPY2]](s32) 923 ; RV32IF-NEXT: $f13_f = COPY [[ANYEXT2]](s32) 924 ; RV32IF-NEXT: $f14_f = COPY [[COPY3]](s32) 925 ; RV32IF-NEXT: $f15_f = COPY [[ANYEXT3]](s32) 926 ; RV32IF-NEXT: $f16_f = COPY [[COPY4]](s32) 927 ; RV32IF-NEXT: $f17_f = COPY [[COPY5]](s32) 928 ; RV32IF-NEXT: $x10 = COPY [[COPY6]](s32) 929 ; RV32IF-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack2, csr_ilp32f_lp64f, implicit-def $x1, implicit $f10_f, implicit $f11_f, implicit $f12_f, implicit $f13_f, implicit $f14_f, implicit $f15_f, implicit $f16_f, implicit $f17_f, implicit $x10, implicit-def $f10_f 930 ; RV32IF-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 931 ; RV32IF-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $f10_f 932 ; RV32IF-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY7]](s32) 933 ; RV32IF-NEXT: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC2]](s16) 934 ; RV32IF-NEXT: $f10_f = COPY [[ANYEXT4]](s32) 935 ; RV32IF-NEXT: PseudoRET implicit $f10_f 936 ; 937 ; RV32IZFH-LABEL: name: caller_half_return_stack2 938 ; RV32IZFH: bb.1 (%ir-block.0): 939 ; RV32IZFH-NEXT: liveins: $f10_h, $f11_h 940 ; RV32IZFH-NEXT: {{ $}} 941 ; RV32IZFH-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h 942 ; RV32IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f11_h 943 ; RV32IZFH-NEXT: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH3C00 944 ; RV32IZFH-NEXT: [[C1:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH4200 945 ; RV32IZFH-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 946 ; RV32IZFH-NEXT: $f10_h = COPY [[COPY]](s16) 947 ; RV32IZFH-NEXT: $f11_h = COPY [[C]](s16) 948 ; RV32IZFH-NEXT: $f12_h = COPY [[COPY]](s16) 949 ; RV32IZFH-NEXT: $f13_h = COPY [[C1]](s16) 950 ; RV32IZFH-NEXT: $f14_h = COPY [[COPY]](s16) 951 ; RV32IZFH-NEXT: $f15_h = COPY [[COPY1]](s16) 952 ; RV32IZFH-NEXT: $f16_h = COPY [[COPY1]](s16) 953 ; RV32IZFH-NEXT: $f17_h = COPY [[COPY1]](s16) 954 ; RV32IZFH-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[COPY]](s16) 955 ; RV32IZFH-NEXT: $x10 = COPY [[ANYEXT]](s32) 956 ; RV32IZFH-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack2, csr_ilp32f_lp64f, implicit-def $x1, implicit $f10_h, implicit $f11_h, implicit $f12_h, implicit $f13_h, implicit $f14_h, implicit $f15_h, implicit $f16_h, implicit $f17_h, implicit $x10, implicit-def $f10_h 957 ; RV32IZFH-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 958 ; RV32IZFH-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY $f10_h 959 ; RV32IZFH-NEXT: $f10_h = COPY [[COPY2]](s16) 960 ; RV32IZFH-NEXT: PseudoRET implicit $f10_h 961 ; 962 ; RV64I-LABEL: name: caller_half_return_stack2 963 ; RV64I: bb.1 (%ir-block.0): 964 ; RV64I-NEXT: liveins: $x10, $x11 965 ; RV64I-NEXT: {{ $}} 966 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 967 ; RV64I-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64) 968 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11 969 ; RV64I-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s64) 970 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH3C00 971 ; RV64I-NEXT: [[C1:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH4200 972 ; RV64I-NEXT: ADJCALLSTACKDOWN 8, 0, implicit-def $x2, implicit $x2 973 ; RV64I-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s16) 974 ; RV64I-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s16) 975 ; RV64I-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY [[ANYEXT]](s64) 976 ; RV64I-NEXT: [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[C1]](s16) 977 ; RV64I-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY [[ANYEXT]](s64) 978 ; RV64I-NEXT: [[ANYEXT3:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC1]](s16) 979 ; RV64I-NEXT: [[COPY4:%[0-9]+]]:_(s64) = COPY [[ANYEXT3]](s64) 980 ; RV64I-NEXT: [[COPY5:%[0-9]+]]:_(s64) = COPY [[ANYEXT3]](s64) 981 ; RV64I-NEXT: [[COPY6:%[0-9]+]]:_(s64) = COPY [[ANYEXT]](s64) 982 ; RV64I-NEXT: [[COPY7:%[0-9]+]]:_(p0) = COPY $x2 983 ; RV64I-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 984 ; RV64I-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY7]], [[C2]](s64) 985 ; RV64I-NEXT: G_STORE [[COPY6]](s64), [[PTR_ADD]](p0) :: (store (s64) into stack, align 16) 986 ; RV64I-NEXT: $x10 = COPY [[ANYEXT]](s64) 987 ; RV64I-NEXT: $x11 = COPY [[ANYEXT1]](s64) 988 ; RV64I-NEXT: $x12 = COPY [[COPY2]](s64) 989 ; RV64I-NEXT: $x13 = COPY [[ANYEXT2]](s64) 990 ; RV64I-NEXT: $x14 = COPY [[COPY3]](s64) 991 ; RV64I-NEXT: $x15 = COPY [[ANYEXT3]](s64) 992 ; RV64I-NEXT: $x16 = COPY [[COPY4]](s64) 993 ; RV64I-NEXT: $x17 = COPY [[COPY5]](s64) 994 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack2, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit-def $x10 995 ; RV64I-NEXT: ADJCALLSTACKUP 8, 0, implicit-def $x2, implicit $x2 996 ; RV64I-NEXT: [[COPY8:%[0-9]+]]:_(s64) = COPY $x10 997 ; RV64I-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY8]](s64) 998 ; RV64I-NEXT: [[ANYEXT4:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC2]](s16) 999 ; RV64I-NEXT: $x10 = COPY [[ANYEXT4]](s64) 1000 ; RV64I-NEXT: PseudoRET implicit $x10 1001 ; 1002 ; RV64IF-LABEL: name: caller_half_return_stack2 1003 ; RV64IF: bb.1 (%ir-block.0): 1004 ; RV64IF-NEXT: liveins: $f10_f, $f11_f 1005 ; RV64IF-NEXT: {{ $}} 1006 ; RV64IF-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f 1007 ; RV64IF-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 1008 ; RV64IF-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $f11_f 1009 ; RV64IF-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 1010 ; RV64IF-NEXT: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH3C00 1011 ; RV64IF-NEXT: [[C1:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH4200 1012 ; RV64IF-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 1013 ; RV64IF-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 1014 ; RV64IF-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[C]](s16) 1015 ; RV64IF-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32) 1016 ; RV64IF-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[C1]](s16) 1017 ; RV64IF-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32) 1018 ; RV64IF-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 1019 ; RV64IF-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY [[ANYEXT3]](s32) 1020 ; RV64IF-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY [[ANYEXT3]](s32) 1021 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT]](s32) 1022 ; RV64IF-NEXT: $f11_f = COPY [[ANYEXT1]](s32) 1023 ; RV64IF-NEXT: $f12_f = COPY [[COPY2]](s32) 1024 ; RV64IF-NEXT: $f13_f = COPY [[ANYEXT2]](s32) 1025 ; RV64IF-NEXT: $f14_f = COPY [[COPY3]](s32) 1026 ; RV64IF-NEXT: $f15_f = COPY [[ANYEXT3]](s32) 1027 ; RV64IF-NEXT: $f16_f = COPY [[COPY4]](s32) 1028 ; RV64IF-NEXT: $f17_f = COPY [[COPY5]](s32) 1029 ; RV64IF-NEXT: [[ANYEXT4:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s16) 1030 ; RV64IF-NEXT: $x10 = COPY [[ANYEXT4]](s64) 1031 ; RV64IF-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack2, csr_ilp32f_lp64f, implicit-def $x1, implicit $f10_f, implicit $f11_f, implicit $f12_f, implicit $f13_f, implicit $f14_f, implicit $f15_f, implicit $f16_f, implicit $f17_f, implicit $x10, implicit-def $f10_f 1032 ; RV64IF-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 1033 ; RV64IF-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $f10_f 1034 ; RV64IF-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY6]](s32) 1035 ; RV64IF-NEXT: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC2]](s16) 1036 ; RV64IF-NEXT: $f10_f = COPY [[ANYEXT5]](s32) 1037 ; RV64IF-NEXT: PseudoRET implicit $f10_f 1038 ; 1039 ; RV64IZFH-LABEL: name: caller_half_return_stack2 1040 ; RV64IZFH: bb.1 (%ir-block.0): 1041 ; RV64IZFH-NEXT: liveins: $f10_h, $f11_h 1042 ; RV64IZFH-NEXT: {{ $}} 1043 ; RV64IZFH-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $f10_h 1044 ; RV64IZFH-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY $f11_h 1045 ; RV64IZFH-NEXT: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH3C00 1046 ; RV64IZFH-NEXT: [[C1:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH4200 1047 ; RV64IZFH-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2 1048 ; RV64IZFH-NEXT: $f10_h = COPY [[COPY]](s16) 1049 ; RV64IZFH-NEXT: $f11_h = COPY [[C]](s16) 1050 ; RV64IZFH-NEXT: $f12_h = COPY [[COPY]](s16) 1051 ; RV64IZFH-NEXT: $f13_h = COPY [[C1]](s16) 1052 ; RV64IZFH-NEXT: $f14_h = COPY [[COPY]](s16) 1053 ; RV64IZFH-NEXT: $f15_h = COPY [[COPY1]](s16) 1054 ; RV64IZFH-NEXT: $f16_h = COPY [[COPY1]](s16) 1055 ; RV64IZFH-NEXT: $f17_h = COPY [[COPY1]](s16) 1056 ; RV64IZFH-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s16) 1057 ; RV64IZFH-NEXT: $x10 = COPY [[ANYEXT]](s64) 1058 ; RV64IZFH-NEXT: PseudoCALL target-flags(riscv-call) @callee_half_return_stack2, csr_ilp32f_lp64f, implicit-def $x1, implicit $f10_h, implicit $f11_h, implicit $f12_h, implicit $f13_h, implicit $f14_h, implicit $f15_h, implicit $f16_h, implicit $f17_h, implicit $x10, implicit-def $f10_h 1059 ; RV64IZFH-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2 1060 ; RV64IZFH-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY $f10_h 1061 ; RV64IZFH-NEXT: $f10_h = COPY [[COPY2]](s16) 1062 ; RV64IZFH-NEXT: PseudoRET implicit $f10_h 1063 %z = call half @callee_half_return_stack2(half %x, half 1.0, half %x, half 3.0, half %x, half %y, half %y, half %y, half %x) 1064 ret half %z 1065} 1066