1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
use ValueRef;
use core;
/// Obtains the number of parameters in a function.
///
/// This function wraps the `LLVMCountParams` function from the LLVM core library. It returns the count of parameters
/// that the specified function accepts.
///
/// # Parameters
///
/// - `fn_val`: The `ValueRef` representing the function.
///
/// # Returns
///
/// Returns an `unsigned` integer (`u32`) indicating the number of parameters in the function.
///
/// # Safety
///
/// - The `ValueRef` must represent a valid function within a module.
/// Retrieves the parameters of a function.
///
/// This function wraps the `LLVMGetParams` function from the LLVM core library. It fills the provided mutable slice
/// with the parameters of the specified function. Each parameter is represented as a `ValueRef`.
///
/// # Parameters
///
/// - `fn_val`: The `ValueRef` representing the function.
/// - `params`: A mutable slice of `ValueRef` where the function's parameters will be stored.
///
/// # Safety
///
/// - The `ValueRef` must represent a valid function within a module.
/// - The `params` slice must be pre-allocated and have a length of at least `count_params(fn_val)`.
/// Retrieves a specific parameter of a function by index.
///
/// This function wraps the `LLVMGetParam` function from the LLVM core library. It returns the parameter at the
/// specified index within the function's parameter list.
///
/// # Parameters
///
/// - `fn_val`: The `ValueRef` representing the function.
/// - `index`: The zero-based index of the parameter to retrieve.
///
/// # Returns
///
/// Returns an `Option<ValueRef>` containing the parameter if the index is valid, or `None` if the index is out of bounds.
///
/// # Safety
///
/// - The `ValueRef` must represent a valid function within a module.
/// - `index` must be less than the number of parameters in the function.
/// Retrieves the parent function of a given argument.
///
/// This function wraps the `LLVMGetParamParent` function from the LLVM core library. It returns the function to
/// which the specified argument belongs.
///
/// # Parameters
///
/// - `arg`: The `ValueRef` representing the argument.
///
/// # Returns
///
/// Returns an `Option<ValueRef>` containing the parent function if it exists, or `None` otherwise.
///
/// # Safety
///
/// - The `ValueRef` must represent a valid argument within a function.
/// Retrieves the first parameter of a function.
///
/// This function wraps the `LLVMGetFirstParam` function from the LLVM core library. It returns the first parameter
/// of the specified function.
///
/// # Parameters
///
/// - `fn_val`: The `ValueRef` representing the function.
///
/// # Returns
///
/// Returns an `Option<ValueRef>` containing the first parameter if it exists, or `None` if the function has no parameters.
///
/// # Safety
///
/// - The `ValueRef` must represent a valid function within a module.
/// Retrieves the last parameter of a function.
///
/// This function wraps the `LLVMGetLastParam` function from the LLVM core library. It returns the last parameter
/// of the specified function.
///
/// # Parameters
///
/// - `fn_val`: The `ValueRef` representing the function.
///
/// # Returns
///
/// Returns an `Option<ValueRef>` containing the last parameter if it exists, or `None` if the function has no parameters.
///
/// # Safety
///
/// - The `ValueRef` must represent a valid function within a module.
/// Retrieves the next parameter in a function's parameter list.
///
/// This function wraps the `LLVMGetNextParam` function from the LLVM core library. Given a current parameter, it returns
/// the next parameter in the function's parameter list.
///
/// # Parameters
///
/// - `arg`: The `ValueRef` representing the current parameter.
///
/// # Returns
///
/// Returns an `Option<ValueRef>` containing the next parameter if it exists, or `None` if there is no next parameter.
///
/// # Safety
///
/// - The `ValueRef` must represent a valid parameter within a function.
/// Retrieves the previous parameter in a function's parameter list.
///
/// This function wraps the `LLVMGetPreviousParam` function from the LLVM core library. Given a current parameter, it returns
/// the previous parameter in the function's parameter list.
///
/// # Parameters
///
/// - `arg`: The `ValueRef` representing the current parameter.
///
/// # Returns
///
/// Returns an `Option<ValueRef>` containing the previous parameter if it exists, or `None` if there is no previous parameter.
///
/// # Safety
///
/// - The `ValueRef` must represent a valid parameter within a function.
/// Sets the alignment for a function parameter.
///
/// This function wraps the `LLVMSetParamAlignment` function from the LLVM core library. It sets the alignment requirement
/// for the specified function parameter.
///
/// # Parameters
///
/// - `arg`: The `ValueRef` representing the parameter.
/// - `align`: The alignment (`unsigned`, typically `u32`) to set for the parameter.
///
/// # Safety
///
/// - The `ValueRef` must represent a valid parameter within a function.
/// - `align` must be a valid alignment value as per LLVM's requirements.