@@ -3,7 +3,8 @@ source_filename = "generics.go"
33target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128-ni:1:10:20"
44target triple = "wasm32-unknown-wasi"
55
6- %main.Point = type { float , float }
6+ %"main.Point[int]" = type { i32 , i32 }
7+ %"main.Point[float32]" = type { float , float }
78
89declare noalias nonnull i8* @runtime.alloc (i32 , i8* , i8* ) #0
910
@@ -18,73 +19,96 @@ entry:
1819; Function Attrs: nounwind
1920define hidden void @main.main (i8* %context ) unnamed_addr #1 {
2021entry:
21- %bf = alloca %main.Point , align 8
22- %af = alloca %main.Point , align 8
23- %af.repack = getelementptr inbounds %main.Point , %main.Point* %af , i32 0 , i32 0
22+ %bi = alloca %"main.Point[int]" , align 8
23+ %ai = alloca %"main.Point[int]" , align 8
24+ %bf = alloca %"main.Point[float32]" , align 8
25+ %af = alloca %"main.Point[float32]" , align 8
26+ %af.repack = getelementptr inbounds %"main.Point[float32]" , %"main.Point[float32]" * %af , i32 0 , i32 0
2427 store float 0 .000000e+00 , float * %af.repack , align 8
25- %af.repack1 = getelementptr inbounds %main.Point , %main.Point* %af , i32 0 , i32 1
28+ %af.repack1 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %af , i32 0 , i32 1
2629 store float 0 .000000e+00 , float * %af.repack1 , align 4
27- %0 = bitcast %main.Point* %af to i8*
30+ %0 = bitcast %" main.Point[float32]" * %af to i8*
2831 call void @runtime.trackPointer (i8* nonnull %0 , i8* undef ) #2
29- %bf.repack = getelementptr inbounds %main.Point , %main.Point* %bf , i32 0 , i32 0
32+ %bf.repack = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %bf , i32 0 , i32 0
3033 store float 0 .000000e+00 , float * %bf.repack , align 8
31- %bf.repack2 = getelementptr inbounds %main.Point , %main.Point* %bf , i32 0 , i32 1
34+ %bf.repack2 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %bf , i32 0 , i32 1
3235 store float 0 .000000e+00 , float * %bf.repack2 , align 4
33- %1 = bitcast %main.Point* %bf to i8*
36+ %1 = bitcast %" main.Point[float32]" * %bf to i8*
3437 call void @runtime.trackPointer (i8* nonnull %1 , i8* undef ) #2
35- %.elt = getelementptr inbounds %main.Point , %main.Point* %af , i32 0 , i32 0
38+ %.elt = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %af , i32 0 , i32 0
3639 %.unpack = load float , float * %.elt , align 8
37- %.elt3 = getelementptr inbounds %main.Point , %main.Point* %af , i32 0 , i32 1
40+ %.elt3 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %af , i32 0 , i32 1
3841 %.unpack4 = load float , float * %.elt3 , align 4
39- %.elt5 = getelementptr inbounds %main.Point , %main.Point* %bf , i32 0 , i32 0
42+ %.elt5 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %bf , i32 0 , i32 0
4043 %.unpack6 = load float , float * %.elt5 , align 8
41- %.elt7 = getelementptr inbounds %main.Point , %main.Point* %bf , i32 0 , i32 1
44+ %.elt7 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %bf , i32 0 , i32 1
4245 %.unpack8 = load float , float * %.elt7 , align 4
43- %2 = call %main.Point @"main.Add[float32]" (float %.unpack , float %.unpack4 , float %.unpack6 , float %.unpack8 , i8* undef )
46+ %2 = call %"main.Point[float32]" @"main.Add[float32]" (float %.unpack , float %.unpack4 , float %.unpack6 , float %.unpack8 , i8* undef )
47+ %ai.repack = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %ai , i32 0 , i32 0
48+ store i32 0 , i32* %ai.repack , align 8
49+ %ai.repack9 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %ai , i32 0 , i32 1
50+ store i32 0 , i32* %ai.repack9 , align 4
51+ %3 = bitcast %"main.Point[int]" * %ai to i8*
52+ call void @runtime.trackPointer (i8* nonnull %3 , i8* undef ) #2
53+ %bi.repack = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %bi , i32 0 , i32 0
54+ store i32 0 , i32* %bi.repack , align 8
55+ %bi.repack10 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %bi , i32 0 , i32 1
56+ store i32 0 , i32* %bi.repack10 , align 4
57+ %4 = bitcast %"main.Point[int]" * %bi to i8*
58+ call void @runtime.trackPointer (i8* nonnull %4 , i8* undef ) #2
59+ %.elt11 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %ai , i32 0 , i32 0
60+ %.unpack12 = load i32 , i32* %.elt11 , align 8
61+ %.elt13 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %ai , i32 0 , i32 1
62+ %.unpack14 = load i32 , i32* %.elt13 , align 4
63+ %.elt15 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %bi , i32 0 , i32 0
64+ %.unpack16 = load i32 , i32* %.elt15 , align 8
65+ %.elt17 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %bi , i32 0 , i32 1
66+ %.unpack18 = load i32 , i32* %.elt17 , align 4
67+ %5 = call %"main.Point[int]" @"main.Add[int]" (i32 %.unpack12 , i32 %.unpack14 , i32 %.unpack16 , i32 %.unpack18 , i8* undef )
4468 ret void
4569}
4670
4771; Function Attrs: nounwind
48- define linkonce_odr hidden %main.Point @"main.Add[float32]" (float %a.X , float %a.Y , float %b.X , float %b.Y , i8* %context ) unnamed_addr #1 {
72+ define linkonce_odr hidden %" main.Point[float32]" @"main.Add[float32]" (float %a.X , float %a.Y , float %b.X , float %b.Y , i8* %context ) unnamed_addr #1 {
4973entry:
50- %complit = alloca %main.Point , align 8
51- %b = alloca %main.Point , align 8
52- %a = alloca %main.Point , align 8
53- %a.repack = getelementptr inbounds %main.Point , %main.Point* %a , i32 0 , i32 0
74+ %complit = alloca %" main.Point[float32]" , align 8
75+ %b = alloca %" main.Point[float32]" , align 8
76+ %a = alloca %" main.Point[float32]" , align 8
77+ %a.repack = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %a , i32 0 , i32 0
5478 store float 0 .000000e+00 , float * %a.repack , align 8
55- %a.repack9 = getelementptr inbounds %main.Point , %main.Point* %a , i32 0 , i32 1
79+ %a.repack9 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %a , i32 0 , i32 1
5680 store float 0 .000000e+00 , float * %a.repack9 , align 4
57- %0 = bitcast %main.Point* %a to i8*
81+ %0 = bitcast %" main.Point[float32]" * %a to i8*
5882 call void @runtime.trackPointer (i8* nonnull %0 , i8* undef ) #2
59- %a.repack10 = getelementptr inbounds %main.Point , %main.Point* %a , i32 0 , i32 0
83+ %a.repack10 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %a , i32 0 , i32 0
6084 store float %a.X , float * %a.repack10 , align 8
61- %a.repack11 = getelementptr inbounds %main.Point , %main.Point* %a , i32 0 , i32 1
85+ %a.repack11 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %a , i32 0 , i32 1
6286 store float %a.Y , float * %a.repack11 , align 4
63- %b.repack = getelementptr inbounds %main.Point , %main.Point* %b , i32 0 , i32 0
87+ %b.repack = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %b , i32 0 , i32 0
6488 store float 0 .000000e+00 , float * %b.repack , align 8
65- %b.repack13 = getelementptr inbounds %main.Point , %main.Point* %b , i32 0 , i32 1
89+ %b.repack13 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %b , i32 0 , i32 1
6690 store float 0 .000000e+00 , float * %b.repack13 , align 4
67- %1 = bitcast %main.Point* %b to i8*
91+ %1 = bitcast %" main.Point[float32]" * %b to i8*
6892 call void @runtime.trackPointer (i8* nonnull %1 , i8* undef ) #2
69- %b.repack14 = getelementptr inbounds %main.Point , %main.Point* %b , i32 0 , i32 0
93+ %b.repack14 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %b , i32 0 , i32 0
7094 store float %b.X , float * %b.repack14 , align 8
71- %b.repack15 = getelementptr inbounds %main.Point , %main.Point* %b , i32 0 , i32 1
95+ %b.repack15 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %b , i32 0 , i32 1
7296 store float %b.Y , float * %b.repack15 , align 4
73- %complit.repack = getelementptr inbounds %main.Point , %main.Point* %complit , i32 0 , i32 0
97+ %complit.repack = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %complit , i32 0 , i32 0
7498 store float 0 .000000e+00 , float * %complit.repack , align 8
75- %complit.repack17 = getelementptr inbounds %main.Point , %main.Point* %complit , i32 0 , i32 1
99+ %complit.repack17 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %complit , i32 0 , i32 1
76100 store float 0 .000000e+00 , float * %complit.repack17 , align 4
77- %2 = bitcast %main.Point* %complit to i8*
101+ %2 = bitcast %" main.Point[float32]" * %complit to i8*
78102 call void @runtime.trackPointer (i8* nonnull %2 , i8* undef ) #2
79- %3 = getelementptr inbounds %main.Point , %main.Point* %complit , i32 0 , i32 0
103+ %3 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %complit , i32 0 , i32 0
80104 br i1 false , label %deref.throw , label %deref.next
81105
82106deref.next: ; preds = %entry
83107 br i1 false , label %deref.throw1 , label %deref.next2
84108
85109deref.next2: ; preds = %deref.next
86- %4 = getelementptr inbounds %main.Point , %main.Point* %b , i32 0 , i32 0
87- %5 = getelementptr inbounds %main.Point , %main.Point* %a , i32 0 , i32 0
110+ %4 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %b , i32 0 , i32 0
111+ %5 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %a , i32 0 , i32 0
88112 %6 = load float , float * %5 , align 8
89113 %7 = load float , float * %4 , align 8
90114 %8 = fadd float %6 , %7
@@ -94,8 +118,8 @@ deref.next4: ; preds = %deref.next2
94118 br i1 false , label %deref.throw5 , label %deref.next6
95119
96120deref.next6: ; preds = %deref.next4
97- %9 = getelementptr inbounds %main.Point , %main.Point* %b , i32 0 , i32 1
98- %10 = getelementptr inbounds %main.Point , %main.Point* %a , i32 0 , i32 1
121+ %9 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %b , i32 0 , i32 1
122+ %10 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %a , i32 0 , i32 1
99123 %11 = load float , float * %10 , align 4
100124 %12 = load float , float * %9 , align 4
101125 br i1 false , label %store.throw , label %store.next
@@ -105,14 +129,14 @@ store.next: ; preds = %deref.next6
105129 br i1 false , label %store.throw7 , label %store.next8
106130
107131store .next8: ; preds = %store.next
108- %13 = getelementptr inbounds %main.Point , %main.Point* %complit , i32 0 , i32 1
132+ %13 = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %complit , i32 0 , i32 1
109133 %14 = fadd float %11 , %12
110134 store float %14 , float * %13 , align 4
111- %.elt = getelementptr inbounds %main.Point , %main.Point* %complit , i32 0 , i32 0
135+ %.elt = getelementptr inbounds %" main.Point[float32]" , %" main.Point[float32]" * %complit , i32 0 , i32 0
112136 %.unpack = load float , float * %.elt , align 8
113- %15 = insertvalue %main.Point undef , float %.unpack , 0
114- %16 = insertvalue %main.Point %15 , float %14 , 1
115- ret %main.Point %16
137+ %15 = insertvalue %" main.Point[float32]" undef , float %.unpack , 0
138+ %16 = insertvalue %" main.Point[float32]" %15 , float %14 , 1
139+ ret %" main.Point[float32]" %16
116140
117141deref.throw: ; preds = %entry
118142 unreachable
@@ -135,6 +159,95 @@ store.throw7: ; preds = %store.next
135159
136160declare void @runtime.nilPanic (i8* ) #0
137161
162+ ; Function Attrs: nounwind
163+ define linkonce_odr hidden %"main.Point[int]" @"main.Add[int]" (i32 %a.X , i32 %a.Y , i32 %b.X , i32 %b.Y , i8* %context ) unnamed_addr #1 {
164+ entry:
165+ %complit = alloca %"main.Point[int]" , align 8
166+ %b = alloca %"main.Point[int]" , align 8
167+ %a = alloca %"main.Point[int]" , align 8
168+ %a.repack = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %a , i32 0 , i32 0
169+ store i32 0 , i32* %a.repack , align 8
170+ %a.repack9 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %a , i32 0 , i32 1
171+ store i32 0 , i32* %a.repack9 , align 4
172+ %0 = bitcast %"main.Point[int]" * %a to i8*
173+ call void @runtime.trackPointer (i8* nonnull %0 , i8* undef ) #2
174+ %a.repack10 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %a , i32 0 , i32 0
175+ store i32 %a.X , i32* %a.repack10 , align 8
176+ %a.repack11 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %a , i32 0 , i32 1
177+ store i32 %a.Y , i32* %a.repack11 , align 4
178+ %b.repack = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %b , i32 0 , i32 0
179+ store i32 0 , i32* %b.repack , align 8
180+ %b.repack13 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %b , i32 0 , i32 1
181+ store i32 0 , i32* %b.repack13 , align 4
182+ %1 = bitcast %"main.Point[int]" * %b to i8*
183+ call void @runtime.trackPointer (i8* nonnull %1 , i8* undef ) #2
184+ %b.repack14 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %b , i32 0 , i32 0
185+ store i32 %b.X , i32* %b.repack14 , align 8
186+ %b.repack15 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %b , i32 0 , i32 1
187+ store i32 %b.Y , i32* %b.repack15 , align 4
188+ %complit.repack = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %complit , i32 0 , i32 0
189+ store i32 0 , i32* %complit.repack , align 8
190+ %complit.repack17 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %complit , i32 0 , i32 1
191+ store i32 0 , i32* %complit.repack17 , align 4
192+ %2 = bitcast %"main.Point[int]" * %complit to i8*
193+ call void @runtime.trackPointer (i8* nonnull %2 , i8* undef ) #2
194+ %3 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %complit , i32 0 , i32 0
195+ br i1 false , label %deref.throw , label %deref.next
196+
197+ deref.next: ; preds = %entry
198+ br i1 false , label %deref.throw1 , label %deref.next2
199+
200+ deref.next2: ; preds = %deref.next
201+ %4 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %b , i32 0 , i32 0
202+ %5 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %a , i32 0 , i32 0
203+ %6 = load i32 , i32* %5 , align 8
204+ %7 = load i32 , i32* %4 , align 8
205+ %8 = add i32 %6 , %7
206+ br i1 false , label %deref.throw3 , label %deref.next4
207+
208+ deref.next4: ; preds = %deref.next2
209+ br i1 false , label %deref.throw5 , label %deref.next6
210+
211+ deref.next6: ; preds = %deref.next4
212+ %9 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %b , i32 0 , i32 1
213+ %10 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %a , i32 0 , i32 1
214+ %11 = load i32 , i32* %10 , align 4
215+ %12 = load i32 , i32* %9 , align 4
216+ br i1 false , label %store.throw , label %store.next
217+
218+ store .next: ; preds = %deref.next6
219+ store i32 %8 , i32* %3 , align 8
220+ br i1 false , label %store.throw7 , label %store.next8
221+
222+ store .next8: ; preds = %store.next
223+ %13 = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %complit , i32 0 , i32 1
224+ %14 = add i32 %11 , %12
225+ store i32 %14 , i32* %13 , align 4
226+ %.elt = getelementptr inbounds %"main.Point[int]" , %"main.Point[int]" * %complit , i32 0 , i32 0
227+ %.unpack = load i32 , i32* %.elt , align 8
228+ %15 = insertvalue %"main.Point[int]" undef , i32 %.unpack , 0
229+ %16 = insertvalue %"main.Point[int]" %15 , i32 %14 , 1
230+ ret %"main.Point[int]" %16
231+
232+ deref.throw: ; preds = %entry
233+ unreachable
234+
235+ deref.throw1: ; preds = %deref.next
236+ unreachable
237+
238+ deref.throw3: ; preds = %deref.next2
239+ unreachable
240+
241+ deref.throw5: ; preds = %deref.next4
242+ unreachable
243+
244+ store .throw: ; preds = %deref.next6
245+ unreachable
246+
247+ store .throw7: ; preds = %store.next
248+ unreachable
249+ }
250+
138251attributes #0 = { "target-features" ="+bulk-memory,+nontrapping-fptoint,+sign-ext" }
139252attributes #1 = { nounwind "target-features" ="+bulk-memory,+nontrapping-fptoint,+sign-ext" }
140253attributes #2 = { nounwind }
0 commit comments