1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; NOTE: Test functions have been generated by multivalue-stackify.py. 3 4; RUN: llc < %s -verify-machineinstrs -mattr=+multivalue | FileCheck %s 5 6; Test that the multivalue stackification works 7 8target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" 9target triple = "wasm32-unknown-unknown" 10 11declare {i32} @op_0_to_1() 12declare {i32, i32} @op_0_to_2() 13declare {i32, i32, i32} @op_0_to_3() 14declare void @op_1_to_0(i32 %t0) 15declare {i32} @op_1_to_1(i32 %t0) 16declare {i32, i32} @op_1_to_2(i32 %t0) 17declare {i32, i32, i32} @op_1_to_3(i32 %t0) 18declare void @op_2_to_0(i32 %t0, i32 %t1) 19declare {i32} @op_2_to_1(i32 %t0, i32 %t1) 20declare {i32, i32} @op_2_to_2(i32 %t0, i32 %t1) 21declare {i32, i32, i32} @op_2_to_3(i32 %t0, i32 %t1) 22 23define void @f2() { 24; CHECK-LABEL: f2: 25; CHECK: .functype f2 () -> () 26; CHECK-NEXT: # %bb.0: 27; CHECK-NEXT: call op_0_to_2 28; CHECK-NEXT: drop 29; CHECK-NEXT: drop 30; CHECK-NEXT: # fallthrough-return 31 %t0 = call {i32, i32} @op_0_to_2() 32 ret void 33} 34 35define void @f3() { 36; CHECK-LABEL: f3: 37; CHECK: .functype f3 () -> () 38; CHECK-NEXT: # %bb.0: 39; CHECK-NEXT: call op_0_to_3 40; CHECK-NEXT: drop 41; CHECK-NEXT: drop 42; CHECK-NEXT: drop 43; CHECK-NEXT: # fallthrough-return 44 %t0 = call {i32, i32, i32} @op_0_to_3() 45 ret void 46} 47 48define void @f12() { 49; CHECK-LABEL: f12: 50; CHECK: .functype f12 () -> () 51; CHECK-NEXT: # %bb.0: 52; CHECK-NEXT: call op_0_to_2 53; CHECK-NEXT: drop 54; CHECK-NEXT: call op_1_to_0 55; CHECK-NEXT: # fallthrough-return 56 %t0 = call {i32, i32} @op_0_to_2() 57 %t1 = extractvalue {i32, i32} %t0, 0 58 call void @op_1_to_0(i32 %t1) 59 ret void 60} 61 62define void @f13() { 63; CHECK-LABEL: f13: 64; CHECK: .functype f13 () -> () 65; CHECK-NEXT: .local i32 66; CHECK-NEXT: # %bb.0: 67; CHECK-NEXT: call op_0_to_2 68; CHECK-NEXT: local.set 0 69; CHECK-NEXT: drop 70; CHECK-NEXT: local.get 0 71; CHECK-NEXT: call op_1_to_0 72; CHECK-NEXT: # fallthrough-return 73 %t0 = call {i32, i32} @op_0_to_2() 74 %t1 = extractvalue {i32, i32} %t0, 1 75 call void @op_1_to_0(i32 %t1) 76 ret void 77} 78 79define void @f14() { 80; CHECK-LABEL: f14: 81; CHECK: .functype f14 () -> () 82; CHECK-NEXT: .local i32 83; CHECK-NEXT: # %bb.0: 84; CHECK-NEXT: call op_0_to_2 85; CHECK-NEXT: drop 86; CHECK-NEXT: local.tee 0 87; CHECK-NEXT: local.get 0 88; CHECK-NEXT: call op_2_to_0 89; CHECK-NEXT: # fallthrough-return 90 %t0 = call {i32, i32} @op_0_to_2() 91 %t1 = extractvalue {i32, i32} %t0, 0 92 %t2 = extractvalue {i32, i32} %t0, 0 93 call void @op_2_to_0(i32 %t1, i32 %t2) 94 ret void 95} 96 97define void @f15() { 98; CHECK-LABEL: f15: 99; CHECK: .functype f15 () -> () 100; CHECK-NEXT: # %bb.0: 101; CHECK-NEXT: call op_0_to_2 102; CHECK-NEXT: call op_2_to_0 103; CHECK-NEXT: # fallthrough-return 104 %t0 = call {i32, i32} @op_0_to_2() 105 %t1 = extractvalue {i32, i32} %t0, 0 106 %t2 = extractvalue {i32, i32} %t0, 1 107 call void @op_2_to_0(i32 %t1, i32 %t2) 108 ret void 109} 110 111define void @f16() { 112; CHECK-LABEL: f16: 113; CHECK: .functype f16 () -> () 114; CHECK-NEXT: .local i32, i32 115; CHECK-NEXT: # %bb.0: 116; CHECK-NEXT: call op_0_to_2 117; CHECK-NEXT: local.set 1 118; CHECK-NEXT: local.set 0 119; CHECK-NEXT: local.get 1 120; CHECK-NEXT: local.get 0 121; CHECK-NEXT: call op_2_to_0 122; CHECK-NEXT: # fallthrough-return 123 %t0 = call {i32, i32} @op_0_to_2() 124 %t1 = extractvalue {i32, i32} %t0, 1 125 %t2 = extractvalue {i32, i32} %t0, 0 126 call void @op_2_to_0(i32 %t1, i32 %t2) 127 ret void 128} 129 130define void @f17() { 131; CHECK-LABEL: f17: 132; CHECK: .functype f17 () -> () 133; CHECK-NEXT: .local i32 134; CHECK-NEXT: # %bb.0: 135; CHECK-NEXT: call op_0_to_2 136; CHECK-NEXT: local.set 0 137; CHECK-NEXT: drop 138; CHECK-NEXT: local.get 0 139; CHECK-NEXT: local.get 0 140; CHECK-NEXT: call op_2_to_0 141; CHECK-NEXT: # fallthrough-return 142 %t0 = call {i32, i32} @op_0_to_2() 143 %t1 = extractvalue {i32, i32} %t0, 1 144 %t2 = extractvalue {i32, i32} %t0, 1 145 call void @op_2_to_0(i32 %t1, i32 %t2) 146 ret void 147} 148 149define void @f25() { 150; CHECK-LABEL: f25: 151; CHECK: .functype f25 () -> () 152; CHECK-NEXT: # %bb.0: 153; CHECK-NEXT: call op_0_to_3 154; CHECK-NEXT: drop 155; CHECK-NEXT: drop 156; CHECK-NEXT: call op_1_to_0 157; CHECK-NEXT: # fallthrough-return 158 %t0 = call {i32, i32, i32} @op_0_to_3() 159 %t1 = extractvalue {i32, i32, i32} %t0, 0 160 call void @op_1_to_0(i32 %t1) 161 ret void 162} 163 164define void @f26() { 165; CHECK-LABEL: f26: 166; CHECK: .functype f26 () -> () 167; CHECK-NEXT: .local i32 168; CHECK-NEXT: # %bb.0: 169; CHECK-NEXT: call op_0_to_3 170; CHECK-NEXT: drop 171; CHECK-NEXT: local.set 0 172; CHECK-NEXT: drop 173; CHECK-NEXT: local.get 0 174; CHECK-NEXT: call op_1_to_0 175; CHECK-NEXT: # fallthrough-return 176 %t0 = call {i32, i32, i32} @op_0_to_3() 177 %t1 = extractvalue {i32, i32, i32} %t0, 1 178 call void @op_1_to_0(i32 %t1) 179 ret void 180} 181 182define void @f27() { 183; CHECK-LABEL: f27: 184; CHECK: .functype f27 () -> () 185; CHECK-NEXT: .local i32 186; CHECK-NEXT: # %bb.0: 187; CHECK-NEXT: call op_0_to_3 188; CHECK-NEXT: local.set 0 189; CHECK-NEXT: drop 190; CHECK-NEXT: drop 191; CHECK-NEXT: local.get 0 192; CHECK-NEXT: call op_1_to_0 193; CHECK-NEXT: # fallthrough-return 194 %t0 = call {i32, i32, i32} @op_0_to_3() 195 %t1 = extractvalue {i32, i32, i32} %t0, 2 196 call void @op_1_to_0(i32 %t1) 197 ret void 198} 199 200define void @f28() { 201; CHECK-LABEL: f28: 202; CHECK: .functype f28 () -> () 203; CHECK-NEXT: .local i32 204; CHECK-NEXT: # %bb.0: 205; CHECK-NEXT: call op_0_to_3 206; CHECK-NEXT: drop 207; CHECK-NEXT: drop 208; CHECK-NEXT: local.tee 0 209; CHECK-NEXT: local.get 0 210; CHECK-NEXT: call op_2_to_0 211; CHECK-NEXT: # fallthrough-return 212 %t0 = call {i32, i32, i32} @op_0_to_3() 213 %t1 = extractvalue {i32, i32, i32} %t0, 0 214 %t2 = extractvalue {i32, i32, i32} %t0, 0 215 call void @op_2_to_0(i32 %t1, i32 %t2) 216 ret void 217} 218 219define void @f29() { 220; CHECK-LABEL: f29: 221; CHECK: .functype f29 () -> () 222; CHECK-NEXT: # %bb.0: 223; CHECK-NEXT: call op_0_to_3 224; CHECK-NEXT: drop 225; CHECK-NEXT: call op_2_to_0 226; CHECK-NEXT: # fallthrough-return 227 %t0 = call {i32, i32, i32} @op_0_to_3() 228 %t1 = extractvalue {i32, i32, i32} %t0, 0 229 %t2 = extractvalue {i32, i32, i32} %t0, 1 230 call void @op_2_to_0(i32 %t1, i32 %t2) 231 ret void 232} 233 234define void @f30() { 235; CHECK-LABEL: f30: 236; CHECK: .functype f30 () -> () 237; CHECK-NEXT: .local i32 238; CHECK-NEXT: # %bb.0: 239; CHECK-NEXT: call op_0_to_3 240; CHECK-NEXT: local.set 0 241; CHECK-NEXT: drop 242; CHECK-NEXT: local.get 0 243; CHECK-NEXT: call op_2_to_0 244; CHECK-NEXT: # fallthrough-return 245 %t0 = call {i32, i32, i32} @op_0_to_3() 246 %t1 = extractvalue {i32, i32, i32} %t0, 0 247 %t2 = extractvalue {i32, i32, i32} %t0, 2 248 call void @op_2_to_0(i32 %t1, i32 %t2) 249 ret void 250} 251 252define void @f31() { 253; CHECK-LABEL: f31: 254; CHECK: .functype f31 () -> () 255; CHECK-NEXT: .local i32, i32 256; CHECK-NEXT: # %bb.0: 257; CHECK-NEXT: call op_0_to_3 258; CHECK-NEXT: drop 259; CHECK-NEXT: local.set 1 260; CHECK-NEXT: local.set 0 261; CHECK-NEXT: local.get 1 262; CHECK-NEXT: local.get 0 263; CHECK-NEXT: call op_2_to_0 264; CHECK-NEXT: # fallthrough-return 265 %t0 = call {i32, i32, i32} @op_0_to_3() 266 %t1 = extractvalue {i32, i32, i32} %t0, 1 267 %t2 = extractvalue {i32, i32, i32} %t0, 0 268 call void @op_2_to_0(i32 %t1, i32 %t2) 269 ret void 270} 271 272define void @f32() { 273; CHECK-LABEL: f32: 274; CHECK: .functype f32 () -> () 275; CHECK-NEXT: .local i32 276; CHECK-NEXT: # %bb.0: 277; CHECK-NEXT: call op_0_to_3 278; CHECK-NEXT: drop 279; CHECK-NEXT: local.set 0 280; CHECK-NEXT: drop 281; CHECK-NEXT: local.get 0 282; CHECK-NEXT: local.get 0 283; CHECK-NEXT: call op_2_to_0 284; CHECK-NEXT: # fallthrough-return 285 %t0 = call {i32, i32, i32} @op_0_to_3() 286 %t1 = extractvalue {i32, i32, i32} %t0, 1 287 %t2 = extractvalue {i32, i32, i32} %t0, 1 288 call void @op_2_to_0(i32 %t1, i32 %t2) 289 ret void 290} 291 292define void @f33() { 293; CHECK-LABEL: f33: 294; CHECK: .functype f33 () -> () 295; CHECK-NEXT: .local i32, i32 296; CHECK-NEXT: # %bb.0: 297; CHECK-NEXT: call op_0_to_3 298; CHECK-NEXT: local.set 1 299; CHECK-NEXT: local.set 0 300; CHECK-NEXT: drop 301; CHECK-NEXT: local.get 0 302; CHECK-NEXT: local.get 1 303; CHECK-NEXT: call op_2_to_0 304; CHECK-NEXT: # fallthrough-return 305 %t0 = call {i32, i32, i32} @op_0_to_3() 306 %t1 = extractvalue {i32, i32, i32} %t0, 1 307 %t2 = extractvalue {i32, i32, i32} %t0, 2 308 call void @op_2_to_0(i32 %t1, i32 %t2) 309 ret void 310} 311 312define void @f34() { 313; CHECK-LABEL: f34: 314; CHECK: .functype f34 () -> () 315; CHECK-NEXT: .local i32, i32 316; CHECK-NEXT: # %bb.0: 317; CHECK-NEXT: call op_0_to_3 318; CHECK-NEXT: local.set 1 319; CHECK-NEXT: drop 320; CHECK-NEXT: local.set 0 321; CHECK-NEXT: local.get 1 322; CHECK-NEXT: local.get 0 323; CHECK-NEXT: call op_2_to_0 324; CHECK-NEXT: # fallthrough-return 325 %t0 = call {i32, i32, i32} @op_0_to_3() 326 %t1 = extractvalue {i32, i32, i32} %t0, 2 327 %t2 = extractvalue {i32, i32, i32} %t0, 0 328 call void @op_2_to_0(i32 %t1, i32 %t2) 329 ret void 330} 331 332define void @f35() { 333; CHECK-LABEL: f35: 334; CHECK: .functype f35 () -> () 335; CHECK-NEXT: .local i32, i32 336; CHECK-NEXT: # %bb.0: 337; CHECK-NEXT: call op_0_to_3 338; CHECK-NEXT: local.set 1 339; CHECK-NEXT: local.set 0 340; CHECK-NEXT: drop 341; CHECK-NEXT: local.get 1 342; CHECK-NEXT: local.get 0 343; CHECK-NEXT: call op_2_to_0 344; CHECK-NEXT: # fallthrough-return 345 %t0 = call {i32, i32, i32} @op_0_to_3() 346 %t1 = extractvalue {i32, i32, i32} %t0, 2 347 %t2 = extractvalue {i32, i32, i32} %t0, 1 348 call void @op_2_to_0(i32 %t1, i32 %t2) 349 ret void 350} 351 352define void @f36() { 353; CHECK-LABEL: f36: 354; CHECK: .functype f36 () -> () 355; CHECK-NEXT: .local i32 356; CHECK-NEXT: # %bb.0: 357; CHECK-NEXT: call op_0_to_3 358; CHECK-NEXT: local.set 0 359; CHECK-NEXT: drop 360; CHECK-NEXT: drop 361; CHECK-NEXT: local.get 0 362; CHECK-NEXT: local.get 0 363; CHECK-NEXT: call op_2_to_0 364; CHECK-NEXT: # fallthrough-return 365 %t0 = call {i32, i32, i32} @op_0_to_3() 366 %t1 = extractvalue {i32, i32, i32} %t0, 2 367 %t2 = extractvalue {i32, i32, i32} %t0, 2 368 call void @op_2_to_0(i32 %t1, i32 %t2) 369 ret void 370} 371 372define void @f129() { 373; CHECK-LABEL: f129: 374; CHECK: .functype f129 () -> () 375; CHECK-NEXT: .local i32 376; CHECK-NEXT: # %bb.0: 377; CHECK-NEXT: call op_0_to_2 378; CHECK-NEXT: local.set 0 379; CHECK-NEXT: call op_1_to_0 380; CHECK-NEXT: local.get 0 381; CHECK-NEXT: call op_1_to_0 382; CHECK-NEXT: # fallthrough-return 383 %t0 = call {i32, i32} @op_0_to_2() 384 %t1 = extractvalue {i32, i32} %t0, 0 385 call void @op_1_to_0(i32 %t1) 386 %t2 = extractvalue {i32, i32} %t0, 1 387 call void @op_1_to_0(i32 %t2) 388 ret void 389} 390 391define void @f131() { 392; CHECK-LABEL: f131: 393; CHECK: .functype f131 () -> () 394; CHECK-NEXT: .local i32, i32 395; CHECK-NEXT: # %bb.0: 396; CHECK-NEXT: call op_0_to_2 397; CHECK-NEXT: local.set 0 398; CHECK-NEXT: local.tee 1 399; CHECK-NEXT: call op_1_to_0 400; CHECK-NEXT: local.get 1 401; CHECK-NEXT: local.get 0 402; CHECK-NEXT: call op_2_to_0 403; CHECK-NEXT: # fallthrough-return 404 %t0 = call {i32, i32} @op_0_to_2() 405 %t1 = extractvalue {i32, i32} %t0, 0 406 call void @op_1_to_0(i32 %t1) 407 %t2 = extractvalue {i32, i32} %t0, 0 408 %t3 = extractvalue {i32, i32} %t0, 1 409 call void @op_2_to_0(i32 %t2, i32 %t3) 410 ret void 411} 412 413define void @f132() { 414; CHECK-LABEL: f132: 415; CHECK: .functype f132 () -> () 416; CHECK-NEXT: .local i32, i32 417; CHECK-NEXT: # %bb.0: 418; CHECK-NEXT: call op_0_to_2 419; CHECK-NEXT: local.set 0 420; CHECK-NEXT: local.tee 1 421; CHECK-NEXT: call op_1_to_0 422; CHECK-NEXT: local.get 0 423; CHECK-NEXT: local.get 1 424; CHECK-NEXT: call op_2_to_0 425; CHECK-NEXT: # fallthrough-return 426 %t0 = call {i32, i32} @op_0_to_2() 427 %t1 = extractvalue {i32, i32} %t0, 0 428 call void @op_1_to_0(i32 %t1) 429 %t2 = extractvalue {i32, i32} %t0, 1 430 %t3 = extractvalue {i32, i32} %t0, 0 431 call void @op_2_to_0(i32 %t2, i32 %t3) 432 ret void 433} 434 435define void @f133() { 436; CHECK-LABEL: f133: 437; CHECK: .functype f133 () -> () 438; CHECK-NEXT: .local i32 439; CHECK-NEXT: # %bb.0: 440; CHECK-NEXT: call op_0_to_2 441; CHECK-NEXT: local.set 0 442; CHECK-NEXT: call op_1_to_0 443; CHECK-NEXT: local.get 0 444; CHECK-NEXT: local.get 0 445; CHECK-NEXT: call op_2_to_0 446; CHECK-NEXT: # fallthrough-return 447 %t0 = call {i32, i32} @op_0_to_2() 448 %t1 = extractvalue {i32, i32} %t0, 0 449 call void @op_1_to_0(i32 %t1) 450 %t2 = extractvalue {i32, i32} %t0, 1 451 %t3 = extractvalue {i32, i32} %t0, 1 452 call void @op_2_to_0(i32 %t2, i32 %t3) 453 ret void 454} 455 456define void @f141() { 457; CHECK-LABEL: f141: 458; CHECK: .functype f141 () -> () 459; CHECK-NEXT: .local i32, i32 460; CHECK-NEXT: # %bb.0: 461; CHECK-NEXT: call op_0_to_2 462; CHECK-NEXT: local.set 1 463; CHECK-NEXT: local.set 0 464; CHECK-NEXT: local.get 1 465; CHECK-NEXT: call op_1_to_0 466; CHECK-NEXT: local.get 0 467; CHECK-NEXT: call op_1_to_0 468; CHECK-NEXT: # fallthrough-return 469 %t0 = call {i32, i32} @op_0_to_2() 470 %t1 = extractvalue {i32, i32} %t0, 1 471 call void @op_1_to_0(i32 %t1) 472 %t2 = extractvalue {i32, i32} %t0, 0 473 call void @op_1_to_0(i32 %t2) 474 ret void 475} 476 477define void @f143() { 478; CHECK-LABEL: f143: 479; CHECK: .functype f143 () -> () 480; CHECK-NEXT: .local i32, i32 481; CHECK-NEXT: # %bb.0: 482; CHECK-NEXT: call op_0_to_2 483; CHECK-NEXT: local.set 1 484; CHECK-NEXT: local.set 0 485; CHECK-NEXT: local.get 1 486; CHECK-NEXT: call op_1_to_0 487; CHECK-NEXT: local.get 0 488; CHECK-NEXT: local.get 0 489; CHECK-NEXT: call op_2_to_0 490; CHECK-NEXT: # fallthrough-return 491 %t0 = call {i32, i32} @op_0_to_2() 492 %t1 = extractvalue {i32, i32} %t0, 1 493 call void @op_1_to_0(i32 %t1) 494 %t2 = extractvalue {i32, i32} %t0, 0 495 %t3 = extractvalue {i32, i32} %t0, 0 496 call void @op_2_to_0(i32 %t2, i32 %t3) 497 ret void 498} 499 500define void @f144() { 501; CHECK-LABEL: f144: 502; CHECK: .functype f144 () -> () 503; CHECK-NEXT: .local i32, i32 504; CHECK-NEXT: # %bb.0: 505; CHECK-NEXT: call op_0_to_2 506; CHECK-NEXT: local.set 1 507; CHECK-NEXT: local.set 0 508; CHECK-NEXT: local.get 1 509; CHECK-NEXT: call op_1_to_0 510; CHECK-NEXT: local.get 0 511; CHECK-NEXT: local.get 1 512; CHECK-NEXT: call op_2_to_0 513; CHECK-NEXT: # fallthrough-return 514 %t0 = call {i32, i32} @op_0_to_2() 515 %t1 = extractvalue {i32, i32} %t0, 1 516 call void @op_1_to_0(i32 %t1) 517 %t2 = extractvalue {i32, i32} %t0, 0 518 %t3 = extractvalue {i32, i32} %t0, 1 519 call void @op_2_to_0(i32 %t2, i32 %t3) 520 ret void 521} 522 523define void @f145() { 524; CHECK-LABEL: f145: 525; CHECK: .functype f145 () -> () 526; CHECK-NEXT: .local i32, i32 527; CHECK-NEXT: # %bb.0: 528; CHECK-NEXT: call op_0_to_2 529; CHECK-NEXT: local.set 1 530; CHECK-NEXT: local.set 0 531; CHECK-NEXT: local.get 1 532; CHECK-NEXT: call op_1_to_0 533; CHECK-NEXT: local.get 1 534; CHECK-NEXT: local.get 0 535; CHECK-NEXT: call op_2_to_0 536; CHECK-NEXT: # fallthrough-return 537 %t0 = call {i32, i32} @op_0_to_2() 538 %t1 = extractvalue {i32, i32} %t0, 1 539 call void @op_1_to_0(i32 %t1) 540 %t2 = extractvalue {i32, i32} %t0, 1 541 %t3 = extractvalue {i32, i32} %t0, 0 542 call void @op_2_to_0(i32 %t2, i32 %t3) 543 ret void 544} 545 546define void @f155() { 547; CHECK-LABEL: f155: 548; CHECK: .functype f155 () -> () 549; CHECK-NEXT: .local i32, i32 550; CHECK-NEXT: # %bb.0: 551; CHECK-NEXT: call op_0_to_2 552; CHECK-NEXT: local.set 0 553; CHECK-NEXT: local.tee 1 554; CHECK-NEXT: local.get 1 555; CHECK-NEXT: call op_2_to_0 556; CHECK-NEXT: local.get 0 557; CHECK-NEXT: call op_1_to_0 558; CHECK-NEXT: # fallthrough-return 559 %t0 = call {i32, i32} @op_0_to_2() 560 %t1 = extractvalue {i32, i32} %t0, 0 561 %t2 = extractvalue {i32, i32} %t0, 0 562 call void @op_2_to_0(i32 %t1, i32 %t2) 563 %t3 = extractvalue {i32, i32} %t0, 1 564 call void @op_1_to_0(i32 %t3) 565 ret void 566} 567 568define void @f159() { 569; CHECK-LABEL: f159: 570; CHECK: .functype f159 () -> () 571; CHECK-NEXT: .local i32, i32 572; CHECK-NEXT: # %bb.0: 573; CHECK-NEXT: call op_0_to_2 574; CHECK-NEXT: local.set 0 575; CHECK-NEXT: local.tee 1 576; CHECK-NEXT: local.get 1 577; CHECK-NEXT: call op_2_to_0 578; CHECK-NEXT: local.get 0 579; CHECK-NEXT: local.get 0 580; CHECK-NEXT: call op_2_to_0 581; CHECK-NEXT: # fallthrough-return 582 %t0 = call {i32, i32} @op_0_to_2() 583 %t1 = extractvalue {i32, i32} %t0, 0 584 %t2 = extractvalue {i32, i32} %t0, 0 585 call void @op_2_to_0(i32 %t1, i32 %t2) 586 %t3 = extractvalue {i32, i32} %t0, 1 587 %t4 = extractvalue {i32, i32} %t0, 1 588 call void @op_2_to_0(i32 %t3, i32 %t4) 589 ret void 590} 591 592define void @f167() { 593; CHECK-LABEL: f167: 594; CHECK: .functype f167 () -> () 595; CHECK-NEXT: .local i32, i32 596; CHECK-NEXT: # %bb.0: 597; CHECK-NEXT: call op_0_to_2 598; CHECK-NEXT: local.set 0 599; CHECK-NEXT: local.tee 1 600; CHECK-NEXT: local.get 0 601; CHECK-NEXT: call op_2_to_0 602; CHECK-NEXT: local.get 1 603; CHECK-NEXT: call op_1_to_0 604; CHECK-NEXT: # fallthrough-return 605 %t0 = call {i32, i32} @op_0_to_2() 606 %t1 = extractvalue {i32, i32} %t0, 0 607 %t2 = extractvalue {i32, i32} %t0, 1 608 call void @op_2_to_0(i32 %t1, i32 %t2) 609 %t3 = extractvalue {i32, i32} %t0, 0 610 call void @op_1_to_0(i32 %t3) 611 ret void 612} 613 614define void @f168() { 615; CHECK-LABEL: f168: 616; CHECK: .functype f168 () -> () 617; CHECK-NEXT: .local i32 618; CHECK-NEXT: # %bb.0: 619; CHECK-NEXT: call op_0_to_2 620; CHECK-NEXT: local.set 0 621; CHECK-NEXT: local.get 0 622; CHECK-NEXT: call op_2_to_0 623; CHECK-NEXT: local.get 0 624; CHECK-NEXT: call op_1_to_0 625; CHECK-NEXT: # fallthrough-return 626 %t0 = call {i32, i32} @op_0_to_2() 627 %t1 = extractvalue {i32, i32} %t0, 0 628 %t2 = extractvalue {i32, i32} %t0, 1 629 call void @op_2_to_0(i32 %t1, i32 %t2) 630 %t3 = extractvalue {i32, i32} %t0, 1 631 call void @op_1_to_0(i32 %t3) 632 ret void 633} 634 635define void @f171() { 636; CHECK-LABEL: f171: 637; CHECK: .functype f171 () -> () 638; CHECK-NEXT: .local i32, i32 639; CHECK-NEXT: # %bb.0: 640; CHECK-NEXT: call op_0_to_2 641; CHECK-NEXT: local.set 0 642; CHECK-NEXT: local.tee 1 643; CHECK-NEXT: local.get 0 644; CHECK-NEXT: call op_2_to_0 645; CHECK-NEXT: local.get 0 646; CHECK-NEXT: local.get 1 647; CHECK-NEXT: call op_2_to_0 648; CHECK-NEXT: # fallthrough-return 649 %t0 = call {i32, i32} @op_0_to_2() 650 %t1 = extractvalue {i32, i32} %t0, 0 651 %t2 = extractvalue {i32, i32} %t0, 1 652 call void @op_2_to_0(i32 %t1, i32 %t2) 653 %t3 = extractvalue {i32, i32} %t0, 1 654 %t4 = extractvalue {i32, i32} %t0, 0 655 call void @op_2_to_0(i32 %t3, i32 %t4) 656 ret void 657} 658 659define void @f180() { 660; CHECK-LABEL: f180: 661; CHECK: .functype f180 () -> () 662; CHECK-NEXT: .local i32, i32 663; CHECK-NEXT: # %bb.0: 664; CHECK-NEXT: call op_0_to_2 665; CHECK-NEXT: local.set 1 666; CHECK-NEXT: local.set 0 667; CHECK-NEXT: local.get 1 668; CHECK-NEXT: local.get 0 669; CHECK-NEXT: call op_2_to_0 670; CHECK-NEXT: local.get 0 671; CHECK-NEXT: call op_1_to_0 672; CHECK-NEXT: # fallthrough-return 673 %t0 = call {i32, i32} @op_0_to_2() 674 %t1 = extractvalue {i32, i32} %t0, 1 675 %t2 = extractvalue {i32, i32} %t0, 0 676 call void @op_2_to_0(i32 %t1, i32 %t2) 677 %t3 = extractvalue {i32, i32} %t0, 0 678 call void @op_1_to_0(i32 %t3) 679 ret void 680} 681 682define void @f181() { 683; CHECK-LABEL: f181: 684; CHECK: .functype f181 () -> () 685; CHECK-NEXT: .local i32, i32 686; CHECK-NEXT: # %bb.0: 687; CHECK-NEXT: call op_0_to_2 688; CHECK-NEXT: local.set 1 689; CHECK-NEXT: local.set 0 690; CHECK-NEXT: local.get 1 691; CHECK-NEXT: local.get 0 692; CHECK-NEXT: call op_2_to_0 693; CHECK-NEXT: local.get 1 694; CHECK-NEXT: call op_1_to_0 695; CHECK-NEXT: # fallthrough-return 696 %t0 = call {i32, i32} @op_0_to_2() 697 %t1 = extractvalue {i32, i32} %t0, 1 698 %t2 = extractvalue {i32, i32} %t0, 0 699 call void @op_2_to_0(i32 %t1, i32 %t2) 700 %t3 = extractvalue {i32, i32} %t0, 1 701 call void @op_1_to_0(i32 %t3) 702 ret void 703} 704 705define void @f183() { 706; CHECK-LABEL: f183: 707; CHECK: .functype f183 () -> () 708; CHECK-NEXT: .local i32, i32 709; CHECK-NEXT: # %bb.0: 710; CHECK-NEXT: call op_0_to_2 711; CHECK-NEXT: local.set 1 712; CHECK-NEXT: local.set 0 713; CHECK-NEXT: local.get 1 714; CHECK-NEXT: local.get 0 715; CHECK-NEXT: call op_2_to_0 716; CHECK-NEXT: local.get 0 717; CHECK-NEXT: local.get 1 718; CHECK-NEXT: call op_2_to_0 719; CHECK-NEXT: # fallthrough-return 720 %t0 = call {i32, i32} @op_0_to_2() 721 %t1 = extractvalue {i32, i32} %t0, 1 722 %t2 = extractvalue {i32, i32} %t0, 0 723 call void @op_2_to_0(i32 %t1, i32 %t2) 724 %t3 = extractvalue {i32, i32} %t0, 0 725 %t4 = extractvalue {i32, i32} %t0, 1 726 call void @op_2_to_0(i32 %t3, i32 %t4) 727 ret void 728} 729 730define void @f193() { 731; CHECK-LABEL: f193: 732; CHECK: .functype f193 () -> () 733; CHECK-NEXT: .local i32, i32 734; CHECK-NEXT: # %bb.0: 735; CHECK-NEXT: call op_0_to_2 736; CHECK-NEXT: local.set 1 737; CHECK-NEXT: local.set 0 738; CHECK-NEXT: local.get 1 739; CHECK-NEXT: local.get 1 740; CHECK-NEXT: call op_2_to_0 741; CHECK-NEXT: local.get 0 742; CHECK-NEXT: call op_1_to_0 743; CHECK-NEXT: # fallthrough-return 744 %t0 = call {i32, i32} @op_0_to_2() 745 %t1 = extractvalue {i32, i32} %t0, 1 746 %t2 = extractvalue {i32, i32} %t0, 1 747 call void @op_2_to_0(i32 %t1, i32 %t2) 748 %t3 = extractvalue {i32, i32} %t0, 0 749 call void @op_1_to_0(i32 %t3) 750 ret void 751} 752 753define void @f195() { 754; CHECK-LABEL: f195: 755; CHECK: .functype f195 () -> () 756; CHECK-NEXT: .local i32, i32 757; CHECK-NEXT: # %bb.0: 758; CHECK-NEXT: call op_0_to_2 759; CHECK-NEXT: local.set 1 760; CHECK-NEXT: local.set 0 761; CHECK-NEXT: local.get 1 762; CHECK-NEXT: local.get 1 763; CHECK-NEXT: call op_2_to_0 764; CHECK-NEXT: local.get 0 765; CHECK-NEXT: local.get 0 766; CHECK-NEXT: call op_2_to_0 767; CHECK-NEXT: # fallthrough-return 768 %t0 = call {i32, i32} @op_0_to_2() 769 %t1 = extractvalue {i32, i32} %t0, 1 770 %t2 = extractvalue {i32, i32} %t0, 1 771 call void @op_2_to_0(i32 %t1, i32 %t2) 772 %t3 = extractvalue {i32, i32} %t0, 0 773 %t4 = extractvalue {i32, i32} %t0, 0 774 call void @op_2_to_0(i32 %t3, i32 %t4) 775 ret void 776} 777 778define void @f291() { 779; CHECK-LABEL: f291: 780; CHECK: .functype f291 () -> () 781; CHECK-NEXT: .local i32 782; CHECK-NEXT: # %bb.0: 783; CHECK-NEXT: call op_0_to_3 784; CHECK-NEXT: drop 785; CHECK-NEXT: local.set 0 786; CHECK-NEXT: call op_1_to_0 787; CHECK-NEXT: local.get 0 788; CHECK-NEXT: call op_1_to_0 789; CHECK-NEXT: # fallthrough-return 790 %t0 = call {i32, i32, i32} @op_0_to_3() 791 %t1 = extractvalue {i32, i32, i32} %t0, 0 792 call void @op_1_to_0(i32 %t1) 793 %t2 = extractvalue {i32, i32, i32} %t0, 1 794 call void @op_1_to_0(i32 %t2) 795 ret void 796} 797 798define void @f292() { 799; CHECK-LABEL: f292: 800; CHECK: .functype f292 () -> () 801; CHECK-NEXT: .local i32 802; CHECK-NEXT: # %bb.0: 803; CHECK-NEXT: call op_0_to_3 804; CHECK-NEXT: local.set 0 805; CHECK-NEXT: drop 806; CHECK-NEXT: call op_1_to_0 807; CHECK-NEXT: local.get 0 808; CHECK-NEXT: call op_1_to_0 809; CHECK-NEXT: # fallthrough-return 810 %t0 = call {i32, i32, i32} @op_0_to_3() 811 %t1 = extractvalue {i32, i32, i32} %t0, 0 812 call void @op_1_to_0(i32 %t1) 813 %t2 = extractvalue {i32, i32, i32} %t0, 2 814 call void @op_1_to_0(i32 %t2) 815 ret void 816} 817 818define void @f294() { 819; CHECK-LABEL: f294: 820; CHECK: .functype f294 () -> () 821; CHECK-NEXT: .local i32, i32 822; CHECK-NEXT: # %bb.0: 823; CHECK-NEXT: call op_0_to_3 824; CHECK-NEXT: drop 825; CHECK-NEXT: local.set 0 826; CHECK-NEXT: local.tee 1 827; CHECK-NEXT: call op_1_to_0 828; CHECK-NEXT: local.get 1 829; CHECK-NEXT: local.get 0 830; CHECK-NEXT: call op_2_to_0 831; CHECK-NEXT: # fallthrough-return 832 %t0 = call {i32, i32, i32} @op_0_to_3() 833 %t1 = extractvalue {i32, i32, i32} %t0, 0 834 call void @op_1_to_0(i32 %t1) 835 %t2 = extractvalue {i32, i32, i32} %t0, 0 836 %t3 = extractvalue {i32, i32, i32} %t0, 1 837 call void @op_2_to_0(i32 %t2, i32 %t3) 838 ret void 839} 840 841define void @f295() { 842; CHECK-LABEL: f295: 843; CHECK: .functype f295 () -> () 844; CHECK-NEXT: .local i32, i32 845; CHECK-NEXT: # %bb.0: 846; CHECK-NEXT: call op_0_to_3 847; CHECK-NEXT: local.set 0 848; CHECK-NEXT: drop 849; CHECK-NEXT: local.tee 1 850; CHECK-NEXT: call op_1_to_0 851; CHECK-NEXT: local.get 1 852; CHECK-NEXT: local.get 0 853; CHECK-NEXT: call op_2_to_0 854; CHECK-NEXT: # fallthrough-return 855 %t0 = call {i32, i32, i32} @op_0_to_3() 856 %t1 = extractvalue {i32, i32, i32} %t0, 0 857 call void @op_1_to_0(i32 %t1) 858 %t2 = extractvalue {i32, i32, i32} %t0, 0 859 %t3 = extractvalue {i32, i32, i32} %t0, 2 860 call void @op_2_to_0(i32 %t2, i32 %t3) 861 ret void 862} 863 864define void @f296() { 865; CHECK-LABEL: f296: 866; CHECK: .functype f296 () -> () 867; CHECK-NEXT: .local i32, i32 868; CHECK-NEXT: # %bb.0: 869; CHECK-NEXT: call op_0_to_3 870; CHECK-NEXT: drop 871; CHECK-NEXT: local.set 0 872; CHECK-NEXT: local.tee 1 873; CHECK-NEXT: call op_1_to_0 874; CHECK-NEXT: local.get 0 875; CHECK-NEXT: local.get 1 876; CHECK-NEXT: call op_2_to_0 877; CHECK-NEXT: # fallthrough-return 878 %t0 = call {i32, i32, i32} @op_0_to_3() 879 %t1 = extractvalue {i32, i32, i32} %t0, 0 880 call void @op_1_to_0(i32 %t1) 881 %t2 = extractvalue {i32, i32, i32} %t0, 1 882 %t3 = extractvalue {i32, i32, i32} %t0, 0 883 call void @op_2_to_0(i32 %t2, i32 %t3) 884 ret void 885} 886 887define void @f297() { 888; CHECK-LABEL: f297: 889; CHECK: .functype f297 () -> () 890; CHECK-NEXT: .local i32 891; CHECK-NEXT: # %bb.0: 892; CHECK-NEXT: call op_0_to_3 893; CHECK-NEXT: drop 894; CHECK-NEXT: local.set 0 895; CHECK-NEXT: call op_1_to_0 896; CHECK-NEXT: local.get 0 897; CHECK-NEXT: local.get 0 898; CHECK-NEXT: call op_2_to_0 899; CHECK-NEXT: # fallthrough-return 900 %t0 = call {i32, i32, i32} @op_0_to_3() 901 %t1 = extractvalue {i32, i32, i32} %t0, 0 902 call void @op_1_to_0(i32 %t1) 903 %t2 = extractvalue {i32, i32, i32} %t0, 1 904 %t3 = extractvalue {i32, i32, i32} %t0, 1 905 call void @op_2_to_0(i32 %t2, i32 %t3) 906 ret void 907} 908 909define void @f298() { 910; CHECK-LABEL: f298: 911; CHECK: .functype f298 () -> () 912; CHECK-NEXT: .local i32, i32 913; CHECK-NEXT: # %bb.0: 914; CHECK-NEXT: call op_0_to_3 915; CHECK-NEXT: local.set 1 916; CHECK-NEXT: local.set 0 917; CHECK-NEXT: call op_1_to_0 918; CHECK-NEXT: local.get 0 919; CHECK-NEXT: local.get 1 920; CHECK-NEXT: call op_2_to_0 921; CHECK-NEXT: # fallthrough-return 922 %t0 = call {i32, i32, i32} @op_0_to_3() 923 %t1 = extractvalue {i32, i32, i32} %t0, 0 924 call void @op_1_to_0(i32 %t1) 925 %t2 = extractvalue {i32, i32, i32} %t0, 1 926 %t3 = extractvalue {i32, i32, i32} %t0, 2 927 call void @op_2_to_0(i32 %t2, i32 %t3) 928 ret void 929} 930 931define void @f299() { 932; CHECK-LABEL: f299: 933; CHECK: .functype f299 () -> () 934; CHECK-NEXT: .local i32, i32 935; CHECK-NEXT: # %bb.0: 936; CHECK-NEXT: call op_0_to_3 937; CHECK-NEXT: local.set 0 938; CHECK-NEXT: drop 939; CHECK-NEXT: local.tee 1 940; CHECK-NEXT: call op_1_to_0 941; CHECK-NEXT: local.get 0 942; CHECK-NEXT: local.get 1 943; CHECK-NEXT: call op_2_to_0 944; CHECK-NEXT: # fallthrough-return 945 %t0 = call {i32, i32, i32} @op_0_to_3() 946 %t1 = extractvalue {i32, i32, i32} %t0, 0 947 call void @op_1_to_0(i32 %t1) 948 %t2 = extractvalue {i32, i32, i32} %t0, 2 949 %t3 = extractvalue {i32, i32, i32} %t0, 0 950 call void @op_2_to_0(i32 %t2, i32 %t3) 951 ret void 952} 953 954define void @f300() { 955; CHECK-LABEL: f300: 956; CHECK: .functype f300 () -> () 957; CHECK-NEXT: .local i32, i32 958; CHECK-NEXT: # %bb.0: 959; CHECK-NEXT: call op_0_to_3 960; CHECK-NEXT: local.set 1 961; CHECK-NEXT: local.set 0 962; CHECK-NEXT: call op_1_to_0 963; CHECK-NEXT: local.get 1 964; CHECK-NEXT: local.get 0 965; CHECK-NEXT: call op_2_to_0 966; CHECK-NEXT: # fallthrough-return 967 %t0 = call {i32, i32, i32} @op_0_to_3() 968 %t1 = extractvalue {i32, i32, i32} %t0, 0 969 call void @op_1_to_0(i32 %t1) 970 %t2 = extractvalue {i32, i32, i32} %t0, 2 971 %t3 = extractvalue {i32, i32, i32} %t0, 1 972 call void @op_2_to_0(i32 %t2, i32 %t3) 973 ret void 974} 975 976define void @f301() { 977; CHECK-LABEL: f301: 978; CHECK: .functype f301 () -> () 979; CHECK-NEXT: .local i32 980; CHECK-NEXT: # %bb.0: 981; CHECK-NEXT: call op_0_to_3 982; CHECK-NEXT: local.set 0 983; CHECK-NEXT: drop 984; CHECK-NEXT: call op_1_to_0 985; CHECK-NEXT: local.get 0 986; CHECK-NEXT: local.get 0 987; CHECK-NEXT: call op_2_to_0 988; CHECK-NEXT: # fallthrough-return 989 %t0 = call {i32, i32, i32} @op_0_to_3() 990 %t1 = extractvalue {i32, i32, i32} %t0, 0 991 call void @op_1_to_0(i32 %t1) 992 %t2 = extractvalue {i32, i32, i32} %t0, 2 993 %t3 = extractvalue {i32, i32, i32} %t0, 2 994 call void @op_2_to_0(i32 %t2, i32 %t3) 995 ret void 996} 997 998define void @f302() { 999; CHECK-LABEL: f302: 1000; CHECK: .functype f302 () -> () 1001; CHECK-NEXT: .local i32, i32 1002; CHECK-NEXT: # %bb.0: 1003; CHECK-NEXT: call op_0_to_3 1004; CHECK-NEXT: drop 1005; CHECK-NEXT: local.set 1 1006; CHECK-NEXT: local.set 0 1007; CHECK-NEXT: local.get 1 1008; CHECK-NEXT: call op_1_to_0 1009; CHECK-NEXT: local.get 0 1010; CHECK-NEXT: call op_1_to_0 1011; CHECK-NEXT: # fallthrough-return 1012 %t0 = call {i32, i32, i32} @op_0_to_3() 1013 %t1 = extractvalue {i32, i32, i32} %t0, 1 1014 call void @op_1_to_0(i32 %t1) 1015 %t2 = extractvalue {i32, i32, i32} %t0, 0 1016 call void @op_1_to_0(i32 %t2) 1017 ret void 1018} 1019 1020define void @f304() { 1021; CHECK-LABEL: f304: 1022; CHECK: .functype f304 () -> () 1023; CHECK-NEXT: .local i32, i32 1024; CHECK-NEXT: # %bb.0: 1025; CHECK-NEXT: call op_0_to_3 1026; CHECK-NEXT: local.set 1 1027; CHECK-NEXT: local.set 0 1028; CHECK-NEXT: drop 1029; CHECK-NEXT: local.get 0 1030; CHECK-NEXT: call op_1_to_0 1031; CHECK-NEXT: local.get 1 1032; CHECK-NEXT: call op_1_to_0 1033; CHECK-NEXT: # fallthrough-return 1034 %t0 = call {i32, i32, i32} @op_0_to_3() 1035 %t1 = extractvalue {i32, i32, i32} %t0, 1 1036 call void @op_1_to_0(i32 %t1) 1037 %t2 = extractvalue {i32, i32, i32} %t0, 2 1038 call void @op_1_to_0(i32 %t2) 1039 ret void 1040} 1041 1042define void @f305() { 1043; CHECK-LABEL: f305: 1044; CHECK: .functype f305 () -> () 1045; CHECK-NEXT: .local i32, i32 1046; CHECK-NEXT: # %bb.0: 1047; CHECK-NEXT: call op_0_to_3 1048; CHECK-NEXT: drop 1049; CHECK-NEXT: local.set 1 1050; CHECK-NEXT: local.set 0 1051; CHECK-NEXT: local.get 1 1052; CHECK-NEXT: call op_1_to_0 1053; CHECK-NEXT: local.get 0 1054; CHECK-NEXT: local.get 0 1055; CHECK-NEXT: call op_2_to_0 1056; CHECK-NEXT: # fallthrough-return 1057 %t0 = call {i32, i32, i32} @op_0_to_3() 1058 %t1 = extractvalue {i32, i32, i32} %t0, 1 1059 call void @op_1_to_0(i32 %t1) 1060 %t2 = extractvalue {i32, i32, i32} %t0, 0 1061 %t3 = extractvalue {i32, i32, i32} %t0, 0 1062 call void @op_2_to_0(i32 %t2, i32 %t3) 1063 ret void 1064} 1065 1066define void @f306() { 1067; CHECK-LABEL: f306: 1068; CHECK: .functype f306 () -> () 1069; CHECK-NEXT: .local i32, i32 1070; CHECK-NEXT: # %bb.0: 1071; CHECK-NEXT: call op_0_to_3 1072; CHECK-NEXT: drop 1073; CHECK-NEXT: local.set 1 1074; CHECK-NEXT: local.set 0 1075; CHECK-NEXT: local.get 1 1076; CHECK-NEXT: call op_1_to_0 1077; CHECK-NEXT: local.get 0 1078; CHECK-NEXT: local.get 1 1079; CHECK-NEXT: call op_2_to_0 1080; CHECK-NEXT: # fallthrough-return 1081 %t0 = call {i32, i32, i32} @op_0_to_3() 1082 %t1 = extractvalue {i32, i32, i32} %t0, 1 1083 call void @op_1_to_0(i32 %t1) 1084 %t2 = extractvalue {i32, i32, i32} %t0, 0 1085 %t3 = extractvalue {i32, i32, i32} %t0, 1 1086 call void @op_2_to_0(i32 %t2, i32 %t3) 1087 ret void 1088} 1089 1090define void @f307() { 1091; CHECK-LABEL: f307: 1092; CHECK: .functype f307 () -> () 1093; CHECK-NEXT: .local i32, i32, i32 1094; CHECK-NEXT: # %bb.0: 1095; CHECK-NEXT: call op_0_to_3 1096; CHECK-NEXT: local.set 2 1097; CHECK-NEXT: local.set 1 1098; CHECK-NEXT: local.set 0 1099; CHECK-NEXT: local.get 1 1100; CHECK-NEXT: call op_1_to_0 1101; CHECK-NEXT: local.get 0 1102; CHECK-NEXT: local.get 2 1103; CHECK-NEXT: call op_2_to_0 1104; CHECK-NEXT: # fallthrough-return 1105 %t0 = call {i32, i32, i32} @op_0_to_3() 1106 %t1 = extractvalue {i32, i32, i32} %t0, 1 1107 call void @op_1_to_0(i32 %t1) 1108 %t2 = extractvalue {i32, i32, i32} %t0, 0 1109 %t3 = extractvalue {i32, i32, i32} %t0, 2 1110 call void @op_2_to_0(i32 %t2, i32 %t3) 1111 ret void 1112} 1113 1114define void @f308() { 1115; CHECK-LABEL: f308: 1116; CHECK: .functype f308 () -> () 1117; CHECK-NEXT: .local i32, i32 1118; CHECK-NEXT: # %bb.0: 1119; CHECK-NEXT: call op_0_to_3 1120; CHECK-NEXT: drop 1121; CHECK-NEXT: local.set 1 1122; CHECK-NEXT: local.set 0 1123; CHECK-NEXT: local.get 1 1124; CHECK-NEXT: call op_1_to_0 1125; CHECK-NEXT: local.get 1 1126; CHECK-NEXT: local.get 0 1127; CHECK-NEXT: call op_2_to_0 1128; CHECK-NEXT: # fallthrough-return 1129 %t0 = call {i32, i32, i32} @op_0_to_3() 1130 %t1 = extractvalue {i32, i32, i32} %t0, 1 1131 call void @op_1_to_0(i32 %t1) 1132 %t2 = extractvalue {i32, i32, i32} %t0, 1 1133 %t3 = extractvalue {i32, i32, i32} %t0, 0 1134 call void @op_2_to_0(i32 %t2, i32 %t3) 1135 ret void 1136} 1137 1138define void @f310() { 1139; CHECK-LABEL: f310: 1140; CHECK: .functype f310 () -> () 1141; CHECK-NEXT: .local i32, i32 1142; CHECK-NEXT: # %bb.0: 1143; CHECK-NEXT: call op_0_to_3 1144; CHECK-NEXT: local.set 1 1145; CHECK-NEXT: local.set 0 1146; CHECK-NEXT: drop 1147; CHECK-NEXT: local.get 0 1148; CHECK-NEXT: call op_1_to_0 1149; CHECK-NEXT: local.get 0 1150; CHECK-NEXT: local.get 1 1151; CHECK-NEXT: call op_2_to_0 1152; CHECK-NEXT: # fallthrough-return 1153 %t0 = call {i32, i32, i32} @op_0_to_3() 1154 %t1 = extractvalue {i32, i32, i32} %t0, 1 1155 call void @op_1_to_0(i32 %t1) 1156 %t2 = extractvalue {i32, i32, i32} %t0, 1 1157 %t3 = extractvalue {i32, i32, i32} %t0, 2 1158 call void @op_2_to_0(i32 %t2, i32 %t3) 1159 ret void 1160} 1161 1162define void @f311() { 1163; CHECK-LABEL: f311: 1164; CHECK: .functype f311 () -> () 1165; CHECK-NEXT: .local i32, i32, i32 1166; CHECK-NEXT: # %bb.0: 1167; CHECK-NEXT: call op_0_to_3 1168; CHECK-NEXT: local.set 2 1169; CHECK-NEXT: local.set 1 1170; CHECK-NEXT: local.set 0 1171; CHECK-NEXT: local.get 1 1172; CHECK-NEXT: call op_1_to_0 1173; CHECK-NEXT: local.get 2 1174; CHECK-NEXT: local.get 0 1175; CHECK-NEXT: call op_2_to_0 1176; CHECK-NEXT: # fallthrough-return 1177 %t0 = call {i32, i32, i32} @op_0_to_3() 1178 %t1 = extractvalue {i32, i32, i32} %t0, 1 1179 call void @op_1_to_0(i32 %t1) 1180 %t2 = extractvalue {i32, i32, i32} %t0, 2 1181 %t3 = extractvalue {i32, i32, i32} %t0, 0 1182 call void @op_2_to_0(i32 %t2, i32 %t3) 1183 ret void 1184} 1185 1186define void @f312() { 1187; CHECK-LABEL: f312: 1188; CHECK: .functype f312 () -> () 1189; CHECK-NEXT: .local i32, i32 1190; CHECK-NEXT: # %bb.0: 1191; CHECK-NEXT: call op_0_to_3 1192; CHECK-NEXT: local.set 1 1193; CHECK-NEXT: local.set 0 1194; CHECK-NEXT: drop 1195; CHECK-NEXT: local.get 0 1196; CHECK-NEXT: call op_1_to_0 1197; CHECK-NEXT: local.get 1 1198; CHECK-NEXT: local.get 0 1199; CHECK-NEXT: call op_2_to_0 1200; CHECK-NEXT: # fallthrough-return 1201 %t0 = call {i32, i32, i32} @op_0_to_3() 1202 %t1 = extractvalue {i32, i32, i32} %t0, 1 1203 call void @op_1_to_0(i32 %t1) 1204 %t2 = extractvalue {i32, i32, i32} %t0, 2 1205 %t3 = extractvalue {i32, i32, i32} %t0, 1 1206 call void @op_2_to_0(i32 %t2, i32 %t3) 1207 ret void 1208} 1209 1210define void @f313() { 1211; CHECK-LABEL: f313: 1212; CHECK: .functype f313 () -> () 1213; CHECK-NEXT: .local i32, i32 1214; CHECK-NEXT: # %bb.0: 1215; CHECK-NEXT: call op_0_to_3 1216; CHECK-NEXT: local.set 1 1217; CHECK-NEXT: local.set 0 1218; CHECK-NEXT: drop 1219; CHECK-NEXT: local.get 0 1220; CHECK-NEXT: call op_1_to_0 1221; CHECK-NEXT: local.get 1 1222; CHECK-NEXT: local.get 1 1223; CHECK-NEXT: call op_2_to_0 1224; CHECK-NEXT: # fallthrough-return 1225 %t0 = call {i32, i32, i32} @op_0_to_3() 1226 %t1 = extractvalue {i32, i32, i32} %t0, 1 1227 call void @op_1_to_0(i32 %t1) 1228 %t2 = extractvalue {i32, i32, i32} %t0, 2 1229 %t3 = extractvalue {i32, i32, i32} %t0, 2 1230 call void @op_2_to_0(i32 %t2, i32 %t3) 1231 ret void 1232} 1233 1234define void @f314() { 1235; CHECK-LABEL: f314: 1236; CHECK: .functype f314 () -> () 1237; CHECK-NEXT: .local i32, i32 1238; CHECK-NEXT: # %bb.0: 1239; CHECK-NEXT: call op_0_to_3 1240; CHECK-NEXT: local.set 1 1241; CHECK-NEXT: drop 1242; CHECK-NEXT: local.set 0 1243; CHECK-NEXT: local.get 1 1244; CHECK-NEXT: call op_1_to_0 1245; CHECK-NEXT: local.get 0 1246; CHECK-NEXT: call op_1_to_0 1247; CHECK-NEXT: # fallthrough-return 1248 %t0 = call {i32, i32, i32} @op_0_to_3() 1249 %t1 = extractvalue {i32, i32, i32} %t0, 2 1250 call void @op_1_to_0(i32 %t1) 1251 %t2 = extractvalue {i32, i32, i32} %t0, 0 1252 call void @op_1_to_0(i32 %t2) 1253 ret void 1254} 1255 1256define void @f315() { 1257; CHECK-LABEL: f315: 1258; CHECK: .functype f315 () -> () 1259; CHECK-NEXT: .local i32, i32 1260; CHECK-NEXT: # %bb.0: 1261; CHECK-NEXT: call op_0_to_3 1262; CHECK-NEXT: local.set 1 1263; CHECK-NEXT: local.set 0 1264; CHECK-NEXT: drop 1265; CHECK-NEXT: local.get 1 1266; CHECK-NEXT: call op_1_to_0 1267; CHECK-NEXT: local.get 0 1268; CHECK-NEXT: call op_1_to_0 1269; CHECK-NEXT: # fallthrough-return 1270 %t0 = call {i32, i32, i32} @op_0_to_3() 1271 %t1 = extractvalue {i32, i32, i32} %t0, 2 1272 call void @op_1_to_0(i32 %t1) 1273 %t2 = extractvalue {i32, i32, i32} %t0, 1 1274 call void @op_1_to_0(i32 %t2) 1275 ret void 1276} 1277 1278define void @f317() { 1279; CHECK-LABEL: f317: 1280; CHECK: .functype f317 () -> () 1281; CHECK-NEXT: .local i32, i32 1282; CHECK-NEXT: # %bb.0: 1283; CHECK-NEXT: call op_0_to_3 1284; CHECK-NEXT: local.set 1 1285; CHECK-NEXT: drop 1286; CHECK-NEXT: local.set 0 1287; CHECK-NEXT: local.get 1 1288; CHECK-NEXT: call op_1_to_0 1289; CHECK-NEXT: local.get 0 1290; CHECK-NEXT: local.get 0 1291; CHECK-NEXT: call op_2_to_0 1292; CHECK-NEXT: # fallthrough-return 1293 %t0 = call {i32, i32, i32} @op_0_to_3() 1294 %t1 = extractvalue {i32, i32, i32} %t0, 2 1295 call void @op_1_to_0(i32 %t1) 1296 %t2 = extractvalue {i32, i32, i32} %t0, 0 1297 %t3 = extractvalue {i32, i32, i32} %t0, 0 1298 call void @op_2_to_0(i32 %t2, i32 %t3) 1299 ret void 1300} 1301 1302define void @f318() { 1303; CHECK-LABEL: f318: 1304; CHECK: .functype f318 () -> () 1305; CHECK-NEXT: .local i32, i32, i32 1306; CHECK-NEXT: # %bb.0: 1307; CHECK-NEXT: call op_0_to_3 1308; CHECK-NEXT: local.set 2 1309; CHECK-NEXT: local.set 1 1310; CHECK-NEXT: local.set 0 1311; CHECK-NEXT: local.get 2 1312; CHECK-NEXT: call op_1_to_0 1313; CHECK-NEXT: local.get 0 1314; CHECK-NEXT: local.get 1 1315; CHECK-NEXT: call op_2_to_0 1316; CHECK-NEXT: # fallthrough-return 1317 %t0 = call {i32, i32, i32} @op_0_to_3() 1318 %t1 = extractvalue {i32, i32, i32} %t0, 2 1319 call void @op_1_to_0(i32 %t1) 1320 %t2 = extractvalue {i32, i32, i32} %t0, 0 1321 %t3 = extractvalue {i32, i32, i32} %t0, 1 1322 call void @op_2_to_0(i32 %t2, i32 %t3) 1323 ret void 1324} 1325 1326define void @f319() { 1327; CHECK-LABEL: f319: 1328; CHECK: .functype f319 () -> () 1329; CHECK-NEXT: .local i32, i32 1330; CHECK-NEXT: # %bb.0: 1331; CHECK-NEXT: call op_0_to_3 1332; CHECK-NEXT: local.set 1 1333; CHECK-NEXT: drop 1334; CHECK-NEXT: local.set 0 1335; CHECK-NEXT: local.get 1 1336; CHECK-NEXT: call op_1_to_0 1337; CHECK-NEXT: local.get 0 1338; CHECK-NEXT: local.get 1 1339; CHECK-NEXT: call op_2_to_0 1340; CHECK-NEXT: # fallthrough-return 1341 %t0 = call {i32, i32, i32} @op_0_to_3() 1342 %t1 = extractvalue {i32, i32, i32} %t0, 2 1343 call void @op_1_to_0(i32 %t1) 1344 %t2 = extractvalue {i32, i32, i32} %t0, 0 1345 %t3 = extractvalue {i32, i32, i32} %t0, 2 1346 call void @op_2_to_0(i32 %t2, i32 %t3) 1347 ret void 1348} 1349 1350define void @f320() { 1351; CHECK-LABEL: f320: 1352; CHECK: .functype f320 () -> () 1353; CHECK-NEXT: .local i32, i32, i32 1354; CHECK-NEXT: # %bb.0: 1355; CHECK-NEXT: call op_0_to_3 1356; CHECK-NEXT: local.set 2 1357; CHECK-NEXT: local.set 1 1358; CHECK-NEXT: local.set 0 1359; CHECK-NEXT: local.get 2 1360; CHECK-NEXT: call op_1_to_0 1361; CHECK-NEXT: local.get 1 1362; CHECK-NEXT: local.get 0 1363; CHECK-NEXT: call op_2_to_0 1364; CHECK-NEXT: # fallthrough-return 1365 %t0 = call {i32, i32, i32} @op_0_to_3() 1366 %t1 = extractvalue {i32, i32, i32} %t0, 2 1367 call void @op_1_to_0(i32 %t1) 1368 %t2 = extractvalue {i32, i32, i32} %t0, 1 1369 %t3 = extractvalue {i32, i32, i32} %t0, 0 1370 call void @op_2_to_0(i32 %t2, i32 %t3) 1371 ret void 1372} 1373 1374define void @f321() { 1375; CHECK-LABEL: f321: 1376; CHECK: .functype f321 () -> () 1377; CHECK-NEXT: .local i32, i32 1378; CHECK-NEXT: # %bb.0: 1379; CHECK-NEXT: call op_0_to_3 1380; CHECK-NEXT: local.set 1 1381; CHECK-NEXT: local.set 0 1382; CHECK-NEXT: drop 1383; CHECK-NEXT: local.get 1 1384; CHECK-NEXT: call op_1_to_0 1385; CHECK-NEXT: local.get 0 1386; CHECK-NEXT: local.get 0 1387; CHECK-NEXT: call op_2_to_0 1388; CHECK-NEXT: # fallthrough-return 1389 %t0 = call {i32, i32, i32} @op_0_to_3() 1390 %t1 = extractvalue {i32, i32, i32} %t0, 2 1391 call void @op_1_to_0(i32 %t1) 1392 %t2 = extractvalue {i32, i32, i32} %t0, 1 1393 %t3 = extractvalue {i32, i32, i32} %t0, 1 1394 call void @op_2_to_0(i32 %t2, i32 %t3) 1395 ret void 1396} 1397 1398define void @f322() { 1399; CHECK-LABEL: f322: 1400; CHECK: .functype f322 () -> () 1401; CHECK-NEXT: .local i32, i32 1402; CHECK-NEXT: # %bb.0: 1403; CHECK-NEXT: call op_0_to_3 1404; CHECK-NEXT: local.set 1 1405; CHECK-NEXT: local.set 0 1406; CHECK-NEXT: drop 1407; CHECK-NEXT: local.get 1 1408; CHECK-NEXT: call op_1_to_0 1409; CHECK-NEXT: local.get 0 1410; CHECK-NEXT: local.get 1 1411; CHECK-NEXT: call op_2_to_0 1412; CHECK-NEXT: # fallthrough-return 1413 %t0 = call {i32, i32, i32} @op_0_to_3() 1414 %t1 = extractvalue {i32, i32, i32} %t0, 2 1415 call void @op_1_to_0(i32 %t1) 1416 %t2 = extractvalue {i32, i32, i32} %t0, 1 1417 %t3 = extractvalue {i32, i32, i32} %t0, 2 1418 call void @op_2_to_0(i32 %t2, i32 %t3) 1419 ret void 1420} 1421 1422define void @f323() { 1423; CHECK-LABEL: f323: 1424; CHECK: .functype f323 () -> () 1425; CHECK-NEXT: .local i32, i32 1426; CHECK-NEXT: # %bb.0: 1427; CHECK-NEXT: call op_0_to_3 1428; CHECK-NEXT: local.set 1 1429; CHECK-NEXT: drop 1430; CHECK-NEXT: local.set 0 1431; CHECK-NEXT: local.get 1 1432; CHECK-NEXT: call op_1_to_0 1433; CHECK-NEXT: local.get 1 1434; CHECK-NEXT: local.get 0 1435; CHECK-NEXT: call op_2_to_0 1436; CHECK-NEXT: # fallthrough-return 1437 %t0 = call {i32, i32, i32} @op_0_to_3() 1438 %t1 = extractvalue {i32, i32, i32} %t0, 2 1439 call void @op_1_to_0(i32 %t1) 1440 %t2 = extractvalue {i32, i32, i32} %t0, 2 1441 %t3 = extractvalue {i32, i32, i32} %t0, 0 1442 call void @op_2_to_0(i32 %t2, i32 %t3) 1443 ret void 1444} 1445 1446define void @f324() { 1447; CHECK-LABEL: f324: 1448; CHECK: .functype f324 () -> () 1449; CHECK-NEXT: .local i32, i32 1450; CHECK-NEXT: # %bb.0: 1451; CHECK-NEXT: call op_0_to_3 1452; CHECK-NEXT: local.set 1 1453; CHECK-NEXT: local.set 0 1454; CHECK-NEXT: drop 1455; CHECK-NEXT: local.get 1 1456; CHECK-NEXT: call op_1_to_0 1457; CHECK-NEXT: local.get 1 1458; CHECK-NEXT: local.get 0 1459; CHECK-NEXT: call op_2_to_0 1460; CHECK-NEXT: # fallthrough-return 1461 %t0 = call {i32, i32, i32} @op_0_to_3() 1462 %t1 = extractvalue {i32, i32, i32} %t0, 2 1463 call void @op_1_to_0(i32 %t1) 1464 %t2 = extractvalue {i32, i32, i32} %t0, 2 1465 %t3 = extractvalue {i32, i32, i32} %t0, 1 1466 call void @op_2_to_0(i32 %t2, i32 %t3) 1467 ret void 1468} 1469 1470define void @f327() { 1471; CHECK-LABEL: f327: 1472; CHECK: .functype f327 () -> () 1473; CHECK-NEXT: .local i32, i32 1474; CHECK-NEXT: # %bb.0: 1475; CHECK-NEXT: call op_0_to_3 1476; CHECK-NEXT: drop 1477; CHECK-NEXT: local.set 0 1478; CHECK-NEXT: local.tee 1 1479; CHECK-NEXT: local.get 1 1480; CHECK-NEXT: call op_2_to_0 1481; CHECK-NEXT: local.get 0 1482; CHECK-NEXT: call op_1_to_0 1483; CHECK-NEXT: # fallthrough-return 1484 %t0 = call {i32, i32, i32} @op_0_to_3() 1485 %t1 = extractvalue {i32, i32, i32} %t0, 0 1486 %t2 = extractvalue {i32, i32, i32} %t0, 0 1487 call void @op_2_to_0(i32 %t1, i32 %t2) 1488 %t3 = extractvalue {i32, i32, i32} %t0, 1 1489 call void @op_1_to_0(i32 %t3) 1490 ret void 1491} 1492 1493define void @f328() { 1494; CHECK-LABEL: f328: 1495; CHECK: .functype f328 () -> () 1496; CHECK-NEXT: .local i32, i32 1497; CHECK-NEXT: # %bb.0: 1498; CHECK-NEXT: call op_0_to_3 1499; CHECK-NEXT: local.set 0 1500; CHECK-NEXT: drop 1501; CHECK-NEXT: local.tee 1 1502; CHECK-NEXT: local.get 1 1503; CHECK-NEXT: call op_2_to_0 1504; CHECK-NEXT: local.get 0 1505; CHECK-NEXT: call op_1_to_0 1506; CHECK-NEXT: # fallthrough-return 1507 %t0 = call {i32, i32, i32} @op_0_to_3() 1508 %t1 = extractvalue {i32, i32, i32} %t0, 0 1509 %t2 = extractvalue {i32, i32, i32} %t0, 0 1510 call void @op_2_to_0(i32 %t1, i32 %t2) 1511 %t3 = extractvalue {i32, i32, i32} %t0, 2 1512 call void @op_1_to_0(i32 %t3) 1513 ret void 1514} 1515 1516define void @f333() { 1517; CHECK-LABEL: f333: 1518; CHECK: .functype f333 () -> () 1519; CHECK-NEXT: .local i32, i32 1520; CHECK-NEXT: # %bb.0: 1521; CHECK-NEXT: call op_0_to_3 1522; CHECK-NEXT: drop 1523; CHECK-NEXT: local.set 0 1524; CHECK-NEXT: local.tee 1 1525; CHECK-NEXT: local.get 1 1526; CHECK-NEXT: call op_2_to_0 1527; CHECK-NEXT: local.get 0 1528; CHECK-NEXT: local.get 0 1529; CHECK-NEXT: call op_2_to_0 1530; CHECK-NEXT: # fallthrough-return 1531 %t0 = call {i32, i32, i32} @op_0_to_3() 1532 %t1 = extractvalue {i32, i32, i32} %t0, 0 1533 %t2 = extractvalue {i32, i32, i32} %t0, 0 1534 call void @op_2_to_0(i32 %t1, i32 %t2) 1535 %t3 = extractvalue {i32, i32, i32} %t0, 1 1536 %t4 = extractvalue {i32, i32, i32} %t0, 1 1537 call void @op_2_to_0(i32 %t3, i32 %t4) 1538 ret void 1539} 1540 1541define void @f334() { 1542; CHECK-LABEL: f334: 1543; CHECK: .functype f334 () -> () 1544; CHECK-NEXT: .local i32, i32, i32 1545; CHECK-NEXT: # %bb.0: 1546; CHECK-NEXT: call op_0_to_3 1547; CHECK-NEXT: local.set 1 1548; CHECK-NEXT: local.set 0 1549; CHECK-NEXT: local.tee 2 1550; CHECK-NEXT: local.get 2 1551; CHECK-NEXT: call op_2_to_0 1552; CHECK-NEXT: local.get 0 1553; CHECK-NEXT: local.get 1 1554; CHECK-NEXT: call op_2_to_0 1555; CHECK-NEXT: # fallthrough-return 1556 %t0 = call {i32, i32, i32} @op_0_to_3() 1557 %t1 = extractvalue {i32, i32, i32} %t0, 0 1558 %t2 = extractvalue {i32, i32, i32} %t0, 0 1559 call void @op_2_to_0(i32 %t1, i32 %t2) 1560 %t3 = extractvalue {i32, i32, i32} %t0, 1 1561 %t4 = extractvalue {i32, i32, i32} %t0, 2 1562 call void @op_2_to_0(i32 %t3, i32 %t4) 1563 ret void 1564} 1565 1566define void @f336() { 1567; CHECK-LABEL: f336: 1568; CHECK: .functype f336 () -> () 1569; CHECK-NEXT: .local i32, i32, i32 1570; CHECK-NEXT: # %bb.0: 1571; CHECK-NEXT: call op_0_to_3 1572; CHECK-NEXT: local.set 1 1573; CHECK-NEXT: local.set 0 1574; CHECK-NEXT: local.tee 2 1575; CHECK-NEXT: local.get 2 1576; CHECK-NEXT: call op_2_to_0 1577; CHECK-NEXT: local.get 1 1578; CHECK-NEXT: local.get 0 1579; CHECK-NEXT: call op_2_to_0 1580; CHECK-NEXT: # fallthrough-return 1581 %t0 = call {i32, i32, i32} @op_0_to_3() 1582 %t1 = extractvalue {i32, i32, i32} %t0, 0 1583 %t2 = extractvalue {i32, i32, i32} %t0, 0 1584 call void @op_2_to_0(i32 %t1, i32 %t2) 1585 %t3 = extractvalue {i32, i32, i32} %t0, 2 1586 %t4 = extractvalue {i32, i32, i32} %t0, 1 1587 call void @op_2_to_0(i32 %t3, i32 %t4) 1588 ret void 1589} 1590 1591define void @f337() { 1592; CHECK-LABEL: f337: 1593; CHECK: .functype f337 () -> () 1594; CHECK-NEXT: .local i32, i32 1595; CHECK-NEXT: # %bb.0: 1596; CHECK-NEXT: call op_0_to_3 1597; CHECK-NEXT: local.set 0 1598; CHECK-NEXT: drop 1599; CHECK-NEXT: local.tee 1 1600; CHECK-NEXT: local.get 1 1601; CHECK-NEXT: call op_2_to_0 1602; CHECK-NEXT: local.get 0 1603; CHECK-NEXT: local.get 0 1604; CHECK-NEXT: call op_2_to_0 1605; CHECK-NEXT: # fallthrough-return 1606 %t0 = call {i32, i32, i32} @op_0_to_3() 1607 %t1 = extractvalue {i32, i32, i32} %t0, 0 1608 %t2 = extractvalue {i32, i32, i32} %t0, 0 1609 call void @op_2_to_0(i32 %t1, i32 %t2) 1610 %t3 = extractvalue {i32, i32, i32} %t0, 2 1611 %t4 = extractvalue {i32, i32, i32} %t0, 2 1612 call void @op_2_to_0(i32 %t3, i32 %t4) 1613 ret void 1614} 1615 1616define void @f338() { 1617; CHECK-LABEL: f338: 1618; CHECK: .functype f338 () -> () 1619; CHECK-NEXT: .local i32, i32 1620; CHECK-NEXT: # %bb.0: 1621; CHECK-NEXT: call op_0_to_3 1622; CHECK-NEXT: drop 1623; CHECK-NEXT: local.set 0 1624; CHECK-NEXT: local.tee 1 1625; CHECK-NEXT: local.get 0 1626; CHECK-NEXT: call op_2_to_0 1627; CHECK-NEXT: local.get 1 1628; CHECK-NEXT: call op_1_to_0 1629; CHECK-NEXT: # fallthrough-return 1630 %t0 = call {i32, i32, i32} @op_0_to_3() 1631 %t1 = extractvalue {i32, i32, i32} %t0, 0 1632 %t2 = extractvalue {i32, i32, i32} %t0, 1 1633 call void @op_2_to_0(i32 %t1, i32 %t2) 1634 %t3 = extractvalue {i32, i32, i32} %t0, 0 1635 call void @op_1_to_0(i32 %t3) 1636 ret void 1637} 1638 1639define void @f339() { 1640; CHECK-LABEL: f339: 1641; CHECK: .functype f339 () -> () 1642; CHECK-NEXT: .local i32 1643; CHECK-NEXT: # %bb.0: 1644; CHECK-NEXT: call op_0_to_3 1645; CHECK-NEXT: drop 1646; CHECK-NEXT: local.set 0 1647; CHECK-NEXT: local.get 0 1648; CHECK-NEXT: call op_2_to_0 1649; CHECK-NEXT: local.get 0 1650; CHECK-NEXT: call op_1_to_0 1651; CHECK-NEXT: # fallthrough-return 1652 %t0 = call {i32, i32, i32} @op_0_to_3() 1653 %t1 = extractvalue {i32, i32, i32} %t0, 0 1654 %t2 = extractvalue {i32, i32, i32} %t0, 1 1655 call void @op_2_to_0(i32 %t1, i32 %t2) 1656 %t3 = extractvalue {i32, i32, i32} %t0, 1 1657 call void @op_1_to_0(i32 %t3) 1658 ret void 1659} 1660 1661define void @f340() { 1662; CHECK-LABEL: f340: 1663; CHECK: .functype f340 () -> () 1664; CHECK-NEXT: .local i32 1665; CHECK-NEXT: # %bb.0: 1666; CHECK-NEXT: call op_0_to_3 1667; CHECK-NEXT: local.set 0 1668; CHECK-NEXT: call op_2_to_0 1669; CHECK-NEXT: local.get 0 1670; CHECK-NEXT: call op_1_to_0 1671; CHECK-NEXT: # fallthrough-return 1672 %t0 = call {i32, i32, i32} @op_0_to_3() 1673 %t1 = extractvalue {i32, i32, i32} %t0, 0 1674 %t2 = extractvalue {i32, i32, i32} %t0, 1 1675 call void @op_2_to_0(i32 %t1, i32 %t2) 1676 %t3 = extractvalue {i32, i32, i32} %t0, 2 1677 call void @op_1_to_0(i32 %t3) 1678 ret void 1679} 1680 1681define void @f343() { 1682; CHECK-LABEL: f343: 1683; CHECK: .functype f343 () -> () 1684; CHECK-NEXT: .local i32, i32, i32 1685; CHECK-NEXT: # %bb.0: 1686; CHECK-NEXT: call op_0_to_3 1687; CHECK-NEXT: local.set 1 1688; CHECK-NEXT: local.set 0 1689; CHECK-NEXT: local.tee 2 1690; CHECK-NEXT: local.get 0 1691; CHECK-NEXT: call op_2_to_0 1692; CHECK-NEXT: local.get 2 1693; CHECK-NEXT: local.get 1 1694; CHECK-NEXT: call op_2_to_0 1695; CHECK-NEXT: # fallthrough-return 1696 %t0 = call {i32, i32, i32} @op_0_to_3() 1697 %t1 = extractvalue {i32, i32, i32} %t0, 0 1698 %t2 = extractvalue {i32, i32, i32} %t0, 1 1699 call void @op_2_to_0(i32 %t1, i32 %t2) 1700 %t3 = extractvalue {i32, i32, i32} %t0, 0 1701 %t4 = extractvalue {i32, i32, i32} %t0, 2 1702 call void @op_2_to_0(i32 %t3, i32 %t4) 1703 ret void 1704} 1705 1706define void @f344() { 1707; CHECK-LABEL: f344: 1708; CHECK: .functype f344 () -> () 1709; CHECK-NEXT: .local i32, i32 1710; CHECK-NEXT: # %bb.0: 1711; CHECK-NEXT: call op_0_to_3 1712; CHECK-NEXT: drop 1713; CHECK-NEXT: local.set 0 1714; CHECK-NEXT: local.tee 1 1715; CHECK-NEXT: local.get 0 1716; CHECK-NEXT: call op_2_to_0 1717; CHECK-NEXT: local.get 0 1718; CHECK-NEXT: local.get 1 1719; CHECK-NEXT: call op_2_to_0 1720; CHECK-NEXT: # fallthrough-return 1721 %t0 = call {i32, i32, i32} @op_0_to_3() 1722 %t1 = extractvalue {i32, i32, i32} %t0, 0 1723 %t2 = extractvalue {i32, i32, i32} %t0, 1 1724 call void @op_2_to_0(i32 %t1, i32 %t2) 1725 %t3 = extractvalue {i32, i32, i32} %t0, 1 1726 %t4 = extractvalue {i32, i32, i32} %t0, 0 1727 call void @op_2_to_0(i32 %t3, i32 %t4) 1728 ret void 1729} 1730 1731define void @f346() { 1732; CHECK-LABEL: f346: 1733; CHECK: .functype f346 () -> () 1734; CHECK-NEXT: .local i32, i32 1735; CHECK-NEXT: # %bb.0: 1736; CHECK-NEXT: call op_0_to_3 1737; CHECK-NEXT: local.set 1 1738; CHECK-NEXT: local.set 0 1739; CHECK-NEXT: local.get 0 1740; CHECK-NEXT: call op_2_to_0 1741; CHECK-NEXT: local.get 0 1742; CHECK-NEXT: local.get 1 1743; CHECK-NEXT: call op_2_to_0 1744; CHECK-NEXT: # fallthrough-return 1745 %t0 = call {i32, i32, i32} @op_0_to_3() 1746 %t1 = extractvalue {i32, i32, i32} %t0, 0 1747 %t2 = extractvalue {i32, i32, i32} %t0, 1 1748 call void @op_2_to_0(i32 %t1, i32 %t2) 1749 %t3 = extractvalue {i32, i32, i32} %t0, 1 1750 %t4 = extractvalue {i32, i32, i32} %t0, 2 1751 call void @op_2_to_0(i32 %t3, i32 %t4) 1752 ret void 1753} 1754 1755define void @f347() { 1756; CHECK-LABEL: f347: 1757; CHECK: .functype f347 () -> () 1758; CHECK-NEXT: .local i32, i32, i32 1759; CHECK-NEXT: # %bb.0: 1760; CHECK-NEXT: call op_0_to_3 1761; CHECK-NEXT: local.set 1 1762; CHECK-NEXT: local.set 0 1763; CHECK-NEXT: local.tee 2 1764; CHECK-NEXT: local.get 0 1765; CHECK-NEXT: call op_2_to_0 1766; CHECK-NEXT: local.get 1 1767; CHECK-NEXT: local.get 2 1768; CHECK-NEXT: call op_2_to_0 1769; CHECK-NEXT: # fallthrough-return 1770 %t0 = call {i32, i32, i32} @op_0_to_3() 1771 %t1 = extractvalue {i32, i32, i32} %t0, 0 1772 %t2 = extractvalue {i32, i32, i32} %t0, 1 1773 call void @op_2_to_0(i32 %t1, i32 %t2) 1774 %t3 = extractvalue {i32, i32, i32} %t0, 2 1775 %t4 = extractvalue {i32, i32, i32} %t0, 0 1776 call void @op_2_to_0(i32 %t3, i32 %t4) 1777 ret void 1778} 1779 1780define void @f348() { 1781; CHECK-LABEL: f348: 1782; CHECK: .functype f348 () -> () 1783; CHECK-NEXT: .local i32, i32 1784; CHECK-NEXT: # %bb.0: 1785; CHECK-NEXT: call op_0_to_3 1786; CHECK-NEXT: local.set 1 1787; CHECK-NEXT: local.set 0 1788; CHECK-NEXT: local.get 0 1789; CHECK-NEXT: call op_2_to_0 1790; CHECK-NEXT: local.get 1 1791; CHECK-NEXT: local.get 0 1792; CHECK-NEXT: call op_2_to_0 1793; CHECK-NEXT: # fallthrough-return 1794 %t0 = call {i32, i32, i32} @op_0_to_3() 1795 %t1 = extractvalue {i32, i32, i32} %t0, 0 1796 %t2 = extractvalue {i32, i32, i32} %t0, 1 1797 call void @op_2_to_0(i32 %t1, i32 %t2) 1798 %t3 = extractvalue {i32, i32, i32} %t0, 2 1799 %t4 = extractvalue {i32, i32, i32} %t0, 1 1800 call void @op_2_to_0(i32 %t3, i32 %t4) 1801 ret void 1802} 1803 1804define void @f349() { 1805; CHECK-LABEL: f349: 1806; CHECK: .functype f349 () -> () 1807; CHECK-NEXT: .local i32 1808; CHECK-NEXT: # %bb.0: 1809; CHECK-NEXT: call op_0_to_3 1810; CHECK-NEXT: local.set 0 1811; CHECK-NEXT: call op_2_to_0 1812; CHECK-NEXT: local.get 0 1813; CHECK-NEXT: local.get 0 1814; CHECK-NEXT: call op_2_to_0 1815; CHECK-NEXT: # fallthrough-return 1816 %t0 = call {i32, i32, i32} @op_0_to_3() 1817 %t1 = extractvalue {i32, i32, i32} %t0, 0 1818 %t2 = extractvalue {i32, i32, i32} %t0, 1 1819 call void @op_2_to_0(i32 %t1, i32 %t2) 1820 %t3 = extractvalue {i32, i32, i32} %t0, 2 1821 %t4 = extractvalue {i32, i32, i32} %t0, 2 1822 call void @op_2_to_0(i32 %t3, i32 %t4) 1823 ret void 1824} 1825 1826define void @f350() { 1827; CHECK-LABEL: f350: 1828; CHECK: .functype f350 () -> () 1829; CHECK-NEXT: .local i32, i32 1830; CHECK-NEXT: # %bb.0: 1831; CHECK-NEXT: call op_0_to_3 1832; CHECK-NEXT: local.set 0 1833; CHECK-NEXT: drop 1834; CHECK-NEXT: local.tee 1 1835; CHECK-NEXT: local.get 0 1836; CHECK-NEXT: call op_2_to_0 1837; CHECK-NEXT: local.get 1 1838; CHECK-NEXT: call op_1_to_0 1839; CHECK-NEXT: # fallthrough-return 1840 %t0 = call {i32, i32, i32} @op_0_to_3() 1841 %t1 = extractvalue {i32, i32, i32} %t0, 0 1842 %t2 = extractvalue {i32, i32, i32} %t0, 2 1843 call void @op_2_to_0(i32 %t1, i32 %t2) 1844 %t3 = extractvalue {i32, i32, i32} %t0, 0 1845 call void @op_1_to_0(i32 %t3) 1846 ret void 1847} 1848 1849define void @f351() { 1850; CHECK-LABEL: f351: 1851; CHECK: .functype f351 () -> () 1852; CHECK-NEXT: .local i32, i32 1853; CHECK-NEXT: # %bb.0: 1854; CHECK-NEXT: call op_0_to_3 1855; CHECK-NEXT: local.set 1 1856; CHECK-NEXT: local.set 0 1857; CHECK-NEXT: local.get 1 1858; CHECK-NEXT: call op_2_to_0 1859; CHECK-NEXT: local.get 0 1860; CHECK-NEXT: call op_1_to_0 1861; CHECK-NEXT: # fallthrough-return 1862 %t0 = call {i32, i32, i32} @op_0_to_3() 1863 %t1 = extractvalue {i32, i32, i32} %t0, 0 1864 %t2 = extractvalue {i32, i32, i32} %t0, 2 1865 call void @op_2_to_0(i32 %t1, i32 %t2) 1866 %t3 = extractvalue {i32, i32, i32} %t0, 1 1867 call void @op_1_to_0(i32 %t3) 1868 ret void 1869} 1870 1871define void @f352() { 1872; CHECK-LABEL: f352: 1873; CHECK: .functype f352 () -> () 1874; CHECK-NEXT: .local i32 1875; CHECK-NEXT: # %bb.0: 1876; CHECK-NEXT: call op_0_to_3 1877; CHECK-NEXT: local.set 0 1878; CHECK-NEXT: drop 1879; CHECK-NEXT: local.get 0 1880; CHECK-NEXT: call op_2_to_0 1881; CHECK-NEXT: local.get 0 1882; CHECK-NEXT: call op_1_to_0 1883; CHECK-NEXT: # fallthrough-return 1884 %t0 = call {i32, i32, i32} @op_0_to_3() 1885 %t1 = extractvalue {i32, i32, i32} %t0, 0 1886 %t2 = extractvalue {i32, i32, i32} %t0, 2 1887 call void @op_2_to_0(i32 %t1, i32 %t2) 1888 %t3 = extractvalue {i32, i32, i32} %t0, 2 1889 call void @op_1_to_0(i32 %t3) 1890 ret void 1891} 1892 1893define void @f354() { 1894; CHECK-LABEL: f354: 1895; CHECK: .functype f354 () -> () 1896; CHECK-NEXT: .local i32, i32, i32 1897; CHECK-NEXT: # %bb.0: 1898; CHECK-NEXT: call op_0_to_3 1899; CHECK-NEXT: local.set 1 1900; CHECK-NEXT: local.set 0 1901; CHECK-NEXT: local.tee 2 1902; CHECK-NEXT: local.get 1 1903; CHECK-NEXT: call op_2_to_0 1904; CHECK-NEXT: local.get 2 1905; CHECK-NEXT: local.get 0 1906; CHECK-NEXT: call op_2_to_0 1907; CHECK-NEXT: # fallthrough-return 1908 %t0 = call {i32, i32, i32} @op_0_to_3() 1909 %t1 = extractvalue {i32, i32, i32} %t0, 0 1910 %t2 = extractvalue {i32, i32, i32} %t0, 2 1911 call void @op_2_to_0(i32 %t1, i32 %t2) 1912 %t3 = extractvalue {i32, i32, i32} %t0, 0 1913 %t4 = extractvalue {i32, i32, i32} %t0, 1 1914 call void @op_2_to_0(i32 %t3, i32 %t4) 1915 ret void 1916} 1917 1918define void @f356() { 1919; CHECK-LABEL: f356: 1920; CHECK: .functype f356 () -> () 1921; CHECK-NEXT: .local i32, i32, i32 1922; CHECK-NEXT: # %bb.0: 1923; CHECK-NEXT: call op_0_to_3 1924; CHECK-NEXT: local.set 1 1925; CHECK-NEXT: local.set 0 1926; CHECK-NEXT: local.tee 2 1927; CHECK-NEXT: local.get 1 1928; CHECK-NEXT: call op_2_to_0 1929; CHECK-NEXT: local.get 0 1930; CHECK-NEXT: local.get 2 1931; CHECK-NEXT: call op_2_to_0 1932; CHECK-NEXT: # fallthrough-return 1933 %t0 = call {i32, i32, i32} @op_0_to_3() 1934 %t1 = extractvalue {i32, i32, i32} %t0, 0 1935 %t2 = extractvalue {i32, i32, i32} %t0, 2 1936 call void @op_2_to_0(i32 %t1, i32 %t2) 1937 %t3 = extractvalue {i32, i32, i32} %t0, 1 1938 %t4 = extractvalue {i32, i32, i32} %t0, 0 1939 call void @op_2_to_0(i32 %t3, i32 %t4) 1940 ret void 1941} 1942 1943define void @f357() { 1944; CHECK-LABEL: f357: 1945; CHECK: .functype f357 () -> () 1946; CHECK-NEXT: .local i32, i32 1947; CHECK-NEXT: # %bb.0: 1948; CHECK-NEXT: call op_0_to_3 1949; CHECK-NEXT: local.set 1 1950; CHECK-NEXT: local.set 0 1951; CHECK-NEXT: local.get 1 1952; CHECK-NEXT: call op_2_to_0 1953; CHECK-NEXT: local.get 0 1954; CHECK-NEXT: local.get 0 1955; CHECK-NEXT: call op_2_to_0 1956; CHECK-NEXT: # fallthrough-return 1957 %t0 = call {i32, i32, i32} @op_0_to_3() 1958 %t1 = extractvalue {i32, i32, i32} %t0, 0 1959 %t2 = extractvalue {i32, i32, i32} %t0, 2 1960 call void @op_2_to_0(i32 %t1, i32 %t2) 1961 %t3 = extractvalue {i32, i32, i32} %t0, 1 1962 %t4 = extractvalue {i32, i32, i32} %t0, 1 1963 call void @op_2_to_0(i32 %t3, i32 %t4) 1964 ret void 1965} 1966 1967define void @f358() { 1968; CHECK-LABEL: f358: 1969; CHECK: .functype f358 () -> () 1970; CHECK-NEXT: .local i32, i32 1971; CHECK-NEXT: # %bb.0: 1972; CHECK-NEXT: call op_0_to_3 1973; CHECK-NEXT: local.set 1 1974; CHECK-NEXT: local.set 0 1975; CHECK-NEXT: local.get 1 1976; CHECK-NEXT: call op_2_to_0 1977; CHECK-NEXT: local.get 0 1978; CHECK-NEXT: local.get 1 1979; CHECK-NEXT: call op_2_to_0 1980; CHECK-NEXT: # fallthrough-return 1981 %t0 = call {i32, i32, i32} @op_0_to_3() 1982 %t1 = extractvalue {i32, i32, i32} %t0, 0 1983 %t2 = extractvalue {i32, i32, i32} %t0, 2 1984 call void @op_2_to_0(i32 %t1, i32 %t2) 1985 %t3 = extractvalue {i32, i32, i32} %t0, 1 1986 %t4 = extractvalue {i32, i32, i32} %t0, 2 1987 call void @op_2_to_0(i32 %t3, i32 %t4) 1988 ret void 1989} 1990 1991define void @f359() { 1992; CHECK-LABEL: f359: 1993; CHECK: .functype f359 () -> () 1994; CHECK-NEXT: .local i32, i32 1995; CHECK-NEXT: # %bb.0: 1996; CHECK-NEXT: call op_0_to_3 1997; CHECK-NEXT: local.set 0 1998; CHECK-NEXT: drop 1999; CHECK-NEXT: local.tee 1 2000; CHECK-NEXT: local.get 0 2001; CHECK-NEXT: call op_2_to_0 2002; CHECK-NEXT: local.get 0 2003; CHECK-NEXT: local.get 1 2004; CHECK-NEXT: call op_2_to_0 2005; CHECK-NEXT: # fallthrough-return 2006 %t0 = call {i32, i32, i32} @op_0_to_3() 2007 %t1 = extractvalue {i32, i32, i32} %t0, 0 2008 %t2 = extractvalue {i32, i32, i32} %t0, 2 2009 call void @op_2_to_0(i32 %t1, i32 %t2) 2010 %t3 = extractvalue {i32, i32, i32} %t0, 2 2011 %t4 = extractvalue {i32, i32, i32} %t0, 0 2012 call void @op_2_to_0(i32 %t3, i32 %t4) 2013 ret void 2014} 2015 2016define void @f360() { 2017; CHECK-LABEL: f360: 2018; CHECK: .functype f360 () -> () 2019; CHECK-NEXT: .local i32, i32 2020; CHECK-NEXT: # %bb.0: 2021; CHECK-NEXT: call op_0_to_3 2022; CHECK-NEXT: local.set 1 2023; CHECK-NEXT: local.set 0 2024; CHECK-NEXT: local.get 1 2025; CHECK-NEXT: call op_2_to_0 2026; CHECK-NEXT: local.get 1 2027; CHECK-NEXT: local.get 0 2028; CHECK-NEXT: call op_2_to_0 2029; CHECK-NEXT: # fallthrough-return 2030 %t0 = call {i32, i32, i32} @op_0_to_3() 2031 %t1 = extractvalue {i32, i32, i32} %t0, 0 2032 %t2 = extractvalue {i32, i32, i32} %t0, 2 2033 call void @op_2_to_0(i32 %t1, i32 %t2) 2034 %t3 = extractvalue {i32, i32, i32} %t0, 2 2035 %t4 = extractvalue {i32, i32, i32} %t0, 1 2036 call void @op_2_to_0(i32 %t3, i32 %t4) 2037 ret void 2038} 2039 2040define void @f362() { 2041; CHECK-LABEL: f362: 2042; CHECK: .functype f362 () -> () 2043; CHECK-NEXT: .local i32, i32 2044; CHECK-NEXT: # %bb.0: 2045; CHECK-NEXT: call op_0_to_3 2046; CHECK-NEXT: drop 2047; CHECK-NEXT: local.set 1 2048; CHECK-NEXT: local.set 0 2049; CHECK-NEXT: local.get 1 2050; CHECK-NEXT: local.get 0 2051; CHECK-NEXT: call op_2_to_0 2052; CHECK-NEXT: local.get 0 2053; CHECK-NEXT: call op_1_to_0 2054; CHECK-NEXT: # fallthrough-return 2055 %t0 = call {i32, i32, i32} @op_0_to_3() 2056 %t1 = extractvalue {i32, i32, i32} %t0, 1 2057 %t2 = extractvalue {i32, i32, i32} %t0, 0 2058 call void @op_2_to_0(i32 %t1, i32 %t2) 2059 %t3 = extractvalue {i32, i32, i32} %t0, 0 2060 call void @op_1_to_0(i32 %t3) 2061 ret void 2062} 2063 2064define void @f363() { 2065; CHECK-LABEL: f363: 2066; CHECK: .functype f363 () -> () 2067; CHECK-NEXT: .local i32, i32 2068; CHECK-NEXT: # %bb.0: 2069; CHECK-NEXT: call op_0_to_3 2070; CHECK-NEXT: drop 2071; CHECK-NEXT: local.set 1 2072; CHECK-NEXT: local.set 0 2073; CHECK-NEXT: local.get 1 2074; CHECK-NEXT: local.get 0 2075; CHECK-NEXT: call op_2_to_0 2076; CHECK-NEXT: local.get 1 2077; CHECK-NEXT: call op_1_to_0 2078; CHECK-NEXT: # fallthrough-return 2079 %t0 = call {i32, i32, i32} @op_0_to_3() 2080 %t1 = extractvalue {i32, i32, i32} %t0, 1 2081 %t2 = extractvalue {i32, i32, i32} %t0, 0 2082 call void @op_2_to_0(i32 %t1, i32 %t2) 2083 %t3 = extractvalue {i32, i32, i32} %t0, 1 2084 call void @op_1_to_0(i32 %t3) 2085 ret void 2086} 2087 2088define void @f364() { 2089; CHECK-LABEL: f364: 2090; CHECK: .functype f364 () -> () 2091; CHECK-NEXT: .local i32, i32, i32 2092; CHECK-NEXT: # %bb.0: 2093; CHECK-NEXT: call op_0_to_3 2094; CHECK-NEXT: local.set 2 2095; CHECK-NEXT: local.set 1 2096; CHECK-NEXT: local.set 0 2097; CHECK-NEXT: local.get 1 2098; CHECK-NEXT: local.get 0 2099; CHECK-NEXT: call op_2_to_0 2100; CHECK-NEXT: local.get 2 2101; CHECK-NEXT: call op_1_to_0 2102; CHECK-NEXT: # fallthrough-return 2103 %t0 = call {i32, i32, i32} @op_0_to_3() 2104 %t1 = extractvalue {i32, i32, i32} %t0, 1 2105 %t2 = extractvalue {i32, i32, i32} %t0, 0 2106 call void @op_2_to_0(i32 %t1, i32 %t2) 2107 %t3 = extractvalue {i32, i32, i32} %t0, 2 2108 call void @op_1_to_0(i32 %t3) 2109 ret void 2110} 2111 2112define void @f366() { 2113; CHECK-LABEL: f366: 2114; CHECK: .functype f366 () -> () 2115; CHECK-NEXT: .local i32, i32 2116; CHECK-NEXT: # %bb.0: 2117; CHECK-NEXT: call op_0_to_3 2118; CHECK-NEXT: drop 2119; CHECK-NEXT: local.set 1 2120; CHECK-NEXT: local.set 0 2121; CHECK-NEXT: local.get 1 2122; CHECK-NEXT: local.get 0 2123; CHECK-NEXT: call op_2_to_0 2124; CHECK-NEXT: local.get 0 2125; CHECK-NEXT: local.get 1 2126; CHECK-NEXT: call op_2_to_0 2127; CHECK-NEXT: # fallthrough-return 2128 %t0 = call {i32, i32, i32} @op_0_to_3() 2129 %t1 = extractvalue {i32, i32, i32} %t0, 1 2130 %t2 = extractvalue {i32, i32, i32} %t0, 0 2131 call void @op_2_to_0(i32 %t1, i32 %t2) 2132 %t3 = extractvalue {i32, i32, i32} %t0, 0 2133 %t4 = extractvalue {i32, i32, i32} %t0, 1 2134 call void @op_2_to_0(i32 %t3, i32 %t4) 2135 ret void 2136} 2137 2138define void @f367() { 2139; CHECK-LABEL: f367: 2140; CHECK: .functype f367 () -> () 2141; CHECK-NEXT: .local i32, i32, i32 2142; CHECK-NEXT: # %bb.0: 2143; CHECK-NEXT: call op_0_to_3 2144; CHECK-NEXT: local.set 2 2145; CHECK-NEXT: local.set 1 2146; CHECK-NEXT: local.set 0 2147; CHECK-NEXT: local.get 1 2148; CHECK-NEXT: local.get 0 2149; CHECK-NEXT: call op_2_to_0 2150; CHECK-NEXT: local.get 0 2151; CHECK-NEXT: local.get 2 2152; CHECK-NEXT: call op_2_to_0 2153; CHECK-NEXT: # fallthrough-return 2154 %t0 = call {i32, i32, i32} @op_0_to_3() 2155 %t1 = extractvalue {i32, i32, i32} %t0, 1 2156 %t2 = extractvalue {i32, i32, i32} %t0, 0 2157 call void @op_2_to_0(i32 %t1, i32 %t2) 2158 %t3 = extractvalue {i32, i32, i32} %t0, 0 2159 %t4 = extractvalue {i32, i32, i32} %t0, 2 2160 call void @op_2_to_0(i32 %t3, i32 %t4) 2161 ret void 2162} 2163 2164define void @f370() { 2165; CHECK-LABEL: f370: 2166; CHECK: .functype f370 () -> () 2167; CHECK-NEXT: .local i32, i32, i32 2168; CHECK-NEXT: # %bb.0: 2169; CHECK-NEXT: call op_0_to_3 2170; CHECK-NEXT: local.set 2 2171; CHECK-NEXT: local.set 1 2172; CHECK-NEXT: local.set 0 2173; CHECK-NEXT: local.get 1 2174; CHECK-NEXT: local.get 0 2175; CHECK-NEXT: call op_2_to_0 2176; CHECK-NEXT: local.get 1 2177; CHECK-NEXT: local.get 2 2178; CHECK-NEXT: call op_2_to_0 2179; CHECK-NEXT: # fallthrough-return 2180 %t0 = call {i32, i32, i32} @op_0_to_3() 2181 %t1 = extractvalue {i32, i32, i32} %t0, 1 2182 %t2 = extractvalue {i32, i32, i32} %t0, 0 2183 call void @op_2_to_0(i32 %t1, i32 %t2) 2184 %t3 = extractvalue {i32, i32, i32} %t0, 1 2185 %t4 = extractvalue {i32, i32, i32} %t0, 2 2186 call void @op_2_to_0(i32 %t3, i32 %t4) 2187 ret void 2188} 2189 2190define void @f371() { 2191; CHECK-LABEL: f371: 2192; CHECK: .functype f371 () -> () 2193; CHECK-NEXT: .local i32, i32, i32 2194; CHECK-NEXT: # %bb.0: 2195; CHECK-NEXT: call op_0_to_3 2196; CHECK-NEXT: local.set 2 2197; CHECK-NEXT: local.set 1 2198; CHECK-NEXT: local.set 0 2199; CHECK-NEXT: local.get 1 2200; CHECK-NEXT: local.get 0 2201; CHECK-NEXT: call op_2_to_0 2202; CHECK-NEXT: local.get 2 2203; CHECK-NEXT: local.get 0 2204; CHECK-NEXT: call op_2_to_0 2205; CHECK-NEXT: # fallthrough-return 2206 %t0 = call {i32, i32, i32} @op_0_to_3() 2207 %t1 = extractvalue {i32, i32, i32} %t0, 1 2208 %t2 = extractvalue {i32, i32, i32} %t0, 0 2209 call void @op_2_to_0(i32 %t1, i32 %t2) 2210 %t3 = extractvalue {i32, i32, i32} %t0, 2 2211 %t4 = extractvalue {i32, i32, i32} %t0, 0 2212 call void @op_2_to_0(i32 %t3, i32 %t4) 2213 ret void 2214} 2215 2216define void @f372() { 2217; CHECK-LABEL: f372: 2218; CHECK: .functype f372 () -> () 2219; CHECK-NEXT: .local i32, i32, i32 2220; CHECK-NEXT: # %bb.0: 2221; CHECK-NEXT: call op_0_to_3 2222; CHECK-NEXT: local.set 2 2223; CHECK-NEXT: local.set 1 2224; CHECK-NEXT: local.set 0 2225; CHECK-NEXT: local.get 1 2226; CHECK-NEXT: local.get 0 2227; CHECK-NEXT: call op_2_to_0 2228; CHECK-NEXT: local.get 2 2229; CHECK-NEXT: local.get 1 2230; CHECK-NEXT: call op_2_to_0 2231; CHECK-NEXT: # fallthrough-return 2232 %t0 = call {i32, i32, i32} @op_0_to_3() 2233 %t1 = extractvalue {i32, i32, i32} %t0, 1 2234 %t2 = extractvalue {i32, i32, i32} %t0, 0 2235 call void @op_2_to_0(i32 %t1, i32 %t2) 2236 %t3 = extractvalue {i32, i32, i32} %t0, 2 2237 %t4 = extractvalue {i32, i32, i32} %t0, 1 2238 call void @op_2_to_0(i32 %t3, i32 %t4) 2239 ret void 2240} 2241 2242define void @f373() { 2243; CHECK-LABEL: f373: 2244; CHECK: .functype f373 () -> () 2245; CHECK-NEXT: .local i32, i32, i32 2246; CHECK-NEXT: # %bb.0: 2247; CHECK-NEXT: call op_0_to_3 2248; CHECK-NEXT: local.set 2 2249; CHECK-NEXT: local.set 1 2250; CHECK-NEXT: local.set 0 2251; CHECK-NEXT: local.get 1 2252; CHECK-NEXT: local.get 0 2253; CHECK-NEXT: call op_2_to_0 2254; CHECK-NEXT: local.get 2 2255; CHECK-NEXT: local.get 2 2256; CHECK-NEXT: call op_2_to_0 2257; CHECK-NEXT: # fallthrough-return 2258 %t0 = call {i32, i32, i32} @op_0_to_3() 2259 %t1 = extractvalue {i32, i32, i32} %t0, 1 2260 %t2 = extractvalue {i32, i32, i32} %t0, 0 2261 call void @op_2_to_0(i32 %t1, i32 %t2) 2262 %t3 = extractvalue {i32, i32, i32} %t0, 2 2263 %t4 = extractvalue {i32, i32, i32} %t0, 2 2264 call void @op_2_to_0(i32 %t3, i32 %t4) 2265 ret void 2266} 2267 2268define void @f374() { 2269; CHECK-LABEL: f374: 2270; CHECK: .functype f374 () -> () 2271; CHECK-NEXT: .local i32, i32 2272; CHECK-NEXT: # %bb.0: 2273; CHECK-NEXT: call op_0_to_3 2274; CHECK-NEXT: drop 2275; CHECK-NEXT: local.set 1 2276; CHECK-NEXT: local.set 0 2277; CHECK-NEXT: local.get 1 2278; CHECK-NEXT: local.get 1 2279; CHECK-NEXT: call op_2_to_0 2280; CHECK-NEXT: local.get 0 2281; CHECK-NEXT: call op_1_to_0 2282; CHECK-NEXT: # fallthrough-return 2283 %t0 = call {i32, i32, i32} @op_0_to_3() 2284 %t1 = extractvalue {i32, i32, i32} %t0, 1 2285 %t2 = extractvalue {i32, i32, i32} %t0, 1 2286 call void @op_2_to_0(i32 %t1, i32 %t2) 2287 %t3 = extractvalue {i32, i32, i32} %t0, 0 2288 call void @op_1_to_0(i32 %t3) 2289 ret void 2290} 2291 2292define void @f376() { 2293; CHECK-LABEL: f376: 2294; CHECK: .functype f376 () -> () 2295; CHECK-NEXT: .local i32, i32 2296; CHECK-NEXT: # %bb.0: 2297; CHECK-NEXT: call op_0_to_3 2298; CHECK-NEXT: local.set 1 2299; CHECK-NEXT: local.set 0 2300; CHECK-NEXT: drop 2301; CHECK-NEXT: local.get 0 2302; CHECK-NEXT: local.get 0 2303; CHECK-NEXT: call op_2_to_0 2304; CHECK-NEXT: local.get 1 2305; CHECK-NEXT: call op_1_to_0 2306; CHECK-NEXT: # fallthrough-return 2307 %t0 = call {i32, i32, i32} @op_0_to_3() 2308 %t1 = extractvalue {i32, i32, i32} %t0, 1 2309 %t2 = extractvalue {i32, i32, i32} %t0, 1 2310 call void @op_2_to_0(i32 %t1, i32 %t2) 2311 %t3 = extractvalue {i32, i32, i32} %t0, 2 2312 call void @op_1_to_0(i32 %t3) 2313 ret void 2314} 2315 2316define void @f377() { 2317; CHECK-LABEL: f377: 2318; CHECK: .functype f377 () -> () 2319; CHECK-NEXT: .local i32, i32 2320; CHECK-NEXT: # %bb.0: 2321; CHECK-NEXT: call op_0_to_3 2322; CHECK-NEXT: drop 2323; CHECK-NEXT: local.set 1 2324; CHECK-NEXT: local.set 0 2325; CHECK-NEXT: local.get 1 2326; CHECK-NEXT: local.get 1 2327; CHECK-NEXT: call op_2_to_0 2328; CHECK-NEXT: local.get 0 2329; CHECK-NEXT: local.get 0 2330; CHECK-NEXT: call op_2_to_0 2331; CHECK-NEXT: # fallthrough-return 2332 %t0 = call {i32, i32, i32} @op_0_to_3() 2333 %t1 = extractvalue {i32, i32, i32} %t0, 1 2334 %t2 = extractvalue {i32, i32, i32} %t0, 1 2335 call void @op_2_to_0(i32 %t1, i32 %t2) 2336 %t3 = extractvalue {i32, i32, i32} %t0, 0 2337 %t4 = extractvalue {i32, i32, i32} %t0, 0 2338 call void @op_2_to_0(i32 %t3, i32 %t4) 2339 ret void 2340} 2341 2342define void @f379() { 2343; CHECK-LABEL: f379: 2344; CHECK: .functype f379 () -> () 2345; CHECK-NEXT: .local i32, i32, i32 2346; CHECK-NEXT: # %bb.0: 2347; CHECK-NEXT: call op_0_to_3 2348; CHECK-NEXT: local.set 2 2349; CHECK-NEXT: local.set 1 2350; CHECK-NEXT: local.set 0 2351; CHECK-NEXT: local.get 1 2352; CHECK-NEXT: local.get 1 2353; CHECK-NEXT: call op_2_to_0 2354; CHECK-NEXT: local.get 0 2355; CHECK-NEXT: local.get 2 2356; CHECK-NEXT: call op_2_to_0 2357; CHECK-NEXT: # fallthrough-return 2358 %t0 = call {i32, i32, i32} @op_0_to_3() 2359 %t1 = extractvalue {i32, i32, i32} %t0, 1 2360 %t2 = extractvalue {i32, i32, i32} %t0, 1 2361 call void @op_2_to_0(i32 %t1, i32 %t2) 2362 %t3 = extractvalue {i32, i32, i32} %t0, 0 2363 %t4 = extractvalue {i32, i32, i32} %t0, 2 2364 call void @op_2_to_0(i32 %t3, i32 %t4) 2365 ret void 2366} 2367 2368define void @f383() { 2369; CHECK-LABEL: f383: 2370; CHECK: .functype f383 () -> () 2371; CHECK-NEXT: .local i32, i32, i32 2372; CHECK-NEXT: # %bb.0: 2373; CHECK-NEXT: call op_0_to_3 2374; CHECK-NEXT: local.set 2 2375; CHECK-NEXT: local.set 1 2376; CHECK-NEXT: local.set 0 2377; CHECK-NEXT: local.get 1 2378; CHECK-NEXT: local.get 1 2379; CHECK-NEXT: call op_2_to_0 2380; CHECK-NEXT: local.get 2 2381; CHECK-NEXT: local.get 0 2382; CHECK-NEXT: call op_2_to_0 2383; CHECK-NEXT: # fallthrough-return 2384 %t0 = call {i32, i32, i32} @op_0_to_3() 2385 %t1 = extractvalue {i32, i32, i32} %t0, 1 2386 %t2 = extractvalue {i32, i32, i32} %t0, 1 2387 call void @op_2_to_0(i32 %t1, i32 %t2) 2388 %t3 = extractvalue {i32, i32, i32} %t0, 2 2389 %t4 = extractvalue {i32, i32, i32} %t0, 0 2390 call void @op_2_to_0(i32 %t3, i32 %t4) 2391 ret void 2392} 2393 2394define void @f385() { 2395; CHECK-LABEL: f385: 2396; CHECK: .functype f385 () -> () 2397; CHECK-NEXT: .local i32, i32 2398; CHECK-NEXT: # %bb.0: 2399; CHECK-NEXT: call op_0_to_3 2400; CHECK-NEXT: local.set 1 2401; CHECK-NEXT: local.set 0 2402; CHECK-NEXT: drop 2403; CHECK-NEXT: local.get 0 2404; CHECK-NEXT: local.get 0 2405; CHECK-NEXT: call op_2_to_0 2406; CHECK-NEXT: local.get 1 2407; CHECK-NEXT: local.get 1 2408; CHECK-NEXT: call op_2_to_0 2409; CHECK-NEXT: # fallthrough-return 2410 %t0 = call {i32, i32, i32} @op_0_to_3() 2411 %t1 = extractvalue {i32, i32, i32} %t0, 1 2412 %t2 = extractvalue {i32, i32, i32} %t0, 1 2413 call void @op_2_to_0(i32 %t1, i32 %t2) 2414 %t3 = extractvalue {i32, i32, i32} %t0, 2 2415 %t4 = extractvalue {i32, i32, i32} %t0, 2 2416 call void @op_2_to_0(i32 %t3, i32 %t4) 2417 ret void 2418} 2419 2420define void @f386() { 2421; CHECK-LABEL: f386: 2422; CHECK: .functype f386 () -> () 2423; CHECK-NEXT: .local i32, i32, i32 2424; CHECK-NEXT: # %bb.0: 2425; CHECK-NEXT: call op_0_to_3 2426; CHECK-NEXT: local.set 2 2427; CHECK-NEXT: local.set 1 2428; CHECK-NEXT: local.set 0 2429; CHECK-NEXT: local.get 1 2430; CHECK-NEXT: local.get 2 2431; CHECK-NEXT: call op_2_to_0 2432; CHECK-NEXT: local.get 0 2433; CHECK-NEXT: call op_1_to_0 2434; CHECK-NEXT: # fallthrough-return 2435 %t0 = call {i32, i32, i32} @op_0_to_3() 2436 %t1 = extractvalue {i32, i32, i32} %t0, 1 2437 %t2 = extractvalue {i32, i32, i32} %t0, 2 2438 call void @op_2_to_0(i32 %t1, i32 %t2) 2439 %t3 = extractvalue {i32, i32, i32} %t0, 0 2440 call void @op_1_to_0(i32 %t3) 2441 ret void 2442} 2443 2444define void @f387() { 2445; CHECK-LABEL: f387: 2446; CHECK: .functype f387 () -> () 2447; CHECK-NEXT: .local i32, i32 2448; CHECK-NEXT: # %bb.0: 2449; CHECK-NEXT: call op_0_to_3 2450; CHECK-NEXT: local.set 1 2451; CHECK-NEXT: local.set 0 2452; CHECK-NEXT: drop 2453; CHECK-NEXT: local.get 0 2454; CHECK-NEXT: local.get 1 2455; CHECK-NEXT: call op_2_to_0 2456; CHECK-NEXT: local.get 0 2457; CHECK-NEXT: call op_1_to_0 2458; CHECK-NEXT: # fallthrough-return 2459 %t0 = call {i32, i32, i32} @op_0_to_3() 2460 %t1 = extractvalue {i32, i32, i32} %t0, 1 2461 %t2 = extractvalue {i32, i32, i32} %t0, 2 2462 call void @op_2_to_0(i32 %t1, i32 %t2) 2463 %t3 = extractvalue {i32, i32, i32} %t0, 1 2464 call void @op_1_to_0(i32 %t3) 2465 ret void 2466} 2467 2468define void @f388() { 2469; CHECK-LABEL: f388: 2470; CHECK: .functype f388 () -> () 2471; CHECK-NEXT: .local i32, i32 2472; CHECK-NEXT: # %bb.0: 2473; CHECK-NEXT: call op_0_to_3 2474; CHECK-NEXT: local.set 1 2475; CHECK-NEXT: local.set 0 2476; CHECK-NEXT: drop 2477; CHECK-NEXT: local.get 0 2478; CHECK-NEXT: local.get 1 2479; CHECK-NEXT: call op_2_to_0 2480; CHECK-NEXT: local.get 1 2481; CHECK-NEXT: call op_1_to_0 2482; CHECK-NEXT: # fallthrough-return 2483 %t0 = call {i32, i32, i32} @op_0_to_3() 2484 %t1 = extractvalue {i32, i32, i32} %t0, 1 2485 %t2 = extractvalue {i32, i32, i32} %t0, 2 2486 call void @op_2_to_0(i32 %t1, i32 %t2) 2487 %t3 = extractvalue {i32, i32, i32} %t0, 2 2488 call void @op_1_to_0(i32 %t3) 2489 ret void 2490} 2491 2492define void @f389() { 2493; CHECK-LABEL: f389: 2494; CHECK: .functype f389 () -> () 2495; CHECK-NEXT: .local i32, i32, i32 2496; CHECK-NEXT: # %bb.0: 2497; CHECK-NEXT: call op_0_to_3 2498; CHECK-NEXT: local.set 2 2499; CHECK-NEXT: local.set 1 2500; CHECK-NEXT: local.set 0 2501; CHECK-NEXT: local.get 1 2502; CHECK-NEXT: local.get 2 2503; CHECK-NEXT: call op_2_to_0 2504; CHECK-NEXT: local.get 0 2505; CHECK-NEXT: local.get 0 2506; CHECK-NEXT: call op_2_to_0 2507; CHECK-NEXT: # fallthrough-return 2508 %t0 = call {i32, i32, i32} @op_0_to_3() 2509 %t1 = extractvalue {i32, i32, i32} %t0, 1 2510 %t2 = extractvalue {i32, i32, i32} %t0, 2 2511 call void @op_2_to_0(i32 %t1, i32 %t2) 2512 %t3 = extractvalue {i32, i32, i32} %t0, 0 2513 %t4 = extractvalue {i32, i32, i32} %t0, 0 2514 call void @op_2_to_0(i32 %t3, i32 %t4) 2515 ret void 2516} 2517 2518define void @f390() { 2519; CHECK-LABEL: f390: 2520; CHECK: .functype f390 () -> () 2521; CHECK-NEXT: .local i32, i32, i32 2522; CHECK-NEXT: # %bb.0: 2523; CHECK-NEXT: call op_0_to_3 2524; CHECK-NEXT: local.set 2 2525; CHECK-NEXT: local.set 1 2526; CHECK-NEXT: local.set 0 2527; CHECK-NEXT: local.get 1 2528; CHECK-NEXT: local.get 2 2529; CHECK-NEXT: call op_2_to_0 2530; CHECK-NEXT: local.get 0 2531; CHECK-NEXT: local.get 1 2532; CHECK-NEXT: call op_2_to_0 2533; CHECK-NEXT: # fallthrough-return 2534 %t0 = call {i32, i32, i32} @op_0_to_3() 2535 %t1 = extractvalue {i32, i32, i32} %t0, 1 2536 %t2 = extractvalue {i32, i32, i32} %t0, 2 2537 call void @op_2_to_0(i32 %t1, i32 %t2) 2538 %t3 = extractvalue {i32, i32, i32} %t0, 0 2539 %t4 = extractvalue {i32, i32, i32} %t0, 1 2540 call void @op_2_to_0(i32 %t3, i32 %t4) 2541 ret void 2542} 2543 2544define void @f391() { 2545; CHECK-LABEL: f391: 2546; CHECK: .functype f391 () -> () 2547; CHECK-NEXT: .local i32, i32, i32 2548; CHECK-NEXT: # %bb.0: 2549; CHECK-NEXT: call op_0_to_3 2550; CHECK-NEXT: local.set 2 2551; CHECK-NEXT: local.set 1 2552; CHECK-NEXT: local.set 0 2553; CHECK-NEXT: local.get 1 2554; CHECK-NEXT: local.get 2 2555; CHECK-NEXT: call op_2_to_0 2556; CHECK-NEXT: local.get 0 2557; CHECK-NEXT: local.get 2 2558; CHECK-NEXT: call op_2_to_0 2559; CHECK-NEXT: # fallthrough-return 2560 %t0 = call {i32, i32, i32} @op_0_to_3() 2561 %t1 = extractvalue {i32, i32, i32} %t0, 1 2562 %t2 = extractvalue {i32, i32, i32} %t0, 2 2563 call void @op_2_to_0(i32 %t1, i32 %t2) 2564 %t3 = extractvalue {i32, i32, i32} %t0, 0 2565 %t4 = extractvalue {i32, i32, i32} %t0, 2 2566 call void @op_2_to_0(i32 %t3, i32 %t4) 2567 ret void 2568} 2569 2570define void @f392() { 2571; CHECK-LABEL: f392: 2572; CHECK: .functype f392 () -> () 2573; CHECK-NEXT: .local i32, i32, i32 2574; CHECK-NEXT: # %bb.0: 2575; CHECK-NEXT: call op_0_to_3 2576; CHECK-NEXT: local.set 2 2577; CHECK-NEXT: local.set 1 2578; CHECK-NEXT: local.set 0 2579; CHECK-NEXT: local.get 1 2580; CHECK-NEXT: local.get 2 2581; CHECK-NEXT: call op_2_to_0 2582; CHECK-NEXT: local.get 1 2583; CHECK-NEXT: local.get 0 2584; CHECK-NEXT: call op_2_to_0 2585; CHECK-NEXT: # fallthrough-return 2586 %t0 = call {i32, i32, i32} @op_0_to_3() 2587 %t1 = extractvalue {i32, i32, i32} %t0, 1 2588 %t2 = extractvalue {i32, i32, i32} %t0, 2 2589 call void @op_2_to_0(i32 %t1, i32 %t2) 2590 %t3 = extractvalue {i32, i32, i32} %t0, 1 2591 %t4 = extractvalue {i32, i32, i32} %t0, 0 2592 call void @op_2_to_0(i32 %t3, i32 %t4) 2593 ret void 2594} 2595 2596define void @f395() { 2597; CHECK-LABEL: f395: 2598; CHECK: .functype f395 () -> () 2599; CHECK-NEXT: .local i32, i32, i32 2600; CHECK-NEXT: # %bb.0: 2601; CHECK-NEXT: call op_0_to_3 2602; CHECK-NEXT: local.set 2 2603; CHECK-NEXT: local.set 1 2604; CHECK-NEXT: local.set 0 2605; CHECK-NEXT: local.get 1 2606; CHECK-NEXT: local.get 2 2607; CHECK-NEXT: call op_2_to_0 2608; CHECK-NEXT: local.get 2 2609; CHECK-NEXT: local.get 0 2610; CHECK-NEXT: call op_2_to_0 2611; CHECK-NEXT: # fallthrough-return 2612 %t0 = call {i32, i32, i32} @op_0_to_3() 2613 %t1 = extractvalue {i32, i32, i32} %t0, 1 2614 %t2 = extractvalue {i32, i32, i32} %t0, 2 2615 call void @op_2_to_0(i32 %t1, i32 %t2) 2616 %t3 = extractvalue {i32, i32, i32} %t0, 2 2617 %t4 = extractvalue {i32, i32, i32} %t0, 0 2618 call void @op_2_to_0(i32 %t3, i32 %t4) 2619 ret void 2620} 2621 2622define void @f396() { 2623; CHECK-LABEL: f396: 2624; CHECK: .functype f396 () -> () 2625; CHECK-NEXT: .local i32, i32 2626; CHECK-NEXT: # %bb.0: 2627; CHECK-NEXT: call op_0_to_3 2628; CHECK-NEXT: local.set 1 2629; CHECK-NEXT: local.set 0 2630; CHECK-NEXT: drop 2631; CHECK-NEXT: local.get 0 2632; CHECK-NEXT: local.get 1 2633; CHECK-NEXT: call op_2_to_0 2634; CHECK-NEXT: local.get 1 2635; CHECK-NEXT: local.get 0 2636; CHECK-NEXT: call op_2_to_0 2637; CHECK-NEXT: # fallthrough-return 2638 %t0 = call {i32, i32, i32} @op_0_to_3() 2639 %t1 = extractvalue {i32, i32, i32} %t0, 1 2640 %t2 = extractvalue {i32, i32, i32} %t0, 2 2641 call void @op_2_to_0(i32 %t1, i32 %t2) 2642 %t3 = extractvalue {i32, i32, i32} %t0, 2 2643 %t4 = extractvalue {i32, i32, i32} %t0, 1 2644 call void @op_2_to_0(i32 %t3, i32 %t4) 2645 ret void 2646} 2647 2648define void @f398() { 2649; CHECK-LABEL: f398: 2650; CHECK: .functype f398 () -> () 2651; CHECK-NEXT: .local i32, i32 2652; CHECK-NEXT: # %bb.0: 2653; CHECK-NEXT: call op_0_to_3 2654; CHECK-NEXT: local.set 1 2655; CHECK-NEXT: drop 2656; CHECK-NEXT: local.set 0 2657; CHECK-NEXT: local.get 1 2658; CHECK-NEXT: local.get 0 2659; CHECK-NEXT: call op_2_to_0 2660; CHECK-NEXT: local.get 0 2661; CHECK-NEXT: call op_1_to_0 2662; CHECK-NEXT: # fallthrough-return 2663 %t0 = call {i32, i32, i32} @op_0_to_3() 2664 %t1 = extractvalue {i32, i32, i32} %t0, 2 2665 %t2 = extractvalue {i32, i32, i32} %t0, 0 2666 call void @op_2_to_0(i32 %t1, i32 %t2) 2667 %t3 = extractvalue {i32, i32, i32} %t0, 0 2668 call void @op_1_to_0(i32 %t3) 2669 ret void 2670} 2671 2672define void @f399() { 2673; CHECK-LABEL: f399: 2674; CHECK: .functype f399 () -> () 2675; CHECK-NEXT: .local i32, i32, i32 2676; CHECK-NEXT: # %bb.0: 2677; CHECK-NEXT: call op_0_to_3 2678; CHECK-NEXT: local.set 2 2679; CHECK-NEXT: local.set 1 2680; CHECK-NEXT: local.set 0 2681; CHECK-NEXT: local.get 2 2682; CHECK-NEXT: local.get 0 2683; CHECK-NEXT: call op_2_to_0 2684; CHECK-NEXT: local.get 1 2685; CHECK-NEXT: call op_1_to_0 2686; CHECK-NEXT: # fallthrough-return 2687 %t0 = call {i32, i32, i32} @op_0_to_3() 2688 %t1 = extractvalue {i32, i32, i32} %t0, 2 2689 %t2 = extractvalue {i32, i32, i32} %t0, 0 2690 call void @op_2_to_0(i32 %t1, i32 %t2) 2691 %t3 = extractvalue {i32, i32, i32} %t0, 1 2692 call void @op_1_to_0(i32 %t3) 2693 ret void 2694} 2695 2696define void @f400() { 2697; CHECK-LABEL: f400: 2698; CHECK: .functype f400 () -> () 2699; CHECK-NEXT: .local i32, i32 2700; CHECK-NEXT: # %bb.0: 2701; CHECK-NEXT: call op_0_to_3 2702; CHECK-NEXT: local.set 1 2703; CHECK-NEXT: drop 2704; CHECK-NEXT: local.set 0 2705; CHECK-NEXT: local.get 1 2706; CHECK-NEXT: local.get 0 2707; CHECK-NEXT: call op_2_to_0 2708; CHECK-NEXT: local.get 1 2709; CHECK-NEXT: call op_1_to_0 2710; CHECK-NEXT: # fallthrough-return 2711 %t0 = call {i32, i32, i32} @op_0_to_3() 2712 %t1 = extractvalue {i32, i32, i32} %t0, 2 2713 %t2 = extractvalue {i32, i32, i32} %t0, 0 2714 call void @op_2_to_0(i32 %t1, i32 %t2) 2715 %t3 = extractvalue {i32, i32, i32} %t0, 2 2716 call void @op_1_to_0(i32 %t3) 2717 ret void 2718} 2719 2720define void @f402() { 2721; CHECK-LABEL: f402: 2722; CHECK: .functype f402 () -> () 2723; CHECK-NEXT: .local i32, i32, i32 2724; CHECK-NEXT: # %bb.0: 2725; CHECK-NEXT: call op_0_to_3 2726; CHECK-NEXT: local.set 2 2727; CHECK-NEXT: local.set 1 2728; CHECK-NEXT: local.set 0 2729; CHECK-NEXT: local.get 2 2730; CHECK-NEXT: local.get 0 2731; CHECK-NEXT: call op_2_to_0 2732; CHECK-NEXT: local.get 0 2733; CHECK-NEXT: local.get 1 2734; CHECK-NEXT: call op_2_to_0 2735; CHECK-NEXT: # fallthrough-return 2736 %t0 = call {i32, i32, i32} @op_0_to_3() 2737 %t1 = extractvalue {i32, i32, i32} %t0, 2 2738 %t2 = extractvalue {i32, i32, i32} %t0, 0 2739 call void @op_2_to_0(i32 %t1, i32 %t2) 2740 %t3 = extractvalue {i32, i32, i32} %t0, 0 2741 %t4 = extractvalue {i32, i32, i32} %t0, 1 2742 call void @op_2_to_0(i32 %t3, i32 %t4) 2743 ret void 2744} 2745 2746define void @f403() { 2747; CHECK-LABEL: f403: 2748; CHECK: .functype f403 () -> () 2749; CHECK-NEXT: .local i32, i32 2750; CHECK-NEXT: # %bb.0: 2751; CHECK-NEXT: call op_0_to_3 2752; CHECK-NEXT: local.set 1 2753; CHECK-NEXT: drop 2754; CHECK-NEXT: local.set 0 2755; CHECK-NEXT: local.get 1 2756; CHECK-NEXT: local.get 0 2757; CHECK-NEXT: call op_2_to_0 2758; CHECK-NEXT: local.get 0 2759; CHECK-NEXT: local.get 1 2760; CHECK-NEXT: call op_2_to_0 2761; CHECK-NEXT: # fallthrough-return 2762 %t0 = call {i32, i32, i32} @op_0_to_3() 2763 %t1 = extractvalue {i32, i32, i32} %t0, 2 2764 %t2 = extractvalue {i32, i32, i32} %t0, 0 2765 call void @op_2_to_0(i32 %t1, i32 %t2) 2766 %t3 = extractvalue {i32, i32, i32} %t0, 0 2767 %t4 = extractvalue {i32, i32, i32} %t0, 2 2768 call void @op_2_to_0(i32 %t3, i32 %t4) 2769 ret void 2770} 2771 2772define void @f404() { 2773; CHECK-LABEL: f404: 2774; CHECK: .functype f404 () -> () 2775; CHECK-NEXT: .local i32, i32, i32 2776; CHECK-NEXT: # %bb.0: 2777; CHECK-NEXT: call op_0_to_3 2778; CHECK-NEXT: local.set 2 2779; CHECK-NEXT: local.set 1 2780; CHECK-NEXT: local.set 0 2781; CHECK-NEXT: local.get 2 2782; CHECK-NEXT: local.get 0 2783; CHECK-NEXT: call op_2_to_0 2784; CHECK-NEXT: local.get 1 2785; CHECK-NEXT: local.get 0 2786; CHECK-NEXT: call op_2_to_0 2787; CHECK-NEXT: # fallthrough-return 2788 %t0 = call {i32, i32, i32} @op_0_to_3() 2789 %t1 = extractvalue {i32, i32, i32} %t0, 2 2790 %t2 = extractvalue {i32, i32, i32} %t0, 0 2791 call void @op_2_to_0(i32 %t1, i32 %t2) 2792 %t3 = extractvalue {i32, i32, i32} %t0, 1 2793 %t4 = extractvalue {i32, i32, i32} %t0, 0 2794 call void @op_2_to_0(i32 %t3, i32 %t4) 2795 ret void 2796} 2797 2798define void @f405() { 2799; CHECK-LABEL: f405: 2800; CHECK: .functype f405 () -> () 2801; CHECK-NEXT: .local i32, i32, i32 2802; CHECK-NEXT: # %bb.0: 2803; CHECK-NEXT: call op_0_to_3 2804; CHECK-NEXT: local.set 2 2805; CHECK-NEXT: local.set 1 2806; CHECK-NEXT: local.set 0 2807; CHECK-NEXT: local.get 2 2808; CHECK-NEXT: local.get 0 2809; CHECK-NEXT: call op_2_to_0 2810; CHECK-NEXT: local.get 1 2811; CHECK-NEXT: local.get 1 2812; CHECK-NEXT: call op_2_to_0 2813; CHECK-NEXT: # fallthrough-return 2814 %t0 = call {i32, i32, i32} @op_0_to_3() 2815 %t1 = extractvalue {i32, i32, i32} %t0, 2 2816 %t2 = extractvalue {i32, i32, i32} %t0, 0 2817 call void @op_2_to_0(i32 %t1, i32 %t2) 2818 %t3 = extractvalue {i32, i32, i32} %t0, 1 2819 %t4 = extractvalue {i32, i32, i32} %t0, 1 2820 call void @op_2_to_0(i32 %t3, i32 %t4) 2821 ret void 2822} 2823 2824define void @f406() { 2825; CHECK-LABEL: f406: 2826; CHECK: .functype f406 () -> () 2827; CHECK-NEXT: .local i32, i32, i32 2828; CHECK-NEXT: # %bb.0: 2829; CHECK-NEXT: call op_0_to_3 2830; CHECK-NEXT: local.set 2 2831; CHECK-NEXT: local.set 1 2832; CHECK-NEXT: local.set 0 2833; CHECK-NEXT: local.get 2 2834; CHECK-NEXT: local.get 0 2835; CHECK-NEXT: call op_2_to_0 2836; CHECK-NEXT: local.get 1 2837; CHECK-NEXT: local.get 2 2838; CHECK-NEXT: call op_2_to_0 2839; CHECK-NEXT: # fallthrough-return 2840 %t0 = call {i32, i32, i32} @op_0_to_3() 2841 %t1 = extractvalue {i32, i32, i32} %t0, 2 2842 %t2 = extractvalue {i32, i32, i32} %t0, 0 2843 call void @op_2_to_0(i32 %t1, i32 %t2) 2844 %t3 = extractvalue {i32, i32, i32} %t0, 1 2845 %t4 = extractvalue {i32, i32, i32} %t0, 2 2846 call void @op_2_to_0(i32 %t3, i32 %t4) 2847 ret void 2848} 2849 2850define void @f408() { 2851; CHECK-LABEL: f408: 2852; CHECK: .functype f408 () -> () 2853; CHECK-NEXT: .local i32, i32, i32 2854; CHECK-NEXT: # %bb.0: 2855; CHECK-NEXT: call op_0_to_3 2856; CHECK-NEXT: local.set 2 2857; CHECK-NEXT: local.set 1 2858; CHECK-NEXT: local.set 0 2859; CHECK-NEXT: local.get 2 2860; CHECK-NEXT: local.get 0 2861; CHECK-NEXT: call op_2_to_0 2862; CHECK-NEXT: local.get 2 2863; CHECK-NEXT: local.get 1 2864; CHECK-NEXT: call op_2_to_0 2865; CHECK-NEXT: # fallthrough-return 2866 %t0 = call {i32, i32, i32} @op_0_to_3() 2867 %t1 = extractvalue {i32, i32, i32} %t0, 2 2868 %t2 = extractvalue {i32, i32, i32} %t0, 0 2869 call void @op_2_to_0(i32 %t1, i32 %t2) 2870 %t3 = extractvalue {i32, i32, i32} %t0, 2 2871 %t4 = extractvalue {i32, i32, i32} %t0, 1 2872 call void @op_2_to_0(i32 %t3, i32 %t4) 2873 ret void 2874} 2875 2876define void @f410() { 2877; CHECK-LABEL: f410: 2878; CHECK: .functype f410 () -> () 2879; CHECK-NEXT: .local i32, i32, i32 2880; CHECK-NEXT: # %bb.0: 2881; CHECK-NEXT: call op_0_to_3 2882; CHECK-NEXT: local.set 2 2883; CHECK-NEXT: local.set 1 2884; CHECK-NEXT: local.set 0 2885; CHECK-NEXT: local.get 2 2886; CHECK-NEXT: local.get 1 2887; CHECK-NEXT: call op_2_to_0 2888; CHECK-NEXT: local.get 0 2889; CHECK-NEXT: call op_1_to_0 2890; CHECK-NEXT: # fallthrough-return 2891 %t0 = call {i32, i32, i32} @op_0_to_3() 2892 %t1 = extractvalue {i32, i32, i32} %t0, 2 2893 %t2 = extractvalue {i32, i32, i32} %t0, 1 2894 call void @op_2_to_0(i32 %t1, i32 %t2) 2895 %t3 = extractvalue {i32, i32, i32} %t0, 0 2896 call void @op_1_to_0(i32 %t3) 2897 ret void 2898} 2899 2900define void @f411() { 2901; CHECK-LABEL: f411: 2902; CHECK: .functype f411 () -> () 2903; CHECK-NEXT: .local i32, i32 2904; CHECK-NEXT: # %bb.0: 2905; CHECK-NEXT: call op_0_to_3 2906; CHECK-NEXT: local.set 1 2907; CHECK-NEXT: local.set 0 2908; CHECK-NEXT: drop 2909; CHECK-NEXT: local.get 1 2910; CHECK-NEXT: local.get 0 2911; CHECK-NEXT: call op_2_to_0 2912; CHECK-NEXT: local.get 0 2913; CHECK-NEXT: call op_1_to_0 2914; CHECK-NEXT: # fallthrough-return 2915 %t0 = call {i32, i32, i32} @op_0_to_3() 2916 %t1 = extractvalue {i32, i32, i32} %t0, 2 2917 %t2 = extractvalue {i32, i32, i32} %t0, 1 2918 call void @op_2_to_0(i32 %t1, i32 %t2) 2919 %t3 = extractvalue {i32, i32, i32} %t0, 1 2920 call void @op_1_to_0(i32 %t3) 2921 ret void 2922} 2923 2924define void @f412() { 2925; CHECK-LABEL: f412: 2926; CHECK: .functype f412 () -> () 2927; CHECK-NEXT: .local i32, i32 2928; CHECK-NEXT: # %bb.0: 2929; CHECK-NEXT: call op_0_to_3 2930; CHECK-NEXT: local.set 1 2931; CHECK-NEXT: local.set 0 2932; CHECK-NEXT: drop 2933; CHECK-NEXT: local.get 1 2934; CHECK-NEXT: local.get 0 2935; CHECK-NEXT: call op_2_to_0 2936; CHECK-NEXT: local.get 1 2937; CHECK-NEXT: call op_1_to_0 2938; CHECK-NEXT: # fallthrough-return 2939 %t0 = call {i32, i32, i32} @op_0_to_3() 2940 %t1 = extractvalue {i32, i32, i32} %t0, 2 2941 %t2 = extractvalue {i32, i32, i32} %t0, 1 2942 call void @op_2_to_0(i32 %t1, i32 %t2) 2943 %t3 = extractvalue {i32, i32, i32} %t0, 2 2944 call void @op_1_to_0(i32 %t3) 2945 ret void 2946} 2947 2948define void @f413() { 2949; CHECK-LABEL: f413: 2950; CHECK: .functype f413 () -> () 2951; CHECK-NEXT: .local i32, i32, i32 2952; CHECK-NEXT: # %bb.0: 2953; CHECK-NEXT: call op_0_to_3 2954; CHECK-NEXT: local.set 2 2955; CHECK-NEXT: local.set 1 2956; CHECK-NEXT: local.set 0 2957; CHECK-NEXT: local.get 2 2958; CHECK-NEXT: local.get 1 2959; CHECK-NEXT: call op_2_to_0 2960; CHECK-NEXT: local.get 0 2961; CHECK-NEXT: local.get 0 2962; CHECK-NEXT: call op_2_to_0 2963; CHECK-NEXT: # fallthrough-return 2964 %t0 = call {i32, i32, i32} @op_0_to_3() 2965 %t1 = extractvalue {i32, i32, i32} %t0, 2 2966 %t2 = extractvalue {i32, i32, i32} %t0, 1 2967 call void @op_2_to_0(i32 %t1, i32 %t2) 2968 %t3 = extractvalue {i32, i32, i32} %t0, 0 2969 %t4 = extractvalue {i32, i32, i32} %t0, 0 2970 call void @op_2_to_0(i32 %t3, i32 %t4) 2971 ret void 2972} 2973 2974define void @f414() { 2975; CHECK-LABEL: f414: 2976; CHECK: .functype f414 () -> () 2977; CHECK-NEXT: .local i32, i32, i32 2978; CHECK-NEXT: # %bb.0: 2979; CHECK-NEXT: call op_0_to_3 2980; CHECK-NEXT: local.set 2 2981; CHECK-NEXT: local.set 1 2982; CHECK-NEXT: local.set 0 2983; CHECK-NEXT: local.get 2 2984; CHECK-NEXT: local.get 1 2985; CHECK-NEXT: call op_2_to_0 2986; CHECK-NEXT: local.get 0 2987; CHECK-NEXT: local.get 1 2988; CHECK-NEXT: call op_2_to_0 2989; CHECK-NEXT: # fallthrough-return 2990 %t0 = call {i32, i32, i32} @op_0_to_3() 2991 %t1 = extractvalue {i32, i32, i32} %t0, 2 2992 %t2 = extractvalue {i32, i32, i32} %t0, 1 2993 call void @op_2_to_0(i32 %t1, i32 %t2) 2994 %t3 = extractvalue {i32, i32, i32} %t0, 0 2995 %t4 = extractvalue {i32, i32, i32} %t0, 1 2996 call void @op_2_to_0(i32 %t3, i32 %t4) 2997 ret void 2998} 2999 3000define void @f415() { 3001; CHECK-LABEL: f415: 3002; CHECK: .functype f415 () -> () 3003; CHECK-NEXT: .local i32, i32, i32 3004; CHECK-NEXT: # %bb.0: 3005; CHECK-NEXT: call op_0_to_3 3006; CHECK-NEXT: local.set 2 3007; CHECK-NEXT: local.set 1 3008; CHECK-NEXT: local.set 0 3009; CHECK-NEXT: local.get 2 3010; CHECK-NEXT: local.get 1 3011; CHECK-NEXT: call op_2_to_0 3012; CHECK-NEXT: local.get 0 3013; CHECK-NEXT: local.get 2 3014; CHECK-NEXT: call op_2_to_0 3015; CHECK-NEXT: # fallthrough-return 3016 %t0 = call {i32, i32, i32} @op_0_to_3() 3017 %t1 = extractvalue {i32, i32, i32} %t0, 2 3018 %t2 = extractvalue {i32, i32, i32} %t0, 1 3019 call void @op_2_to_0(i32 %t1, i32 %t2) 3020 %t3 = extractvalue {i32, i32, i32} %t0, 0 3021 %t4 = extractvalue {i32, i32, i32} %t0, 2 3022 call void @op_2_to_0(i32 %t3, i32 %t4) 3023 ret void 3024} 3025 3026define void @f416() { 3027; CHECK-LABEL: f416: 3028; CHECK: .functype f416 () -> () 3029; CHECK-NEXT: .local i32, i32, i32 3030; CHECK-NEXT: # %bb.0: 3031; CHECK-NEXT: call op_0_to_3 3032; CHECK-NEXT: local.set 2 3033; CHECK-NEXT: local.set 1 3034; CHECK-NEXT: local.set 0 3035; CHECK-NEXT: local.get 2 3036; CHECK-NEXT: local.get 1 3037; CHECK-NEXT: call op_2_to_0 3038; CHECK-NEXT: local.get 1 3039; CHECK-NEXT: local.get 0 3040; CHECK-NEXT: call op_2_to_0 3041; CHECK-NEXT: # fallthrough-return 3042 %t0 = call {i32, i32, i32} @op_0_to_3() 3043 %t1 = extractvalue {i32, i32, i32} %t0, 2 3044 %t2 = extractvalue {i32, i32, i32} %t0, 1 3045 call void @op_2_to_0(i32 %t1, i32 %t2) 3046 %t3 = extractvalue {i32, i32, i32} %t0, 1 3047 %t4 = extractvalue {i32, i32, i32} %t0, 0 3048 call void @op_2_to_0(i32 %t3, i32 %t4) 3049 ret void 3050} 3051 3052define void @f418() { 3053; CHECK-LABEL: f418: 3054; CHECK: .functype f418 () -> () 3055; CHECK-NEXT: .local i32, i32 3056; CHECK-NEXT: # %bb.0: 3057; CHECK-NEXT: call op_0_to_3 3058; CHECK-NEXT: local.set 1 3059; CHECK-NEXT: local.set 0 3060; CHECK-NEXT: drop 3061; CHECK-NEXT: local.get 1 3062; CHECK-NEXT: local.get 0 3063; CHECK-NEXT: call op_2_to_0 3064; CHECK-NEXT: local.get 0 3065; CHECK-NEXT: local.get 1 3066; CHECK-NEXT: call op_2_to_0 3067; CHECK-NEXT: # fallthrough-return 3068 %t0 = call {i32, i32, i32} @op_0_to_3() 3069 %t1 = extractvalue {i32, i32, i32} %t0, 2 3070 %t2 = extractvalue {i32, i32, i32} %t0, 1 3071 call void @op_2_to_0(i32 %t1, i32 %t2) 3072 %t3 = extractvalue {i32, i32, i32} %t0, 1 3073 %t4 = extractvalue {i32, i32, i32} %t0, 2 3074 call void @op_2_to_0(i32 %t3, i32 %t4) 3075 ret void 3076} 3077 3078define void @f419() { 3079; CHECK-LABEL: f419: 3080; CHECK: .functype f419 () -> () 3081; CHECK-NEXT: .local i32, i32, i32 3082; CHECK-NEXT: # %bb.0: 3083; CHECK-NEXT: call op_0_to_3 3084; CHECK-NEXT: local.set 2 3085; CHECK-NEXT: local.set 1 3086; CHECK-NEXT: local.set 0 3087; CHECK-NEXT: local.get 2 3088; CHECK-NEXT: local.get 1 3089; CHECK-NEXT: call op_2_to_0 3090; CHECK-NEXT: local.get 2 3091; CHECK-NEXT: local.get 0 3092; CHECK-NEXT: call op_2_to_0 3093; CHECK-NEXT: # fallthrough-return 3094 %t0 = call {i32, i32, i32} @op_0_to_3() 3095 %t1 = extractvalue {i32, i32, i32} %t0, 2 3096 %t2 = extractvalue {i32, i32, i32} %t0, 1 3097 call void @op_2_to_0(i32 %t1, i32 %t2) 3098 %t3 = extractvalue {i32, i32, i32} %t0, 2 3099 %t4 = extractvalue {i32, i32, i32} %t0, 0 3100 call void @op_2_to_0(i32 %t3, i32 %t4) 3101 ret void 3102} 3103 3104define void @f422() { 3105; CHECK-LABEL: f422: 3106; CHECK: .functype f422 () -> () 3107; CHECK-NEXT: .local i32, i32 3108; CHECK-NEXT: # %bb.0: 3109; CHECK-NEXT: call op_0_to_3 3110; CHECK-NEXT: local.set 1 3111; CHECK-NEXT: drop 3112; CHECK-NEXT: local.set 0 3113; CHECK-NEXT: local.get 1 3114; CHECK-NEXT: local.get 1 3115; CHECK-NEXT: call op_2_to_0 3116; CHECK-NEXT: local.get 0 3117; CHECK-NEXT: call op_1_to_0 3118; CHECK-NEXT: # fallthrough-return 3119 %t0 = call {i32, i32, i32} @op_0_to_3() 3120 %t1 = extractvalue {i32, i32, i32} %t0, 2 3121 %t2 = extractvalue {i32, i32, i32} %t0, 2 3122 call void @op_2_to_0(i32 %t1, i32 %t2) 3123 %t3 = extractvalue {i32, i32, i32} %t0, 0 3124 call void @op_1_to_0(i32 %t3) 3125 ret void 3126} 3127 3128define void @f423() { 3129; CHECK-LABEL: f423: 3130; CHECK: .functype f423 () -> () 3131; CHECK-NEXT: .local i32, i32 3132; CHECK-NEXT: # %bb.0: 3133; CHECK-NEXT: call op_0_to_3 3134; CHECK-NEXT: local.set 1 3135; CHECK-NEXT: local.set 0 3136; CHECK-NEXT: drop 3137; CHECK-NEXT: local.get 1 3138; CHECK-NEXT: local.get 1 3139; CHECK-NEXT: call op_2_to_0 3140; CHECK-NEXT: local.get 0 3141; CHECK-NEXT: call op_1_to_0 3142; CHECK-NEXT: # fallthrough-return 3143 %t0 = call {i32, i32, i32} @op_0_to_3() 3144 %t1 = extractvalue {i32, i32, i32} %t0, 2 3145 %t2 = extractvalue {i32, i32, i32} %t0, 2 3146 call void @op_2_to_0(i32 %t1, i32 %t2) 3147 %t3 = extractvalue {i32, i32, i32} %t0, 1 3148 call void @op_1_to_0(i32 %t3) 3149 ret void 3150} 3151 3152define void @f425() { 3153; CHECK-LABEL: f425: 3154; CHECK: .functype f425 () -> () 3155; CHECK-NEXT: .local i32, i32 3156; CHECK-NEXT: # %bb.0: 3157; CHECK-NEXT: call op_0_to_3 3158; CHECK-NEXT: local.set 1 3159; CHECK-NEXT: drop 3160; CHECK-NEXT: local.set 0 3161; CHECK-NEXT: local.get 1 3162; CHECK-NEXT: local.get 1 3163; CHECK-NEXT: call op_2_to_0 3164; CHECK-NEXT: local.get 0 3165; CHECK-NEXT: local.get 0 3166; CHECK-NEXT: call op_2_to_0 3167; CHECK-NEXT: # fallthrough-return 3168 %t0 = call {i32, i32, i32} @op_0_to_3() 3169 %t1 = extractvalue {i32, i32, i32} %t0, 2 3170 %t2 = extractvalue {i32, i32, i32} %t0, 2 3171 call void @op_2_to_0(i32 %t1, i32 %t2) 3172 %t3 = extractvalue {i32, i32, i32} %t0, 0 3173 %t4 = extractvalue {i32, i32, i32} %t0, 0 3174 call void @op_2_to_0(i32 %t3, i32 %t4) 3175 ret void 3176} 3177 3178define void @f426() { 3179; CHECK-LABEL: f426: 3180; CHECK: .functype f426 () -> () 3181; CHECK-NEXT: .local i32, i32, i32 3182; CHECK-NEXT: # %bb.0: 3183; CHECK-NEXT: call op_0_to_3 3184; CHECK-NEXT: local.set 2 3185; CHECK-NEXT: local.set 1 3186; CHECK-NEXT: local.set 0 3187; CHECK-NEXT: local.get 2 3188; CHECK-NEXT: local.get 2 3189; CHECK-NEXT: call op_2_to_0 3190; CHECK-NEXT: local.get 0 3191; CHECK-NEXT: local.get 1 3192; CHECK-NEXT: call op_2_to_0 3193; CHECK-NEXT: # fallthrough-return 3194 %t0 = call {i32, i32, i32} @op_0_to_3() 3195 %t1 = extractvalue {i32, i32, i32} %t0, 2 3196 %t2 = extractvalue {i32, i32, i32} %t0, 2 3197 call void @op_2_to_0(i32 %t1, i32 %t2) 3198 %t3 = extractvalue {i32, i32, i32} %t0, 0 3199 %t4 = extractvalue {i32, i32, i32} %t0, 1 3200 call void @op_2_to_0(i32 %t3, i32 %t4) 3201 ret void 3202} 3203 3204define void @f428() { 3205; CHECK-LABEL: f428: 3206; CHECK: .functype f428 () -> () 3207; CHECK-NEXT: .local i32, i32, i32 3208; CHECK-NEXT: # %bb.0: 3209; CHECK-NEXT: call op_0_to_3 3210; CHECK-NEXT: local.set 2 3211; CHECK-NEXT: local.set 1 3212; CHECK-NEXT: local.set 0 3213; CHECK-NEXT: local.get 2 3214; CHECK-NEXT: local.get 2 3215; CHECK-NEXT: call op_2_to_0 3216; CHECK-NEXT: local.get 1 3217; CHECK-NEXT: local.get 0 3218; CHECK-NEXT: call op_2_to_0 3219; CHECK-NEXT: # fallthrough-return 3220 %t0 = call {i32, i32, i32} @op_0_to_3() 3221 %t1 = extractvalue {i32, i32, i32} %t0, 2 3222 %t2 = extractvalue {i32, i32, i32} %t0, 2 3223 call void @op_2_to_0(i32 %t1, i32 %t2) 3224 %t3 = extractvalue {i32, i32, i32} %t0, 1 3225 %t4 = extractvalue {i32, i32, i32} %t0, 0 3226 call void @op_2_to_0(i32 %t3, i32 %t4) 3227 ret void 3228} 3229 3230define void @f429() { 3231; CHECK-LABEL: f429: 3232; CHECK: .functype f429 () -> () 3233; CHECK-NEXT: .local i32, i32 3234; CHECK-NEXT: # %bb.0: 3235; CHECK-NEXT: call op_0_to_3 3236; CHECK-NEXT: local.set 1 3237; CHECK-NEXT: local.set 0 3238; CHECK-NEXT: drop 3239; CHECK-NEXT: local.get 1 3240; CHECK-NEXT: local.get 1 3241; CHECK-NEXT: call op_2_to_0 3242; CHECK-NEXT: local.get 0 3243; CHECK-NEXT: local.get 0 3244; CHECK-NEXT: call op_2_to_0 3245; CHECK-NEXT: # fallthrough-return 3246 %t0 = call {i32, i32, i32} @op_0_to_3() 3247 %t1 = extractvalue {i32, i32, i32} %t0, 2 3248 %t2 = extractvalue {i32, i32, i32} %t0, 2 3249 call void @op_2_to_0(i32 %t1, i32 %t2) 3250 %t3 = extractvalue {i32, i32, i32} %t0, 1 3251 %t4 = extractvalue {i32, i32, i32} %t0, 1 3252 call void @op_2_to_0(i32 %t3, i32 %t4) 3253 ret void 3254} 3255 3256