@@ -95,33 +95,55 @@ void jl_get_function_id_impl(void *native_code, jl_code_instance_t *codeinst,
95
95
}
96
96
}
97
97
98
- extern " C" JL_DLLEXPORT_CODEGEN
99
- void jl_get_llvm_mis_impl (void *native_code, arraylist_t * MIs )
98
+ extern " C" JL_DLLEXPORT_CODEGEN void
99
+ jl_get_llvm_mis_impl (void *native_code, size_t *num_elements, jl_method_instance_t **data )
100
100
{
101
- jl_native_code_desc_t *data = (jl_native_code_desc_t *)native_code;
102
- auto map = data->jl_fvar_map ;
101
+ jl_native_code_desc_t *desc = (jl_native_code_desc_t *)native_code;
102
+ auto &map = desc->jl_fvar_map ;
103
+
104
+ if (data == NULL ) {
105
+ *num_elements = map.size ();
106
+ return ;
107
+ }
108
+
109
+ assert (*num_elements == map.size ());
110
+ size_t i = 0 ;
103
111
for (auto &ci : map) {
104
- jl_method_instance_t *mi = ci.first ->def ;
105
- arraylist_push (MIs, mi);
112
+ data[i++] = ci.first ->def ;
106
113
}
107
114
}
108
115
109
- extern " C" JL_DLLEXPORT_CODEGEN
110
- void jl_get_llvm_gvs_impl ( void *native_code, arraylist_t *gvs )
116
+ extern " C" JL_DLLEXPORT_CODEGEN void jl_get_llvm_gvs_impl ( void *native_code,
117
+ size_t *num_elements, void **data )
111
118
{
112
119
// map a memory location (jl_value_t or jl_binding_t) to a GlobalVariable
113
- jl_native_code_desc_t *data = (jl_native_code_desc_t *)native_code;
114
- arraylist_grow (gvs, data->jl_value_to_llvm .size ());
115
- memcpy (gvs->items , data->jl_value_to_llvm .data (), gvs->len * sizeof (void *));
120
+ jl_native_code_desc_t *desc = (jl_native_code_desc_t *)native_code;
121
+ auto &value_map = desc->jl_value_to_llvm ;
122
+
123
+ if (data == NULL ) {
124
+ *num_elements = value_map.size ();
125
+ return ;
126
+ }
127
+
128
+ assert (*num_elements == value_map.size ());
129
+ memcpy (data, value_map.data (), *num_elements * sizeof (void *));
116
130
}
117
131
118
- extern " C" JL_DLLEXPORT_CODEGEN
119
- void jl_get_llvm_external_fns_impl (void *native_code, arraylist_t *external_fns)
132
+ extern " C" JL_DLLEXPORT_CODEGEN void jl_get_llvm_external_fns_impl (void *native_code,
133
+ size_t *num_elements,
134
+ jl_code_instance_t *data)
120
135
{
121
- jl_native_code_desc_t *data = (jl_native_code_desc_t *)native_code;
122
- arraylist_grow (external_fns, data->jl_external_to_llvm .size ());
123
- memcpy (external_fns->items , data->jl_external_to_llvm .data (),
124
- external_fns->len * sizeof (jl_code_instance_t *));
136
+ jl_native_code_desc_t *desc = (jl_native_code_desc_t *)native_code;
137
+ auto &external_map = desc->jl_external_to_llvm ;
138
+
139
+ if (data == NULL ) {
140
+ *num_elements = external_map.size ();
141
+ return ;
142
+ }
143
+
144
+ assert (*num_elements == external_map.size ());
145
+ memcpy ((void *)data, (const void *)external_map.data (),
146
+ *num_elements * sizeof (jl_code_instance_t *));
125
147
}
126
148
127
149
extern " C" JL_DLLEXPORT_CODEGEN
0 commit comments