; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; NOTE: Test functions have been generated by multivalue-stackify.py.

; RUN: llc < %s -verify-machineinstrs -mattr=+multivalue -target-abi=experimental-mv | FileCheck %s

; Test that the multivalue stackification works

target triple = "wasm32-unknown-unknown"

declare {i32} @op_0_to_1()
declare {i32, i32} @op_0_to_2()
declare {i32, i32, i32} @op_0_to_3()
declare void @op_1_to_0(i32 %t0)
declare {i32} @op_1_to_1(i32 %t0)
declare {i32, i32} @op_1_to_2(i32 %t0)
declare {i32, i32, i32} @op_1_to_3(i32 %t0)
declare void @op_2_to_0(i32 %t0, i32 %t1)
declare {i32} @op_2_to_1(i32 %t0, i32 %t1)
declare {i32, i32} @op_2_to_2(i32 %t0, i32 %t1)
declare {i32, i32, i32} @op_2_to_3(i32 %t0, i32 %t1)

define void @f2() {
; CHECK-LABEL: f2:
; CHECK:         .functype f2 () -> ()
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    drop
; CHECK-NEXT:    drop
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  ret void
}

define void @f3() {
; CHECK-LABEL: f3:
; CHECK:         .functype f3 () -> ()
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    drop
; CHECK-NEXT:    drop
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  ret void
}

define void @f12() {
; CHECK-LABEL: f12:
; CHECK:         .functype f12 () -> ()
; CHECK-NEXT:    .local i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  ret void
}

define void @f13() {
; CHECK-LABEL: f13:
; CHECK:         .functype f13 () -> ()
; CHECK-NEXT:    .local i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  ret void
}

