1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -stop-after=irtranslator -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32 3 4 5define signext i8 @sext_arg_i8(i8 signext %a) { 6 ; MIPS32-LABEL: name: sext_arg_i8 7 ; MIPS32: bb.1.entry: 8 ; MIPS32-NEXT: liveins: $a0 9 ; MIPS32-NEXT: {{ $}} 10 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 11 ; MIPS32-NEXT: [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY]], 8 12 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_SEXT]](s32) 13 ; MIPS32-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s8) 14 ; MIPS32-NEXT: $v0 = COPY [[SEXT]](s32) 15 ; MIPS32-NEXT: RetRA implicit $v0 16entry: 17 ret i8 %a 18} 19 20define zeroext i8 @zext_arg_i8(i8 zeroext %a) { 21 ; MIPS32-LABEL: name: zext_arg_i8 22 ; MIPS32: bb.1.entry: 23 ; MIPS32-NEXT: liveins: $a0 24 ; MIPS32-NEXT: {{ $}} 25 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 26 ; MIPS32-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 8 27 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_ZEXT]](s32) 28 ; MIPS32-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s8) 29 ; MIPS32-NEXT: $v0 = COPY [[ZEXT]](s32) 30 ; MIPS32-NEXT: RetRA implicit $v0 31entry: 32 ret i8 %a 33} 34 35define i8 @aext_arg_i8(i8 %a) { 36 ; MIPS32-LABEL: name: aext_arg_i8 37 ; MIPS32: bb.1.entry: 38 ; MIPS32-NEXT: liveins: $a0 39 ; MIPS32-NEXT: {{ $}} 40 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 41 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32) 42 ; MIPS32-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8) 43 ; MIPS32-NEXT: $v0 = COPY [[ANYEXT]](s32) 44 ; MIPS32-NEXT: RetRA implicit $v0 45entry: 46 ret i8 %a 47} 48 49declare signext i8 @sext_stack_arg_i8(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i8 %a) 50declare zeroext i8 @zext_stack_arg_i8(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i8 %a) 51declare i8 @aext_stack_arg_i8(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i8 %a) 52 53define signext i8 @call_sext_stack_arg_i8(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i8 signext %a) { 54 ; MIPS32-LABEL: name: call_sext_stack_arg_i8 55 ; MIPS32: bb.1.entry: 56 ; MIPS32-NEXT: liveins: $a0, $a1, $a2, $a3 57 ; MIPS32-NEXT: {{ $}} 58 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 59 ; MIPS32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1 60 ; MIPS32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2 61 ; MIPS32-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3 62 ; MIPS32-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0 63 ; MIPS32-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 8) 64 ; MIPS32-NEXT: [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[LOAD]], 8 65 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_SEXT]](s32) 66 ; MIPS32-NEXT: ADJCALLSTACKDOWN 24, 0, implicit-def $sp, implicit $sp 67 ; MIPS32-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s8) 68 ; MIPS32-NEXT: [[COPY4:%[0-9]+]]:_(p0) = COPY $sp 69 ; MIPS32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 70 ; MIPS32-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY4]], [[C]](s32) 71 ; MIPS32-NEXT: G_STORE [[SEXT]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack + 16, align 8) 72 ; MIPS32-NEXT: $a0 = COPY [[COPY]](s32) 73 ; MIPS32-NEXT: $a1 = COPY [[COPY1]](s32) 74 ; MIPS32-NEXT: $a2 = COPY [[COPY2]](s32) 75 ; MIPS32-NEXT: $a3 = COPY [[COPY3]](s32) 76 ; MIPS32-NEXT: JAL @sext_stack_arg_i8, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit $a1, implicit $a2, implicit $a3, implicit-def $v0 77 ; MIPS32-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $v0 78 ; MIPS32-NEXT: [[ASSERT_SEXT1:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY5]], 8 79 ; MIPS32-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_SEXT1]](s32) 80 ; MIPS32-NEXT: ADJCALLSTACKUP 24, 0, implicit-def $sp, implicit $sp 81 ; MIPS32-NEXT: [[SEXT1:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC1]](s8) 82 ; MIPS32-NEXT: $v0 = COPY [[SEXT1]](s32) 83 ; MIPS32-NEXT: RetRA implicit $v0 84entry: 85 %call = call signext i8 @sext_stack_arg_i8(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i8 signext %a) 86 ret i8 %call 87} 88 89define zeroext i8 @call_zext_stack_arg_i8(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i8 zeroext %a) { 90 ; MIPS32-LABEL: name: call_zext_stack_arg_i8 91 ; MIPS32: bb.1.entry: 92 ; MIPS32-NEXT: liveins: $a0, $a1, $a2, $a3 93 ; MIPS32-NEXT: {{ $}} 94 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 95 ; MIPS32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1 96 ; MIPS32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2 97 ; MIPS32-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3 98 ; MIPS32-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0 99 ; MIPS32-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 8) 100 ; MIPS32-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[LOAD]], 8 101 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_ZEXT]](s32) 102 ; MIPS32-NEXT: ADJCALLSTACKDOWN 24, 0, implicit-def $sp, implicit $sp 103 ; MIPS32-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s8) 104 ; MIPS32-NEXT: [[COPY4:%[0-9]+]]:_(p0) = COPY $sp 105 ; MIPS32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 106 ; MIPS32-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY4]], [[C]](s32) 107 ; MIPS32-NEXT: G_STORE [[ZEXT]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack + 16, align 8) 108 ; MIPS32-NEXT: $a0 = COPY [[COPY]](s32) 109 ; MIPS32-NEXT: $a1 = COPY [[COPY1]](s32) 110 ; MIPS32-NEXT: $a2 = COPY [[COPY2]](s32) 111 ; MIPS32-NEXT: $a3 = COPY [[COPY3]](s32) 112 ; MIPS32-NEXT: JAL @zext_stack_arg_i8, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit $a1, implicit $a2, implicit $a3, implicit-def $v0 113 ; MIPS32-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $v0 114 ; MIPS32-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY5]], 8 115 ; MIPS32-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_ZEXT1]](s32) 116 ; MIPS32-NEXT: ADJCALLSTACKUP 24, 0, implicit-def $sp, implicit $sp 117 ; MIPS32-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC1]](s8) 118 ; MIPS32-NEXT: $v0 = COPY [[ZEXT1]](s32) 119 ; MIPS32-NEXT: RetRA implicit $v0 120entry: 121 %call = call zeroext i8 @zext_stack_arg_i8(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i8 zeroext %a) 122 ret i8 %call 123} 124 125define i8 @call_aext_stack_arg_i8(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i8 %a) { 126 ; MIPS32-LABEL: name: call_aext_stack_arg_i8 127 ; MIPS32: bb.1.entry: 128 ; MIPS32-NEXT: liveins: $a0, $a1, $a2, $a3 129 ; MIPS32-NEXT: {{ $}} 130 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 131 ; MIPS32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1 132 ; MIPS32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2 133 ; MIPS32-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3 134 ; MIPS32-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0 135 ; MIPS32-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 8) 136 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD]](s32) 137 ; MIPS32-NEXT: ADJCALLSTACKDOWN 24, 0, implicit-def $sp, implicit $sp 138 ; MIPS32-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8) 139 ; MIPS32-NEXT: [[COPY4:%[0-9]+]]:_(p0) = COPY $sp 140 ; MIPS32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 141 ; MIPS32-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY4]], [[C]](s32) 142 ; MIPS32-NEXT: G_STORE [[ANYEXT]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack + 16, align 8) 143 ; MIPS32-NEXT: $a0 = COPY [[COPY]](s32) 144 ; MIPS32-NEXT: $a1 = COPY [[COPY1]](s32) 145 ; MIPS32-NEXT: $a2 = COPY [[COPY2]](s32) 146 ; MIPS32-NEXT: $a3 = COPY [[COPY3]](s32) 147 ; MIPS32-NEXT: JAL @aext_stack_arg_i8, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit $a1, implicit $a2, implicit $a3, implicit-def $v0 148 ; MIPS32-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $v0 149 ; MIPS32-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY5]](s32) 150 ; MIPS32-NEXT: ADJCALLSTACKUP 24, 0, implicit-def $sp, implicit $sp 151 ; MIPS32-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s8) 152 ; MIPS32-NEXT: $v0 = COPY [[ANYEXT1]](s32) 153 ; MIPS32-NEXT: RetRA implicit $v0 154entry: 155 %call = call i8 @aext_stack_arg_i8(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i8 %a) 156 ret i8 %call 157} 158 159 160define signext i16 @sext_arg_i16(i16 signext %a) { 161 ; MIPS32-LABEL: name: sext_arg_i16 162 ; MIPS32: bb.1.entry: 163 ; MIPS32-NEXT: liveins: $a0 164 ; MIPS32-NEXT: {{ $}} 165 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 166 ; MIPS32-NEXT: [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY]], 16 167 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_SEXT]](s32) 168 ; MIPS32-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s16) 169 ; MIPS32-NEXT: $v0 = COPY [[SEXT]](s32) 170 ; MIPS32-NEXT: RetRA implicit $v0 171entry: 172 ret i16 %a 173} 174 175define zeroext i16 @zext_arg_i16(i16 zeroext %a) { 176 ; MIPS32-LABEL: name: zext_arg_i16 177 ; MIPS32: bb.1.entry: 178 ; MIPS32-NEXT: liveins: $a0 179 ; MIPS32-NEXT: {{ $}} 180 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 181 ; MIPS32-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 182 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32) 183 ; MIPS32-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s16) 184 ; MIPS32-NEXT: $v0 = COPY [[ZEXT]](s32) 185 ; MIPS32-NEXT: RetRA implicit $v0 186entry: 187 ret i16 %a 188} 189 190define i16 @aext_arg_i16(i16 %a) { 191 ; MIPS32-LABEL: name: aext_arg_i16 192 ; MIPS32: bb.1.entry: 193 ; MIPS32-NEXT: liveins: $a0 194 ; MIPS32-NEXT: {{ $}} 195 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 196 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 197 ; MIPS32-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 198 ; MIPS32-NEXT: $v0 = COPY [[ANYEXT]](s32) 199 ; MIPS32-NEXT: RetRA implicit $v0 200entry: 201 ret i16 %a 202} 203 204declare signext i16 @sext_stack_arg_i16(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i16 %a) 205declare zeroext i16 @zext_stack_arg_i16(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i16 %a) 206declare i16 @aext_stack_arg_i16(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i16 %a) 207 208define signext i16 @call_sext_stack_arg_i16(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i16 signext %a) { 209 ; MIPS32-LABEL: name: call_sext_stack_arg_i16 210 ; MIPS32: bb.1.entry: 211 ; MIPS32-NEXT: liveins: $a0, $a1, $a2, $a3 212 ; MIPS32-NEXT: {{ $}} 213 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 214 ; MIPS32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1 215 ; MIPS32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2 216 ; MIPS32-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3 217 ; MIPS32-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0 218 ; MIPS32-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 8) 219 ; MIPS32-NEXT: [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[LOAD]], 16 220 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_SEXT]](s32) 221 ; MIPS32-NEXT: ADJCALLSTACKDOWN 24, 0, implicit-def $sp, implicit $sp 222 ; MIPS32-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s16) 223 ; MIPS32-NEXT: [[COPY4:%[0-9]+]]:_(p0) = COPY $sp 224 ; MIPS32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 225 ; MIPS32-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY4]], [[C]](s32) 226 ; MIPS32-NEXT: G_STORE [[SEXT]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack + 16, align 8) 227 ; MIPS32-NEXT: $a0 = COPY [[COPY]](s32) 228 ; MIPS32-NEXT: $a1 = COPY [[COPY1]](s32) 229 ; MIPS32-NEXT: $a2 = COPY [[COPY2]](s32) 230 ; MIPS32-NEXT: $a3 = COPY [[COPY3]](s32) 231 ; MIPS32-NEXT: JAL @sext_stack_arg_i16, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit $a1, implicit $a2, implicit $a3, implicit-def $v0 232 ; MIPS32-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $v0 233 ; MIPS32-NEXT: [[ASSERT_SEXT1:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY5]], 16 234 ; MIPS32-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_SEXT1]](s32) 235 ; MIPS32-NEXT: ADJCALLSTACKUP 24, 0, implicit-def $sp, implicit $sp 236 ; MIPS32-NEXT: [[SEXT1:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC1]](s16) 237 ; MIPS32-NEXT: $v0 = COPY [[SEXT1]](s32) 238 ; MIPS32-NEXT: RetRA implicit $v0 239entry: 240 %call = call signext i16 @sext_stack_arg_i16(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i16 signext %a) 241 ret i16 %call 242} 243 244define zeroext i16 @call_zext_stack_arg_i16(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i16 zeroext %a) { 245 ; MIPS32-LABEL: name: call_zext_stack_arg_i16 246 ; MIPS32: bb.1.entry: 247 ; MIPS32-NEXT: liveins: $a0, $a1, $a2, $a3 248 ; MIPS32-NEXT: {{ $}} 249 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 250 ; MIPS32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1 251 ; MIPS32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2 252 ; MIPS32-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3 253 ; MIPS32-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0 254 ; MIPS32-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 8) 255 ; MIPS32-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[LOAD]], 16 256 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32) 257 ; MIPS32-NEXT: ADJCALLSTACKDOWN 24, 0, implicit-def $sp, implicit $sp 258 ; MIPS32-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s16) 259 ; MIPS32-NEXT: [[COPY4:%[0-9]+]]:_(p0) = COPY $sp 260 ; MIPS32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 261 ; MIPS32-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY4]], [[C]](s32) 262 ; MIPS32-NEXT: G_STORE [[ZEXT]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack + 16, align 8) 263 ; MIPS32-NEXT: $a0 = COPY [[COPY]](s32) 264 ; MIPS32-NEXT: $a1 = COPY [[COPY1]](s32) 265 ; MIPS32-NEXT: $a2 = COPY [[COPY2]](s32) 266 ; MIPS32-NEXT: $a3 = COPY [[COPY3]](s32) 267 ; MIPS32-NEXT: JAL @zext_stack_arg_i16, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit $a1, implicit $a2, implicit $a3, implicit-def $v0 268 ; MIPS32-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $v0 269 ; MIPS32-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY5]], 16 270 ; MIPS32-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32) 271 ; MIPS32-NEXT: ADJCALLSTACKUP 24, 0, implicit-def $sp, implicit $sp 272 ; MIPS32-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC1]](s16) 273 ; MIPS32-NEXT: $v0 = COPY [[ZEXT1]](s32) 274 ; MIPS32-NEXT: RetRA implicit $v0 275entry: 276 %call = call zeroext i16 @zext_stack_arg_i16(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i16 zeroext %a) 277 ret i16 %call 278} 279 280define i16 @call_aext_stack_arg_i16(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i16 %a) { 281 ; MIPS32-LABEL: name: call_aext_stack_arg_i16 282 ; MIPS32: bb.1.entry: 283 ; MIPS32-NEXT: liveins: $a0, $a1, $a2, $a3 284 ; MIPS32-NEXT: {{ $}} 285 ; MIPS32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $a0 286 ; MIPS32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1 287 ; MIPS32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2 288 ; MIPS32-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3 289 ; MIPS32-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0 290 ; MIPS32-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 8) 291 ; MIPS32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[LOAD]](s32) 292 ; MIPS32-NEXT: ADJCALLSTACKDOWN 24, 0, implicit-def $sp, implicit $sp 293 ; MIPS32-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s16) 294 ; MIPS32-NEXT: [[COPY4:%[0-9]+]]:_(p0) = COPY $sp 295 ; MIPS32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 296 ; MIPS32-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY4]], [[C]](s32) 297 ; MIPS32-NEXT: G_STORE [[ANYEXT]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack + 16, align 8) 298 ; MIPS32-NEXT: $a0 = COPY [[COPY]](s32) 299 ; MIPS32-NEXT: $a1 = COPY [[COPY1]](s32) 300 ; MIPS32-NEXT: $a2 = COPY [[COPY2]](s32) 301 ; MIPS32-NEXT: $a3 = COPY [[COPY3]](s32) 302 ; MIPS32-NEXT: JAL @aext_stack_arg_i16, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit $a1, implicit $a2, implicit $a3, implicit-def $v0 303 ; MIPS32-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $v0 304 ; MIPS32-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY5]](s32) 305 ; MIPS32-NEXT: ADJCALLSTACKUP 24, 0, implicit-def $sp, implicit $sp 306 ; MIPS32-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s16) 307 ; MIPS32-NEXT: $v0 = COPY [[ANYEXT1]](s32) 308 ; MIPS32-NEXT: RetRA implicit $v0 309entry: 310 %call = call i16 @aext_stack_arg_i16(i32 %x1, i32 %x2, i32 %x3, i32 %x4, i16 %a) 311 ret i16 %call 312} 313