1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: llc < %s --mtriple=xtensa | FileCheck %s 3 4define void @vararg(...) { 5; CHECK-LABEL: vararg: 6; CHECK: .cfi_startproc 7; CHECK-NEXT: # %bb.0: # %entry 8; CHECK-NEXT: addi a8, a1, -32 9; CHECK-NEXT: or a1, a8, a8 10; CHECK-NEXT: .cfi_def_cfa_offset 32 11; CHECK-NEXT: s32i a7, a1, 20 12; CHECK-NEXT: s32i a6, a1, 16 13; CHECK-NEXT: s32i a5, a1, 12 14; CHECK-NEXT: s32i a4, a1, 8 15; CHECK-NEXT: s32i a3, a1, 4 16; CHECK-NEXT: s32i a2, a1, 0 17; CHECK-NEXT: addi a8, a1, 32 18; CHECK-NEXT: or a1, a8, a8 19; CHECK-NEXT: ret 20entry: 21 ret void 22} 23 24declare void @llvm.va_start(ptr) nounwind 25declare void @llvm.va_end(ptr) nounwind 26declare void @f_i32(i32) nounwind 27declare void @f_i64(i64) nounwind 28 29define void @vararg_fixed_0(...) nounwind { 30; CHECK-LABEL: vararg_fixed_0: 31; CHECK: # %bb.0: # %entry 32; CHECK-NEXT: addi a8, a1, -48 33; CHECK-NEXT: or a1, a8, a8 34; CHECK-NEXT: s32i a0, a1, 8 # 4-byte Folded Spill 35; CHECK-NEXT: s32i a12, a1, 4 # 4-byte Folded Spill 36; CHECK-NEXT: s32i a7, a1, 32 37; CHECK-NEXT: s32i a6, a1, 28 38; CHECK-NEXT: s32i a5, a1, 24 39; CHECK-NEXT: s32i a4, a1, 20 40; CHECK-NEXT: s32i a3, a1, 16 41; CHECK-NEXT: s32i a2, a1, 12 42; CHECK-NEXT: addi a10, a1, 12 43; CHECK-NEXT: s32i a10, a1, 4 44; CHECK-NEXT: addi a8, a1, 48 45; CHECK-NEXT: addi a8, a8, -32 46; CHECK-NEXT: s32i a8, a1, 0 47; CHECK-NEXT: movi a9, 4 48; CHECK-NEXT: movi a12, 24 49; CHECK-NEXT: blt a12, a9, .LBB1_2 50; CHECK-NEXT: # %bb.1: # %entry 51; CHECK-NEXT: or a8, a10, a10 52; CHECK-NEXT: .LBB1_2: # %entry 53; CHECK-NEXT: bge a12, a9, .LBB1_4 54; CHECK-NEXT: # %bb.3: 55; CHECK-NEXT: movi a9, 40 56; CHECK-NEXT: .LBB1_4: # %entry 57; CHECK-NEXT: s32i a9, a1, 8 58; CHECK-NEXT: add a8, a9, a8 59; CHECK-NEXT: addi a8, a8, -4 60; CHECK-NEXT: l32i a2, a8, 0 61; CHECK-NEXT: l32r a8, .LCPI1_0 62; CHECK-NEXT: callx0 a8 63; CHECK-NEXT: l32i a7, a1, 8 64; CHECK-NEXT: addi a10, a7, 4 65; CHECK-NEXT: l32i a9, a1, 4 66; CHECK-NEXT: l32i a8, a1, 0 67; CHECK-NEXT: or a11, a8, a8 68; CHECK-NEXT: blt a12, a10, .LBB1_6 69; CHECK-NEXT: # %bb.5: # %entry 70; CHECK-NEXT: or a11, a9, a9 71; CHECK-NEXT: .LBB1_6: # %entry 72; CHECK-NEXT: bge a12, a10, .LBB1_8 73; CHECK-NEXT: # %bb.7: 74; CHECK-NEXT: addi a10, a7, 40 75; CHECK-NEXT: .LBB1_8: # %entry 76; CHECK-NEXT: s32i a10, a1, 8 77; CHECK-NEXT: add a10, a10, a11 78; CHECK-NEXT: addi a7, a10, -4 79; CHECK-NEXT: l32i a11, a1, 8 80; CHECK-NEXT: addi a10, a11, 4 81; CHECK-NEXT: blt a12, a10, .LBB1_10 82; CHECK-NEXT: # %bb.9: # %entry 83; CHECK-NEXT: or a8, a9, a9 84; CHECK-NEXT: .LBB1_10: # %entry 85; CHECK-NEXT: l32i a2, a7, 0 86; CHECK-NEXT: bge a12, a10, .LBB1_12 87; CHECK-NEXT: # %bb.11: 88; CHECK-NEXT: addi a10, a11, 40 89; CHECK-NEXT: .LBB1_12: # %entry 90; CHECK-NEXT: s32i a10, a1, 8 91; CHECK-NEXT: add a8, a10, a8 92; CHECK-NEXT: addi a8, a8, -4 93; CHECK-NEXT: l32i a3, a8, 0 94; CHECK-NEXT: l32r a8, .LCPI1_1 95; CHECK-NEXT: callx0 a8 96; CHECK-NEXT: l32i a12, a1, 4 # 4-byte Folded Reload 97; CHECK-NEXT: l32i a0, a1, 8 # 4-byte Folded Reload 98; CHECK-NEXT: addi a8, a1, 48 99; CHECK-NEXT: or a1, a8, a8 100; CHECK-NEXT: ret 101entry: 102 %list = alloca ptr, align 4 103 call void @llvm.va_start(ptr %list) 104 105 %0 = va_arg ptr %list, i32 106 call void @f_i32(i32 %0) 107 %1 = va_arg ptr %list, i64 108 call void @f_i64(i64 %1) 109 110 call void @llvm.va_end(ptr %list) 111 ret void 112} 113 114define void @vararg_fixed_1(i32 %a1, ...) nounwind { 115; CHECK-LABEL: vararg_fixed_1: 116; CHECK: # %bb.0: # %entry 117; CHECK-NEXT: addi a8, a1, -32 118; CHECK-NEXT: or a1, a8, a8 119; CHECK-NEXT: s32i a0, a1, 8 # 4-byte Folded Spill 120; CHECK-NEXT: s32i a12, a1, 4 # 4-byte Folded Spill 121; CHECK-NEXT: s32i a7, a1, 28 122; CHECK-NEXT: s32i a6, a1, 24 123; CHECK-NEXT: s32i a5, a1, 20 124; CHECK-NEXT: s32i a4, a1, 16 125; CHECK-NEXT: s32i a3, a1, 12 126; CHECK-NEXT: addi a10, a1, 12 127; CHECK-NEXT: s32i a10, a1, 4 128; CHECK-NEXT: addi a8, a1, 32 129; CHECK-NEXT: addi a8, a8, -32 130; CHECK-NEXT: s32i a8, a1, 0 131; CHECK-NEXT: movi a9, 8 132; CHECK-NEXT: movi a12, 24 133; CHECK-NEXT: blt a12, a9, .LBB2_2 134; CHECK-NEXT: # %bb.1: # %entry 135; CHECK-NEXT: or a8, a10, a10 136; CHECK-NEXT: .LBB2_2: # %entry 137; CHECK-NEXT: bge a12, a9, .LBB2_4 138; CHECK-NEXT: # %bb.3: 139; CHECK-NEXT: movi a9, 44 140; CHECK-NEXT: .LBB2_4: # %entry 141; CHECK-NEXT: s32i a9, a1, 8 142; CHECK-NEXT: add a8, a9, a8 143; CHECK-NEXT: addi a8, a8, -4 144; CHECK-NEXT: l32i a8, a8, 0 145; CHECK-NEXT: add a2, a8, a2 146; CHECK-NEXT: l32r a8, .LCPI2_0 147; CHECK-NEXT: callx0 a8 148; CHECK-NEXT: l32i a7, a1, 8 149; CHECK-NEXT: addi a10, a7, 4 150; CHECK-NEXT: l32i a9, a1, 4 151; CHECK-NEXT: l32i a8, a1, 0 152; CHECK-NEXT: or a11, a8, a8 153; CHECK-NEXT: blt a12, a10, .LBB2_6 154; CHECK-NEXT: # %bb.5: # %entry 155; CHECK-NEXT: or a11, a9, a9 156; CHECK-NEXT: .LBB2_6: # %entry 157; CHECK-NEXT: bge a12, a10, .LBB2_8 158; CHECK-NEXT: # %bb.7: 159; CHECK-NEXT: addi a10, a7, 40 160; CHECK-NEXT: .LBB2_8: # %entry 161; CHECK-NEXT: s32i a10, a1, 8 162; CHECK-NEXT: add a10, a10, a11 163; CHECK-NEXT: addi a7, a10, -4 164; CHECK-NEXT: l32i a11, a1, 8 165; CHECK-NEXT: addi a10, a11, 4 166; CHECK-NEXT: blt a12, a10, .LBB2_10 167; CHECK-NEXT: # %bb.9: # %entry 168; CHECK-NEXT: or a8, a9, a9 169; CHECK-NEXT: .LBB2_10: # %entry 170; CHECK-NEXT: l32i a2, a7, 0 171; CHECK-NEXT: bge a12, a10, .LBB2_12 172; CHECK-NEXT: # %bb.11: 173; CHECK-NEXT: addi a10, a11, 40 174; CHECK-NEXT: .LBB2_12: # %entry 175; CHECK-NEXT: s32i a10, a1, 8 176; CHECK-NEXT: add a8, a10, a8 177; CHECK-NEXT: addi a8, a8, -4 178; CHECK-NEXT: l32i a3, a8, 0 179; CHECK-NEXT: l32r a8, .LCPI2_1 180; CHECK-NEXT: callx0 a8 181; CHECK-NEXT: l32i a12, a1, 4 # 4-byte Folded Reload 182; CHECK-NEXT: l32i a0, a1, 8 # 4-byte Folded Reload 183; CHECK-NEXT: addi a8, a1, 32 184; CHECK-NEXT: or a1, a8, a8 185; CHECK-NEXT: ret 186entry: 187 %list = alloca ptr, align 4 188 call void @llvm.va_start(ptr %list) 189 190 %va32 = va_arg ptr %list, i32 191 %sum = add nsw i32 %va32, %a1 192 call void @f_i32(i32 %sum) 193 194 %va64 = va_arg ptr %list, i64 195 call void @f_i64(i64 %va64) 196 197 call void @llvm.va_end(ptr %list) 198 ret void 199} 200 201define void @vararg_fixed_4(i32 %a1, i32 %a2, i32 %a3, i32 %a4, ...) nounwind { 202; CHECK-LABEL: vararg_fixed_4: 203; CHECK: # %bb.0: # %entry 204; CHECK-NEXT: addi a8, a1, -32 205; CHECK-NEXT: or a1, a8, a8 206; CHECK-NEXT: s32i a0, a1, 8 # 4-byte Folded Spill 207; CHECK-NEXT: s32i a12, a1, 4 # 4-byte Folded Spill 208; CHECK-NEXT: s32i a7, a1, 16 209; CHECK-NEXT: s32i a6, a1, 12 210; CHECK-NEXT: addi a10, a1, 12 211; CHECK-NEXT: s32i a10, a1, 4 212; CHECK-NEXT: addi a8, a1, 32 213; CHECK-NEXT: addi a8, a8, -32 214; CHECK-NEXT: s32i a8, a1, 0 215; CHECK-NEXT: movi a9, 20 216; CHECK-NEXT: movi a12, 24 217; CHECK-NEXT: blt a12, a9, .LBB3_2 218; CHECK-NEXT: # %bb.1: # %entry 219; CHECK-NEXT: or a8, a10, a10 220; CHECK-NEXT: .LBB3_2: # %entry 221; CHECK-NEXT: bge a12, a9, .LBB3_4 222; CHECK-NEXT: # %bb.3: 223; CHECK-NEXT: movi a9, 56 224; CHECK-NEXT: .LBB3_4: # %entry 225; CHECK-NEXT: s32i a9, a1, 8 226; CHECK-NEXT: add a8, a9, a8 227; CHECK-NEXT: addi a8, a8, -4 228; CHECK-NEXT: l32i a8, a8, 0 229; CHECK-NEXT: add a2, a8, a2 230; CHECK-NEXT: l32r a8, .LCPI3_0 231; CHECK-NEXT: callx0 a8 232; CHECK-NEXT: l32i a7, a1, 8 233; CHECK-NEXT: addi a10, a7, 4 234; CHECK-NEXT: l32i a9, a1, 4 235; CHECK-NEXT: l32i a8, a1, 0 236; CHECK-NEXT: or a11, a8, a8 237; CHECK-NEXT: blt a12, a10, .LBB3_6 238; CHECK-NEXT: # %bb.5: # %entry 239; CHECK-NEXT: or a11, a9, a9 240; CHECK-NEXT: .LBB3_6: # %entry 241; CHECK-NEXT: bge a12, a10, .LBB3_8 242; CHECK-NEXT: # %bb.7: 243; CHECK-NEXT: addi a10, a7, 40 244; CHECK-NEXT: .LBB3_8: # %entry 245; CHECK-NEXT: s32i a10, a1, 8 246; CHECK-NEXT: add a10, a10, a11 247; CHECK-NEXT: addi a7, a10, -4 248; CHECK-NEXT: l32i a11, a1, 8 249; CHECK-NEXT: addi a10, a11, 4 250; CHECK-NEXT: blt a12, a10, .LBB3_10 251; CHECK-NEXT: # %bb.9: # %entry 252; CHECK-NEXT: or a8, a9, a9 253; CHECK-NEXT: .LBB3_10: # %entry 254; CHECK-NEXT: l32i a2, a7, 0 255; CHECK-NEXT: bge a12, a10, .LBB3_12 256; CHECK-NEXT: # %bb.11: 257; CHECK-NEXT: addi a10, a11, 40 258; CHECK-NEXT: .LBB3_12: # %entry 259; CHECK-NEXT: s32i a10, a1, 8 260; CHECK-NEXT: add a8, a10, a8 261; CHECK-NEXT: addi a8, a8, -4 262; CHECK-NEXT: l32i a3, a8, 0 263; CHECK-NEXT: l32r a8, .LCPI3_1 264; CHECK-NEXT: callx0 a8 265; CHECK-NEXT: l32i a12, a1, 4 # 4-byte Folded Reload 266; CHECK-NEXT: l32i a0, a1, 8 # 4-byte Folded Reload 267; CHECK-NEXT: addi a8, a1, 32 268; CHECK-NEXT: or a1, a8, a8 269; CHECK-NEXT: ret 270entry: 271 %list = alloca ptr, align 4 272 call void @llvm.va_start(ptr %list) 273 274 %va32 = va_arg ptr %list, i32 275 %sum = add nsw i32 %va32, %a1 276 call void @f_i32(i32 %sum) 277 278 %va64 = va_arg ptr %list, i64 279 call void @f_i64(i64 %va64) 280 281 call void @llvm.va_end(ptr %list) 282 ret void 283} 284 285define void @vararg_fixed_5(i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, ...) nounwind { 286; CHECK-LABEL: vararg_fixed_5: 287; CHECK: # %bb.0: # %entry 288; CHECK-NEXT: addi a8, a1, -16 289; CHECK-NEXT: or a1, a8, a8 290; CHECK-NEXT: s32i a0, a1, 8 # 4-byte Folded Spill 291; CHECK-NEXT: s32i a12, a1, 4 # 4-byte Folded Spill 292; CHECK-NEXT: s32i a7, a1, 12 293; CHECK-NEXT: addi a9, a1, 12 294; CHECK-NEXT: s32i a9, a1, 4 295; CHECK-NEXT: addi a8, a1, 16 296; CHECK-NEXT: addi a8, a8, -32 297; CHECK-NEXT: s32i a8, a1, 0 298; CHECK-NEXT: movi a12, 24 299; CHECK-NEXT: blt a12, a12, .LBB4_2 300; CHECK-NEXT: # %bb.1: # %entry 301; CHECK-NEXT: or a8, a9, a9 302; CHECK-NEXT: .LBB4_2: # %entry 303; CHECK-NEXT: blt a12, a12, .LBB4_4 304; CHECK-NEXT: # %bb.3: # %entry 305; CHECK-NEXT: or a9, a12, a12 306; CHECK-NEXT: j .LBB4_5 307; CHECK-NEXT: .LBB4_4: 308; CHECK-NEXT: movi a9, 60 309; CHECK-NEXT: .LBB4_5: # %entry 310; CHECK-NEXT: s32i a9, a1, 8 311; CHECK-NEXT: add a8, a9, a8 312; CHECK-NEXT: addi a8, a8, -4 313; CHECK-NEXT: l32i a8, a8, 0 314; CHECK-NEXT: add a2, a8, a2 315; CHECK-NEXT: l32r a8, .LCPI4_0 316; CHECK-NEXT: callx0 a8 317; CHECK-NEXT: l32i a7, a1, 8 318; CHECK-NEXT: addi a10, a7, 4 319; CHECK-NEXT: l32i a9, a1, 4 320; CHECK-NEXT: l32i a8, a1, 0 321; CHECK-NEXT: or a11, a8, a8 322; CHECK-NEXT: blt a12, a10, .LBB4_7 323; CHECK-NEXT: # %bb.6: # %entry 324; CHECK-NEXT: or a11, a9, a9 325; CHECK-NEXT: .LBB4_7: # %entry 326; CHECK-NEXT: bge a12, a10, .LBB4_9 327; CHECK-NEXT: # %bb.8: 328; CHECK-NEXT: addi a10, a7, 40 329; CHECK-NEXT: .LBB4_9: # %entry 330; CHECK-NEXT: s32i a10, a1, 8 331; CHECK-NEXT: add a10, a10, a11 332; CHECK-NEXT: addi a7, a10, -4 333; CHECK-NEXT: l32i a11, a1, 8 334; CHECK-NEXT: addi a10, a11, 4 335; CHECK-NEXT: blt a12, a10, .LBB4_11 336; CHECK-NEXT: # %bb.10: # %entry 337; CHECK-NEXT: or a8, a9, a9 338; CHECK-NEXT: .LBB4_11: # %entry 339; CHECK-NEXT: l32i a2, a7, 0 340; CHECK-NEXT: bge a12, a10, .LBB4_13 341; CHECK-NEXT: # %bb.12: 342; CHECK-NEXT: addi a10, a11, 40 343; CHECK-NEXT: .LBB4_13: # %entry 344; CHECK-NEXT: s32i a10, a1, 8 345; CHECK-NEXT: add a8, a10, a8 346; CHECK-NEXT: addi a8, a8, -4 347; CHECK-NEXT: l32i a3, a8, 0 348; CHECK-NEXT: l32r a8, .LCPI4_1 349; CHECK-NEXT: callx0 a8 350; CHECK-NEXT: l32i a12, a1, 4 # 4-byte Folded Reload 351; CHECK-NEXT: l32i a0, a1, 8 # 4-byte Folded Reload 352; CHECK-NEXT: addi a8, a1, 16 353; CHECK-NEXT: or a1, a8, a8 354; CHECK-NEXT: ret 355entry: 356 %list = alloca ptr, align 4 357 call void @llvm.va_start(ptr %list) 358 359 %va32 = va_arg ptr %list, i32 360 %sum = add nsw i32 %va32, %a1 361 call void @f_i32(i32 %sum) 362 363 %va64 = va_arg ptr %list, i64 364 call void @f_i64(i64 %va64) 365 366 call void @llvm.va_end(ptr %list) 367 ret void 368} 369 370define void @vararg_fixed_6(i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, i32 %a6, ...) nounwind { 371; CHECK-LABEL: vararg_fixed_6: 372; CHECK: # %bb.0: # %entry 373; CHECK-NEXT: addi a8, a1, -16 374; CHECK-NEXT: or a1, a8, a8 375; CHECK-NEXT: s32i a0, a1, 8 # 4-byte Folded Spill 376; CHECK-NEXT: s32i a12, a1, 4 # 4-byte Folded Spill 377; CHECK-NEXT: addi a10, a1, 0 378; CHECK-NEXT: s32i a10, a1, 4 379; CHECK-NEXT: addi a8, a1, 16 380; CHECK-NEXT: addi a8, a8, -32 381; CHECK-NEXT: s32i a8, a1, 0 382; CHECK-NEXT: movi a9, 36 383; CHECK-NEXT: movi a12, 24 384; CHECK-NEXT: blt a12, a9, .LBB5_2 385; CHECK-NEXT: # %bb.1: # %entry 386; CHECK-NEXT: or a8, a10, a10 387; CHECK-NEXT: .LBB5_2: # %entry 388; CHECK-NEXT: bge a12, a9, .LBB5_4 389; CHECK-NEXT: # %bb.3: 390; CHECK-NEXT: movi a9, 72 391; CHECK-NEXT: .LBB5_4: # %entry 392; CHECK-NEXT: s32i a9, a1, 8 393; CHECK-NEXT: add a8, a9, a8 394; CHECK-NEXT: addi a8, a8, -4 395; CHECK-NEXT: l32i a8, a8, 0 396; CHECK-NEXT: add a2, a8, a2 397; CHECK-NEXT: l32r a8, .LCPI5_0 398; CHECK-NEXT: callx0 a8 399; CHECK-NEXT: l32i a7, a1, 8 400; CHECK-NEXT: addi a10, a7, 4 401; CHECK-NEXT: l32i a9, a1, 4 402; CHECK-NEXT: l32i a8, a1, 0 403; CHECK-NEXT: or a11, a8, a8 404; CHECK-NEXT: blt a12, a10, .LBB5_6 405; CHECK-NEXT: # %bb.5: # %entry 406; CHECK-NEXT: or a11, a9, a9 407; CHECK-NEXT: .LBB5_6: # %entry 408; CHECK-NEXT: bge a12, a10, .LBB5_8 409; CHECK-NEXT: # %bb.7: 410; CHECK-NEXT: addi a10, a7, 40 411; CHECK-NEXT: .LBB5_8: # %entry 412; CHECK-NEXT: s32i a10, a1, 8 413; CHECK-NEXT: add a10, a10, a11 414; CHECK-NEXT: addi a7, a10, -4 415; CHECK-NEXT: l32i a11, a1, 8 416; CHECK-NEXT: addi a10, a11, 4 417; CHECK-NEXT: blt a12, a10, .LBB5_10 418; CHECK-NEXT: # %bb.9: # %entry 419; CHECK-NEXT: or a8, a9, a9 420; CHECK-NEXT: .LBB5_10: # %entry 421; CHECK-NEXT: l32i a2, a7, 0 422; CHECK-NEXT: bge a12, a10, .LBB5_12 423; CHECK-NEXT: # %bb.11: 424; CHECK-NEXT: addi a10, a11, 40 425; CHECK-NEXT: .LBB5_12: # %entry 426; CHECK-NEXT: s32i a10, a1, 8 427; CHECK-NEXT: add a8, a10, a8 428; CHECK-NEXT: addi a8, a8, -4 429; CHECK-NEXT: l32i a3, a8, 0 430; CHECK-NEXT: l32r a8, .LCPI5_1 431; CHECK-NEXT: callx0 a8 432; CHECK-NEXT: l32i a12, a1, 4 # 4-byte Folded Reload 433; CHECK-NEXT: l32i a0, a1, 8 # 4-byte Folded Reload 434; CHECK-NEXT: addi a8, a1, 16 435; CHECK-NEXT: or a1, a8, a8 436; CHECK-NEXT: ret 437entry: 438 %list = alloca ptr, align 4 439 call void @llvm.va_start(ptr %list) 440 441 %va32 = va_arg ptr %list, i32 442 %sum = add nsw i32 %va32, %a1 443 call void @f_i32(i32 %sum) 444 445 %va64 = va_arg ptr %list, i64 446 call void @f_i64(i64 %va64) 447 448 call void @llvm.va_end(ptr %list) 449 ret void 450} 451 452define void @vararg_fixed_7(i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, i32 %a6, i32 %a7, ...) nounwind { 453; CHECK-LABEL: vararg_fixed_7: 454; CHECK: # %bb.0: # %entry 455; CHECK-NEXT: addi a8, a1, -16 456; CHECK-NEXT: or a1, a8, a8 457; CHECK-NEXT: s32i a0, a1, 8 # 4-byte Folded Spill 458; CHECK-NEXT: s32i a12, a1, 4 # 4-byte Folded Spill 459; CHECK-NEXT: addi a10, a1, 0 460; CHECK-NEXT: s32i a10, a1, 4 461; CHECK-NEXT: addi a8, a1, 20 462; CHECK-NEXT: addi a8, a8, -32 463; CHECK-NEXT: s32i a8, a1, 0 464; CHECK-NEXT: movi a9, 36 465; CHECK-NEXT: movi a12, 24 466; CHECK-NEXT: blt a12, a9, .LBB6_2 467; CHECK-NEXT: # %bb.1: # %entry 468; CHECK-NEXT: or a8, a10, a10 469; CHECK-NEXT: .LBB6_2: # %entry 470; CHECK-NEXT: bge a12, a9, .LBB6_4 471; CHECK-NEXT: # %bb.3: 472; CHECK-NEXT: movi a9, 72 473; CHECK-NEXT: .LBB6_4: # %entry 474; CHECK-NEXT: s32i a9, a1, 8 475; CHECK-NEXT: add a8, a9, a8 476; CHECK-NEXT: addi a8, a8, -4 477; CHECK-NEXT: l32i a8, a8, 0 478; CHECK-NEXT: add a2, a8, a2 479; CHECK-NEXT: l32r a8, .LCPI6_0 480; CHECK-NEXT: callx0 a8 481; CHECK-NEXT: l32i a7, a1, 8 482; CHECK-NEXT: addi a10, a7, 4 483; CHECK-NEXT: l32i a9, a1, 4 484; CHECK-NEXT: l32i a8, a1, 0 485; CHECK-NEXT: or a11, a8, a8 486; CHECK-NEXT: blt a12, a10, .LBB6_6 487; CHECK-NEXT: # %bb.5: # %entry 488; CHECK-NEXT: or a11, a9, a9 489; CHECK-NEXT: .LBB6_6: # %entry 490; CHECK-NEXT: bge a12, a10, .LBB6_8 491; CHECK-NEXT: # %bb.7: 492; CHECK-NEXT: addi a10, a7, 40 493; CHECK-NEXT: .LBB6_8: # %entry 494; CHECK-NEXT: s32i a10, a1, 8 495; CHECK-NEXT: add a10, a10, a11 496; CHECK-NEXT: addi a7, a10, -4 497; CHECK-NEXT: l32i a11, a1, 8 498; CHECK-NEXT: addi a10, a11, 4 499; CHECK-NEXT: blt a12, a10, .LBB6_10 500; CHECK-NEXT: # %bb.9: # %entry 501; CHECK-NEXT: or a8, a9, a9 502; CHECK-NEXT: .LBB6_10: # %entry 503; CHECK-NEXT: l32i a2, a7, 0 504; CHECK-NEXT: bge a12, a10, .LBB6_12 505; CHECK-NEXT: # %bb.11: 506; CHECK-NEXT: addi a10, a11, 40 507; CHECK-NEXT: .LBB6_12: # %entry 508; CHECK-NEXT: s32i a10, a1, 8 509; CHECK-NEXT: add a8, a10, a8 510; CHECK-NEXT: addi a8, a8, -4 511; CHECK-NEXT: l32i a3, a8, 0 512; CHECK-NEXT: l32r a8, .LCPI6_1 513; CHECK-NEXT: callx0 a8 514; CHECK-NEXT: l32i a12, a1, 4 # 4-byte Folded Reload 515; CHECK-NEXT: l32i a0, a1, 8 # 4-byte Folded Reload 516; CHECK-NEXT: addi a8, a1, 16 517; CHECK-NEXT: or a1, a8, a8 518; CHECK-NEXT: ret 519entry: 520 %list = alloca ptr, align 4 521 call void @llvm.va_start(ptr %list) 522 523 %va32 = va_arg ptr %list, i32 524 %sum = add nsw i32 %va32, %a1 525 call void @f_i32(i32 %sum) 526 527 %va64 = va_arg ptr %list, i64 528 call void @f_i64(i64 %va64) 529 530 call void @llvm.va_end(ptr %list) 531 ret void 532} 533