define void @f14() {
; CHECK-LABEL: f14:
; CHECK:         .functype f14 () -> ()
; CHECK-NEXT:    .local i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f15() {
; CHECK-LABEL: f15:
; CHECK:         .functype f15 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f16() {
; CHECK-LABEL: f16:
; CHECK:         .functype f16 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f17() {
; CHECK-LABEL: f17:
; CHECK:         .functype f17 () -> ()
; CHECK-NEXT:    .local i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f25() {
; CHECK-LABEL: f25:
; CHECK:         .functype f25 () -> ()
; CHECK-NEXT:    .local i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  ret void
}

define void @f26() {
; CHECK-LABEL: f26:
; CHECK:         .functype f26 () -> ()
; CHECK-NEXT:    .local i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  ret void
}

define void @f27() {
; CHECK-LABEL: f27:
; CHECK:         .functype f27 () -> ()
; CHECK-NEXT:    .local i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t1)
  ret void
}

define void @f28() {
; CHECK-LABEL: f28:
; CHECK:         .functype f28 () -> ()
; CHECK-NEXT:    .local i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f29() {
; CHECK-LABEL: f29:
; CHECK:         .functype f29 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f30() {
; CHECK-LABEL: f30:
; CHECK:         .functype f30 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f31() {
; CHECK-LABEL: f31:
; CHECK:         .functype f31 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f32() {
; CHECK-LABEL: f32:
; CHECK:         .functype f32 () -> ()
; CHECK-NEXT:    .local i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f33() {
; CHECK-LABEL: f33:
; CHECK:         .functype f33 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f34() {
; CHECK-LABEL: f34:
; CHECK:         .functype f34 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f35() {
; CHECK-LABEL: f35:
; CHECK:         .functype f35 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f36() {
; CHECK-LABEL: f36:
; CHECK:         .functype f36 () -> ()
; CHECK-NEXT:    .local i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  ret void
}

define void @f129() {
; CHECK-LABEL: f129:
; CHECK:         .functype f129 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t2)
  ret void
}

define void @f131() {
; CHECK-LABEL: f131:
; CHECK:         .functype f131 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32} %t0, 0
  %t3 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f132() {
; CHECK-LABEL: f132:
; CHECK:         .functype f132 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32} %t0, 1
  %t3 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f133() {
; CHECK-LABEL: f133:
; CHECK:         .functype f133 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32} %t0, 1
  %t3 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f141() {
; CHECK-LABEL: f141:
; CHECK:         .functype f141 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t2)
  ret void
}

define void @f143() {
; CHECK-LABEL: f143:
; CHECK:         .functype f143 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32} %t0, 0
  %t3 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f144() {
; CHECK-LABEL: f144:
; CHECK:         .functype f144 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32} %t0, 0
  %t3 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f145() {
; CHECK-LABEL: f145:
; CHECK:         .functype f145 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32} %t0, 1
  %t3 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f155() {
; CHECK-LABEL: f155:
; CHECK:         .functype f155 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f159() {
; CHECK-LABEL: f159:
; CHECK:         .functype f159 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f167() {
; CHECK-LABEL: f167:
; CHECK:         .functype f167 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f168() {
; CHECK-LABEL: f168:
; CHECK:         .functype f168 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f171() {
; CHECK-LABEL: f171:
; CHECK:         .functype f171 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f180() {
; CHECK-LABEL: f180:
; CHECK:         .functype f180 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f181() {
; CHECK-LABEL: f181:
; CHECK:         .functype f181 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f183() {
; CHECK-LABEL: f183:
; CHECK:         .functype f183 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f193() {
; CHECK-LABEL: f193:
; CHECK:         .functype f193 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f195() {
; CHECK-LABEL: f195:
; CHECK:         .functype f195 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32} @op_0_to_2()
  %t1 = extractvalue {i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f291() {
; CHECK-LABEL: f291:
; CHECK:         .functype f291 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t2)
  ret void
}

define void @f292() {
; CHECK-LABEL: f292:
; CHECK:         .functype f292 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t2)
  ret void
}

define void @f294() {
; CHECK-LABEL: f294:
; CHECK:         .functype f294 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f295() {
; CHECK-LABEL: f295:
; CHECK:         .functype f295 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f296() {
; CHECK-LABEL: f296:
; CHECK:         .functype f296 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f297() {
; CHECK-LABEL: f297:
; CHECK:         .functype f297 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f298() {
; CHECK-LABEL: f298:
; CHECK:         .functype f298 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f299() {
; CHECK-LABEL: f299:
; CHECK:         .functype f299 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f300() {
; CHECK-LABEL: f300:
; CHECK:         .functype f300 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f301() {
; CHECK-LABEL: f301:
; CHECK:         .functype f301 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f302() {
; CHECK-LABEL: f302:
; CHECK:         .functype f302 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t2)
  ret void
}

define void @f304() {
; CHECK-LABEL: f304:
; CHECK:         .functype f304 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t2)
  ret void
}

define void @f305() {
; CHECK-LABEL: f305:
; CHECK:         .functype f305 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f306() {
; CHECK-LABEL: f306:
; CHECK:         .functype f306 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f307() {
; CHECK-LABEL: f307:
; CHECK:         .functype f307 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f308() {
; CHECK-LABEL: f308:
; CHECK:         .functype f308 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f310() {
; CHECK-LABEL: f310:
; CHECK:         .functype f310 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f311() {
; CHECK-LABEL: f311:
; CHECK:         .functype f311 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f312() {
; CHECK-LABEL: f312:
; CHECK:         .functype f312 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f313() {
; CHECK-LABEL: f313:
; CHECK:         .functype f313 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f314() {
; CHECK-LABEL: f314:
; CHECK:         .functype f314 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t2)
  ret void
}

define void @f315() {
; CHECK-LABEL: f315:
; CHECK:         .functype f315 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t2)
  ret void
}

define void @f317() {
; CHECK-LABEL: f317:
; CHECK:         .functype f317 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f318() {
; CHECK-LABEL: f318:
; CHECK:         .functype f318 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f319() {
; CHECK-LABEL: f319:
; CHECK:         .functype f319 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f320() {
; CHECK-LABEL: f320:
; CHECK:         .functype f320 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f321() {
; CHECK-LABEL: f321:
; CHECK:         .functype f321 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f322() {
; CHECK-LABEL: f322:
; CHECK:         .functype f322 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f323() {
; CHECK-LABEL: f323:
; CHECK:         .functype f323 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f324() {
; CHECK-LABEL: f324:
; CHECK:         .functype f324 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t1)
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t2, i32 %t3)
  ret void
}

define void @f327() {
; CHECK-LABEL: f327:
; CHECK:         .functype f327 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f328() {
; CHECK-LABEL: f328:
; CHECK:         .functype f328 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f333() {
; CHECK-LABEL: f333:
; CHECK:         .functype f333 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f334() {
; CHECK-LABEL: f334:
; CHECK:         .functype f334 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f336() {
; CHECK-LABEL: f336:
; CHECK:         .functype f336 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f337() {
; CHECK-LABEL: f337:
; CHECK:         .functype f337 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f338() {
; CHECK-LABEL: f338:
; CHECK:         .functype f338 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f339() {
; CHECK-LABEL: f339:
; CHECK:         .functype f339 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f340() {
; CHECK-LABEL: f340:
; CHECK:         .functype f340 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f343() {
; CHECK-LABEL: f343:
; CHECK:         .functype f343 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f344() {
; CHECK-LABEL: f344:
; CHECK:         .functype f344 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f346() {
; CHECK-LABEL: f346:
; CHECK:         .functype f346 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f347() {
; CHECK-LABEL: f347:
; CHECK:         .functype f347 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f348() {
; CHECK-LABEL: f348:
; CHECK:         .functype f348 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f349() {
; CHECK-LABEL: f349:
; CHECK:         .functype f349 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f350() {
; CHECK-LABEL: f350:
; CHECK:         .functype f350 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f351() {
; CHECK-LABEL: f351:
; CHECK:         .functype f351 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f352() {
; CHECK-LABEL: f352:
; CHECK:         .functype f352 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f354() {
; CHECK-LABEL: f354:
; CHECK:         .functype f354 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f356() {
; CHECK-LABEL: f356:
; CHECK:         .functype f356 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f357() {
; CHECK-LABEL: f357:
; CHECK:         .functype f357 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f358() {
; CHECK-LABEL: f358:
; CHECK:         .functype f358 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f359() {
; CHECK-LABEL: f359:
; CHECK:         .functype f359 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f360() {
; CHECK-LABEL: f360:
; CHECK:         .functype f360 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 0
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f362() {
; CHECK-LABEL: f362:
; CHECK:         .functype f362 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f363() {
; CHECK-LABEL: f363:
; CHECK:         .functype f363 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f364() {
; CHECK-LABEL: f364:
; CHECK:         .functype f364 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f366() {
; CHECK-LABEL: f366:
; CHECK:         .functype f366 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f367() {
; CHECK-LABEL: f367:
; CHECK:         .functype f367 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f370() {
; CHECK-LABEL: f370:
; CHECK:         .functype f370 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f371() {
; CHECK-LABEL: f371:
; CHECK:         .functype f371 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f372() {
; CHECK-LABEL: f372:
; CHECK:         .functype f372 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f373() {
; CHECK-LABEL: f373:
; CHECK:         .functype f373 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f374() {
; CHECK-LABEL: f374:
; CHECK:         .functype f374 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f376() {
; CHECK-LABEL: f376:
; CHECK:         .functype f376 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f377() {
; CHECK-LABEL: f377:
; CHECK:         .functype f377 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f379() {
; CHECK-LABEL: f379:
; CHECK:         .functype f379 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f383() {
; CHECK-LABEL: f383:
; CHECK:         .functype f383 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f385() {
; CHECK-LABEL: f385:
; CHECK:         .functype f385 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f386() {
; CHECK-LABEL: f386:
; CHECK:         .functype f386 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f387() {
; CHECK-LABEL: f387:
; CHECK:         .functype f387 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f388() {
; CHECK-LABEL: f388:
; CHECK:         .functype f388 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f389() {
; CHECK-LABEL: f389:
; CHECK:         .functype f389 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f390() {
; CHECK-LABEL: f390:
; CHECK:         .functype f390 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f391() {
; CHECK-LABEL: f391:
; CHECK:         .functype f391 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f392() {
; CHECK-LABEL: f392:
; CHECK:         .functype f392 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f395() {
; CHECK-LABEL: f395:
; CHECK:         .functype f395 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f396() {
; CHECK-LABEL: f396:
; CHECK:         .functype f396 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 1
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f398() {
; CHECK-LABEL: f398:
; CHECK:         .functype f398 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f399() {
; CHECK-LABEL: f399:
; CHECK:         .functype f399 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f400() {
; CHECK-LABEL: f400:
; CHECK:         .functype f400 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f402() {
; CHECK-LABEL: f402:
; CHECK:         .functype f402 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f403() {
; CHECK-LABEL: f403:
; CHECK:         .functype f403 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f404() {
; CHECK-LABEL: f404:
; CHECK:         .functype f404 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f405() {
; CHECK-LABEL: f405:
; CHECK:         .functype f405 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f406() {
; CHECK-LABEL: f406:
; CHECK:         .functype f406 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f408() {
; CHECK-LABEL: f408:
; CHECK:         .functype f408 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f410() {
; CHECK-LABEL: f410:
; CHECK:         .functype f410 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f411() {
; CHECK-LABEL: f411:
; CHECK:         .functype f411 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f412() {
; CHECK-LABEL: f412:
; CHECK:         .functype f412 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f413() {
; CHECK-LABEL: f413:
; CHECK:         .functype f413 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f414() {
; CHECK-LABEL: f414:
; CHECK:         .functype f414 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f415() {
; CHECK-LABEL: f415:
; CHECK:         .functype f415 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f416() {
; CHECK-LABEL: f416:
; CHECK:         .functype f416 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f418() {
; CHECK-LABEL: f418:
; CHECK:         .functype f418 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f419() {
; CHECK-LABEL: f419:
; CHECK:         .functype f419 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 2
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f422() {
; CHECK-LABEL: f422:
; CHECK:         .functype f422 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f423() {
; CHECK-LABEL: f423:
; CHECK:         .functype f423 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_1_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_1_to_0(i32 %t3)
  ret void
}

define void @f425() {
; CHECK-LABEL: f425:
; CHECK:         .functype f425 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f426() {
; CHECK-LABEL: f426:
; CHECK:         .functype f426 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 0
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f428() {
; CHECK-LABEL: f428:
; CHECK:         .functype f428 () -> ()
; CHECK-NEXT:    .local i32, i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 2
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    local.get 2
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 0
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}

define void @f429() {
; CHECK-LABEL: f429:
; CHECK:         .functype f429 () -> ()
; CHECK-NEXT:    .local i32, i32
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    call op_0_to_3
; CHECK-NEXT:    local.set 1
; CHECK-NEXT:    local.set 0
; CHECK-NEXT:    drop
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    local.get 1
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    call op_2_to_0
; CHECK-NEXT:    # fallthrough-return
  %t0 = call {i32, i32, i32} @op_0_to_3()
  %t1 = extractvalue {i32, i32, i32} %t0, 2
  %t2 = extractvalue {i32, i32, i32} %t0, 2
  call void @op_2_to_0(i32 %t1, i32 %t2)
  %t3 = extractvalue {i32, i32, i32} %t0, 1
  %t4 = extractvalue {i32, i32, i32} %t0, 1
  call void @op_2_to_0(i32 %t3, i32 %t4)
  ret void
}
