mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
4bfe48be67
Summary: There is still room for improvement in the handling of multivalue nodes in both passes, but the current algorithm is at least correct and optimizes some simpler cases. In order to make future optimizations of these passes easier and build confidence that the current algorithms are correct, this CL also adds a script that automatically and exhaustively generates interesting multivalue test cases. Reviewers: aheejin, dschuff Subscribers: sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D72902
3256 lines
94 KiB
LLVM
3256 lines
94 KiB
LLVM
; 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 | FileCheck %s
|
|
|
|
; Test that the multivalue stackification works
|
|
|
|
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
|
|
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: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_2
|
|
; CHECK-NEXT: drop
|
|
; 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.tee 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: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_2
|
|
; 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: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: drop
|
|
; CHECK-NEXT: drop
|
|
; 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.tee 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: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: drop
|
|
; 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 0
|
|
; CHECK-NEXT: drop
|
|
; 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)
|
|
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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_2
|
|
; CHECK-NEXT: local.set 0
|
|
; 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_2
|
|
; CHECK-NEXT: local.set 0
|
|
; 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_2
|
|
; CHECK-NEXT: local.set 0
|
|
; 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: drop
|
|
; CHECK-NEXT: local.set 0
|
|
; 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 0
|
|
; CHECK-NEXT: drop
|
|
; 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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 0
|
|
; CHECK-NEXT: drop
|
|
; CHECK-NEXT: local.tee 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: drop
|
|
; CHECK-NEXT: local.set 0
|
|
; 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 1
|
|
; CHECK-NEXT: local.set 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, 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 0
|
|
; CHECK-NEXT: drop
|
|
; CHECK-NEXT: local.tee 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 1
|
|
; CHECK-NEXT: local.set 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 0
|
|
; CHECK-NEXT: drop
|
|
; 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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 0
|
|
; CHECK-NEXT: drop
|
|
; CHECK-NEXT: local.tee 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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 1
|
|
; CHECK-NEXT: local.set 0
|
|
; CHECK-NEXT: local.tee 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, 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 1
|
|
; CHECK-NEXT: local.set 0
|
|
; CHECK-NEXT: local.tee 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, 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 0
|
|
; CHECK-NEXT: drop
|
|
; CHECK-NEXT: local.tee 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: drop
|
|
; CHECK-NEXT: local.set 0
|
|
; 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 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, 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 1
|
|
; CHECK-NEXT: local.set 0
|
|
; CHECK-NEXT: local.tee 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, 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 0
|
|
; CHECK-NEXT: local.tee 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 1
|
|
; CHECK-NEXT: local.set 0
|
|
; 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, 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 1
|
|
; CHECK-NEXT: local.set 0
|
|
; CHECK-NEXT: local.tee 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 1
|
|
; CHECK-NEXT: local.set 0
|
|
; 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 0
|
|
; 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, 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 0
|
|
; CHECK-NEXT: drop
|
|
; CHECK-NEXT: local.tee 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 1
|
|
; CHECK-NEXT: local.set 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, 1
|
|
call void @op_1_to_0(i32 %t3)
|
|
ret void
|
|
}
|
|
|
|
define void @f352() {
|
|
; CHECK-LABEL: f352:
|
|
; CHECK: .functype f352 () -> ()
|
|
; 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: 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, 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 1
|
|
; CHECK-NEXT: local.set 0
|
|
; CHECK-NEXT: local.tee 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, 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 1
|
|
; CHECK-NEXT: local.set 0
|
|
; CHECK-NEXT: local.tee 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 1
|
|
; CHECK-NEXT: local.set 0
|
|
; 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 1
|
|
; CHECK-NEXT: local.set 0
|
|
; 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, 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 0
|
|
; CHECK-NEXT: drop
|
|
; CHECK-NEXT: local.tee 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, 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
|
|
; CHECK-NEXT: # %bb.0:
|
|
; CHECK-NEXT: call op_0_to_3
|
|
; CHECK-NEXT: local.set 1
|
|
; CHECK-NEXT: local.set 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, 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
|
|
}
|
|
|