forked from OSchip/llvm-project
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
|
|
}
|
|
|