xref: /aosp_15_r20/external/llvm/test/CodeGen/WebAssembly/indirect-import.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -verify-machineinstrs | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -verify-machineinstrs -fast-isel | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; ModuleID = 'test/dot_s/indirect-import.c'
5*9880d681SAndroid Build Coastguard Workersource_filename = "test/dot_s/indirect-import.c"
6*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
7*9880d681SAndroid Build Coastguard Workertarget triple = "wasm32"
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker%struct.big = type { float, double, i32 }
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
12*9880d681SAndroid Build Coastguard Worker; CHECK: bar:
13*9880d681SAndroid Build Coastguard Workerdefine hidden i32 @bar() #0 {
14*9880d681SAndroid Build Coastguard Workerentry:
15*9880d681SAndroid Build Coastguard Worker  %fd = alloca float (double)*, align 4
16*9880d681SAndroid Build Coastguard Worker  %vj = alloca void (i64)*, align 4
17*9880d681SAndroid Build Coastguard Worker  %v = alloca void ()*, align 4
18*9880d681SAndroid Build Coastguard Worker  %ijidf = alloca i32 (i64, i32, double, float)*, align 4
19*9880d681SAndroid Build Coastguard Worker  %vs = alloca void (%struct.big*)*, align 4
20*9880d681SAndroid Build Coastguard Worker  %s = alloca void (%struct.big*)*, align 4
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker; CHECK: i32.const       {{.+}}=, extern_fd@FUNCTION
23*9880d681SAndroid Build Coastguard Worker  store float (double)* @extern_fd, float (double)** %fd, align 4
24*9880d681SAndroid Build Coastguard Worker; CHECK: i32.const       {{.+}}=, extern_vj@FUNCTION
25*9880d681SAndroid Build Coastguard Worker  store void (i64)* @extern_vj, void (i64)** %vj, align 4
26*9880d681SAndroid Build Coastguard Worker  %0 = load void (i64)*, void (i64)** %vj, align 4
27*9880d681SAndroid Build Coastguard Worker  call void %0(i64 1)
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; CHECK: i32.const       {{.+}}=, extern_v@FUNCTION
30*9880d681SAndroid Build Coastguard Worker  store void ()* @extern_v, void ()** %v, align 4
31*9880d681SAndroid Build Coastguard Worker  %1 = load void ()*, void ()** %v, align 4
32*9880d681SAndroid Build Coastguard Worker  call void %1()
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker; CHECK: i32.const       {{.+}}=, extern_ijidf@FUNCTION
35*9880d681SAndroid Build Coastguard Worker  store i32 (i64, i32, double, float)* @extern_ijidf, i32 (i64, i32, double, float)** %ijidf, align 4
36*9880d681SAndroid Build Coastguard Worker  %2 = load i32 (i64, i32, double, float)*, i32 (i64, i32, double, float)** %ijidf, align 4
37*9880d681SAndroid Build Coastguard Worker  %call = call i32 %2(i64 1, i32 2, double 3.000000e+00, float 4.000000e+00)
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker; CHECK: i32.const       {{.+}}=, extern_struct@FUNCTION
40*9880d681SAndroid Build Coastguard Worker  store void (%struct.big*)* @extern_struct, void (%struct.big*)** %vs, align 4
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker; CHECK: i32.const       {{.+}}=, extern_sret@FUNCTION
43*9880d681SAndroid Build Coastguard Worker  store void (%struct.big*)* @extern_sret, void (%struct.big*)** %s, align 4
44*9880d681SAndroid Build Coastguard Worker  %3 = load float (double)*, float (double)** %fd, align 4
45*9880d681SAndroid Build Coastguard Worker  %4 = ptrtoint float (double)* %3 to i32
46*9880d681SAndroid Build Coastguard Worker  ret i32 %4
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerdeclare float @extern_fd(double) #1
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdeclare void @extern_vj(i64) #1
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerdeclare void @extern_v() #1
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerdeclare i32 @extern_ijidf(i64, i32, double, float) #1
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdeclare void @extern_struct(%struct.big* byval align 8) #1
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerdeclare void @extern_sret(%struct.big* sret) #1
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdeclare i128 @extern_i128ret(i64) #1
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
64*9880d681SAndroid Build Coastguard Workerattributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; CHECK: .functype       extern_fd, f32, f64
68*9880d681SAndroid Build Coastguard Worker; CHECK: .functype       extern_vj, void, i64
69*9880d681SAndroid Build Coastguard Worker; CHECK: .functype       extern_v, void
70*9880d681SAndroid Build Coastguard Worker; CHECK: .functype       extern_ijidf, i32, i64, i32, f64, f32
71*9880d681SAndroid Build Coastguard Worker; CHECK: .functype       extern_struct, void, i32
72*9880d681SAndroid Build Coastguard Worker; CHECK: .functype       extern_sret, void, i32
73*9880d681SAndroid Build Coastguard Worker; CHECK: .functype       extern_i128ret, void, i32, i64
74