| ; 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 | |
| } |