@@ -3,7 +3,8 @@ source_filename = "generics.go"
3
3
target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128-ni:1:10:20"
4
4
target triple = "wasm32-unknown-wasi"
5
5
6
- %main.Point = type { float , float }
6
+ %"main.Point[int]" = type { i32 , i32 }
7
+ %"main.Point[float32]" = type { float , float }
7
8
8
9
declare noalias nonnull i8* @runtime.alloc (i32 , i8* , i8* ) #0
9
10
@@ -18,73 +19,96 @@ entry:
18
19
; Function Attrs: nounwind
19
20
define hidden void @main.main (i8* %context ) unnamed_addr #1 {
20
21
entry:
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
24
27
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
26
29
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*
28
31
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
30
33
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
32
35
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*
34
37
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
36
39
%.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
38
41
%.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
40
43
%.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
42
45
%.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 )
44
68
ret void
45
69
}
46
70
47
71
; 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 {
49
73
entry:
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
54
78
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
56
80
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*
58
82
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
60
84
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
62
86
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
64
88
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
66
90
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*
68
92
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
70
94
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
72
96
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
74
98
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
76
100
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*
78
102
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
80
104
br i1 false , label %deref.throw , label %deref.next
81
105
82
106
deref.next: ; preds = %entry
83
107
br i1 false , label %deref.throw1 , label %deref.next2
84
108
85
109
deref.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
88
112
%6 = load float , float * %5 , align 8
89
113
%7 = load float , float * %4 , align 8
90
114
%8 = fadd float %6 , %7
@@ -94,8 +118,8 @@ deref.next4: ; preds = %deref.next2
94
118
br i1 false , label %deref.throw5 , label %deref.next6
95
119
96
120
deref.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
99
123
%11 = load float , float * %10 , align 4
100
124
%12 = load float , float * %9 , align 4
101
125
br i1 false , label %store.throw , label %store.next
@@ -105,14 +129,14 @@ store.next: ; preds = %deref.next6
105
129
br i1 false , label %store.throw7 , label %store.next8
106
130
107
131
store .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
109
133
%14 = fadd float %11 , %12
110
134
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
112
136
%.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
116
140
117
141
deref.throw: ; preds = %entry
118
142
unreachable
@@ -135,6 +159,95 @@ store.throw7: ; preds = %store.next
135
159
136
160
declare void @runtime.nilPanic (i8* ) #0
137
161
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
+
138
251
attributes #0 = { "target-features" ="+bulk-memory,+nontrapping-fptoint,+sign-ext" }
139
252
attributes #1 = { nounwind "target-features" ="+bulk-memory,+nontrapping-fptoint,+sign-ext" }
140
253
attributes #2 = { nounwind }
0 commit comments