1use super::{Context, Error, LibISLError, Stat};
5use libc::uintptr_t;
6use std::ffi::{CStr, CString};
7use std::os::raw::c_char;
8
9pub struct Options {
11 pub ptr: uintptr_t,
12 pub should_free_on_drop: bool,
13}
14
15extern "C" {
16
17 fn isl_options_free(opt: uintptr_t) -> ();
18
19 fn isl_options_get_ast_always_print_block(ctx: uintptr_t) -> i32;
20
21 fn isl_options_get_ast_iterator_type(ctx: uintptr_t) -> *const c_char;
22
23 fn isl_options_get_ast_print_macro_once(ctx: uintptr_t) -> i32;
24
25 fn isl_options_get_ast_print_outermost_block(ctx: uintptr_t) -> i32;
26
27 fn isl_options_get_bound(ctx: uintptr_t) -> i32;
28
29 fn isl_options_get_coalesce_bounded_wrapping(ctx: uintptr_t) -> i32;
30
31 fn isl_options_get_coalesce_preserve_locals(ctx: uintptr_t) -> i32;
32
33 fn isl_options_get_gbr_only_first(ctx: uintptr_t) -> i32;
34
35 fn isl_options_get_on_error(ctx: uintptr_t) -> i32;
36
37 fn isl_options_get_pip_symmetry(ctx: uintptr_t) -> i32;
38
39 fn isl_options_get_schedule_algorithm(ctx: uintptr_t) -> i32;
40
41 fn isl_options_get_schedule_carry_self_first(ctx: uintptr_t) -> i32;
42
43 fn isl_options_get_schedule_max_coefficient(ctx: uintptr_t) -> i32;
44
45 fn isl_options_get_schedule_max_constant_term(ctx: uintptr_t) -> i32;
46
47 fn isl_options_get_schedule_maximize_band_depth(ctx: uintptr_t) -> i32;
48
49 fn isl_options_get_schedule_maximize_coincidence(ctx: uintptr_t) -> i32;
50
51 fn isl_options_get_schedule_outer_coincidence(ctx: uintptr_t) -> i32;
52
53 fn isl_options_get_schedule_separate_components(ctx: uintptr_t) -> i32;
54
55 fn isl_options_get_schedule_serialize_sccs(ctx: uintptr_t) -> i32;
56
57 fn isl_options_get_schedule_split_scaled(ctx: uintptr_t) -> i32;
58
59 fn isl_options_get_schedule_treat_coalescing(ctx: uintptr_t) -> i32;
60
61 fn isl_options_get_schedule_whole_component(ctx: uintptr_t) -> i32;
62
63 fn isl_options_get_tile_scale_tile_loops(ctx: uintptr_t) -> i32;
64
65 fn isl_options_get_tile_shift_point_loops(ctx: uintptr_t) -> i32;
66
67 fn isl_options_new_with_defaults() -> uintptr_t;
68
69 fn isl_options_set_ast_always_print_block(ctx: uintptr_t, val: i32) -> i32;
70
71 fn isl_options_set_ast_iterator_type(ctx: uintptr_t, val: *const c_char) -> i32;
72
73 fn isl_options_set_ast_print_macro_once(ctx: uintptr_t, val: i32) -> i32;
74
75 fn isl_options_set_ast_print_outermost_block(ctx: uintptr_t, val: i32) -> i32;
76
77 fn isl_options_set_bound(ctx: uintptr_t, val: i32) -> i32;
78
79 fn isl_options_set_coalesce_bounded_wrapping(ctx: uintptr_t, val: i32) -> i32;
80
81 fn isl_options_set_coalesce_preserve_locals(ctx: uintptr_t, val: i32) -> i32;
82
83 fn isl_options_set_gbr_only_first(ctx: uintptr_t, val: i32) -> i32;
84
85 fn isl_options_set_on_error(ctx: uintptr_t, val: i32) -> i32;
86
87 fn isl_options_set_pip_symmetry(ctx: uintptr_t, val: i32) -> i32;
88
89 fn isl_options_set_schedule_algorithm(ctx: uintptr_t, val: i32) -> i32;
90
91 fn isl_options_set_schedule_carry_self_first(ctx: uintptr_t, val: i32) -> i32;
92
93 fn isl_options_set_schedule_max_coefficient(ctx: uintptr_t, val: i32) -> i32;
94
95 fn isl_options_set_schedule_max_constant_term(ctx: uintptr_t, val: i32) -> i32;
96
97 fn isl_options_set_schedule_maximize_band_depth(ctx: uintptr_t, val: i32) -> i32;
98
99 fn isl_options_set_schedule_maximize_coincidence(ctx: uintptr_t, val: i32) -> i32;
100
101 fn isl_options_set_schedule_outer_coincidence(ctx: uintptr_t, val: i32) -> i32;
102
103 fn isl_options_set_schedule_separate_components(ctx: uintptr_t, val: i32) -> i32;
104
105 fn isl_options_set_schedule_serialize_sccs(ctx: uintptr_t, val: i32) -> i32;
106
107 fn isl_options_set_schedule_split_scaled(ctx: uintptr_t, val: i32) -> i32;
108
109 fn isl_options_set_schedule_treat_coalescing(ctx: uintptr_t, val: i32) -> i32;
110
111 fn isl_options_set_schedule_whole_component(ctx: uintptr_t, val: i32) -> i32;
112
113 fn isl_options_set_tile_scale_tile_loops(ctx: uintptr_t, val: i32) -> i32;
114
115 fn isl_options_set_tile_shift_point_loops(ctx: uintptr_t, val: i32) -> i32;
116
117}
118
119impl Options {
120 pub fn free(self) -> () {
122 let opt = self;
123 let mut opt = opt;
124 opt.do_not_free_on_drop();
125 let opt = opt.ptr;
126 let isl_rs_result = unsafe { isl_options_free(opt) };
127 isl_rs_result
128 }
129
130 pub fn get_ast_always_print_block(ctx: &Context) -> Result<i32, LibISLError> {
132 let isl_rs_ctx = Context { ptr: ctx.ptr,
133 should_free_on_drop: false };
134 let ctx = ctx.ptr;
135 let isl_rs_result = unsafe { isl_options_get_ast_always_print_block(ctx) };
136 let err = isl_rs_ctx.last_error();
137 if err != Error::None_ {
138 let err_msg = isl_rs_ctx.last_error_msg();
139 isl_rs_ctx.reset_error();
140 return Err(LibISLError::new(err, err_msg));
141 }
142 Ok(isl_rs_result)
143 }
144
145 pub fn get_ast_iterator_type(ctx: &Context) -> Result<&str, LibISLError> {
147 let isl_rs_ctx = Context { ptr: ctx.ptr,
148 should_free_on_drop: false };
149 let ctx = ctx.ptr;
150 let isl_rs_result = unsafe { isl_options_get_ast_iterator_type(ctx) };
151 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
152 let isl_rs_result = isl_rs_result.to_str().unwrap();
153 let err = isl_rs_ctx.last_error();
154 if err != Error::None_ {
155 let err_msg = isl_rs_ctx.last_error_msg();
156 isl_rs_ctx.reset_error();
157 return Err(LibISLError::new(err, err_msg));
158 }
159 Ok(isl_rs_result)
160 }
161
162 pub fn get_ast_print_macro_once(ctx: &Context) -> Result<i32, LibISLError> {
164 let isl_rs_ctx = Context { ptr: ctx.ptr,
165 should_free_on_drop: false };
166 let ctx = ctx.ptr;
167 let isl_rs_result = unsafe { isl_options_get_ast_print_macro_once(ctx) };
168 let err = isl_rs_ctx.last_error();
169 if err != Error::None_ {
170 let err_msg = isl_rs_ctx.last_error_msg();
171 isl_rs_ctx.reset_error();
172 return Err(LibISLError::new(err, err_msg));
173 }
174 Ok(isl_rs_result)
175 }
176
177 pub fn get_ast_print_outermost_block(ctx: &Context) -> Result<i32, LibISLError> {
179 let isl_rs_ctx = Context { ptr: ctx.ptr,
180 should_free_on_drop: false };
181 let ctx = ctx.ptr;
182 let isl_rs_result = unsafe { isl_options_get_ast_print_outermost_block(ctx) };
183 let err = isl_rs_ctx.last_error();
184 if err != Error::None_ {
185 let err_msg = isl_rs_ctx.last_error_msg();
186 isl_rs_ctx.reset_error();
187 return Err(LibISLError::new(err, err_msg));
188 }
189 Ok(isl_rs_result)
190 }
191
192 pub fn get_bound(ctx: &Context) -> Result<i32, LibISLError> {
194 let isl_rs_ctx = Context { ptr: ctx.ptr,
195 should_free_on_drop: false };
196 let ctx = ctx.ptr;
197 let isl_rs_result = unsafe { isl_options_get_bound(ctx) };
198 let err = isl_rs_ctx.last_error();
199 if err != Error::None_ {
200 let err_msg = isl_rs_ctx.last_error_msg();
201 isl_rs_ctx.reset_error();
202 return Err(LibISLError::new(err, err_msg));
203 }
204 Ok(isl_rs_result)
205 }
206
207 pub fn get_coalesce_bounded_wrapping(ctx: &Context) -> Result<i32, LibISLError> {
209 let isl_rs_ctx = Context { ptr: ctx.ptr,
210 should_free_on_drop: false };
211 let ctx = ctx.ptr;
212 let isl_rs_result = unsafe { isl_options_get_coalesce_bounded_wrapping(ctx) };
213 let err = isl_rs_ctx.last_error();
214 if err != Error::None_ {
215 let err_msg = isl_rs_ctx.last_error_msg();
216 isl_rs_ctx.reset_error();
217 return Err(LibISLError::new(err, err_msg));
218 }
219 Ok(isl_rs_result)
220 }
221
222 pub fn get_coalesce_preserve_locals(ctx: &Context) -> Result<i32, LibISLError> {
224 let isl_rs_ctx = Context { ptr: ctx.ptr,
225 should_free_on_drop: false };
226 let ctx = ctx.ptr;
227 let isl_rs_result = unsafe { isl_options_get_coalesce_preserve_locals(ctx) };
228 let err = isl_rs_ctx.last_error();
229 if err != Error::None_ {
230 let err_msg = isl_rs_ctx.last_error_msg();
231 isl_rs_ctx.reset_error();
232 return Err(LibISLError::new(err, err_msg));
233 }
234 Ok(isl_rs_result)
235 }
236
237 pub fn get_gbr_only_first(ctx: &Context) -> Result<i32, LibISLError> {
239 let isl_rs_ctx = Context { ptr: ctx.ptr,
240 should_free_on_drop: false };
241 let ctx = ctx.ptr;
242 let isl_rs_result = unsafe { isl_options_get_gbr_only_first(ctx) };
243 let err = isl_rs_ctx.last_error();
244 if err != Error::None_ {
245 let err_msg = isl_rs_ctx.last_error_msg();
246 isl_rs_ctx.reset_error();
247 return Err(LibISLError::new(err, err_msg));
248 }
249 Ok(isl_rs_result)
250 }
251
252 pub fn get_on_error(ctx: &Context) -> Result<i32, LibISLError> {
254 let isl_rs_ctx = Context { ptr: ctx.ptr,
255 should_free_on_drop: false };
256 let ctx = ctx.ptr;
257 let isl_rs_result = unsafe { isl_options_get_on_error(ctx) };
258 let err = isl_rs_ctx.last_error();
259 if err != Error::None_ {
260 let err_msg = isl_rs_ctx.last_error_msg();
261 isl_rs_ctx.reset_error();
262 return Err(LibISLError::new(err, err_msg));
263 }
264 Ok(isl_rs_result)
265 }
266
267 pub fn get_pip_symmetry(ctx: &Context) -> Result<i32, LibISLError> {
269 let isl_rs_ctx = Context { ptr: ctx.ptr,
270 should_free_on_drop: false };
271 let ctx = ctx.ptr;
272 let isl_rs_result = unsafe { isl_options_get_pip_symmetry(ctx) };
273 let err = isl_rs_ctx.last_error();
274 if err != Error::None_ {
275 let err_msg = isl_rs_ctx.last_error_msg();
276 isl_rs_ctx.reset_error();
277 return Err(LibISLError::new(err, err_msg));
278 }
279 Ok(isl_rs_result)
280 }
281
282 pub fn get_schedule_algorithm(ctx: &Context) -> Result<i32, LibISLError> {
284 let isl_rs_ctx = Context { ptr: ctx.ptr,
285 should_free_on_drop: false };
286 let ctx = ctx.ptr;
287 let isl_rs_result = unsafe { isl_options_get_schedule_algorithm(ctx) };
288 let err = isl_rs_ctx.last_error();
289 if err != Error::None_ {
290 let err_msg = isl_rs_ctx.last_error_msg();
291 isl_rs_ctx.reset_error();
292 return Err(LibISLError::new(err, err_msg));
293 }
294 Ok(isl_rs_result)
295 }
296
297 pub fn get_schedule_carry_self_first(ctx: &Context) -> Result<i32, LibISLError> {
299 let isl_rs_ctx = Context { ptr: ctx.ptr,
300 should_free_on_drop: false };
301 let ctx = ctx.ptr;
302 let isl_rs_result = unsafe { isl_options_get_schedule_carry_self_first(ctx) };
303 let err = isl_rs_ctx.last_error();
304 if err != Error::None_ {
305 let err_msg = isl_rs_ctx.last_error_msg();
306 isl_rs_ctx.reset_error();
307 return Err(LibISLError::new(err, err_msg));
308 }
309 Ok(isl_rs_result)
310 }
311
312 pub fn get_schedule_max_coefficient(ctx: &Context) -> Result<i32, LibISLError> {
314 let isl_rs_ctx = Context { ptr: ctx.ptr,
315 should_free_on_drop: false };
316 let ctx = ctx.ptr;
317 let isl_rs_result = unsafe { isl_options_get_schedule_max_coefficient(ctx) };
318 let err = isl_rs_ctx.last_error();
319 if err != Error::None_ {
320 let err_msg = isl_rs_ctx.last_error_msg();
321 isl_rs_ctx.reset_error();
322 return Err(LibISLError::new(err, err_msg));
323 }
324 Ok(isl_rs_result)
325 }
326
327 pub fn get_schedule_max_constant_term(ctx: &Context) -> Result<i32, LibISLError> {
329 let isl_rs_ctx = Context { ptr: ctx.ptr,
330 should_free_on_drop: false };
331 let ctx = ctx.ptr;
332 let isl_rs_result = unsafe { isl_options_get_schedule_max_constant_term(ctx) };
333 let err = isl_rs_ctx.last_error();
334 if err != Error::None_ {
335 let err_msg = isl_rs_ctx.last_error_msg();
336 isl_rs_ctx.reset_error();
337 return Err(LibISLError::new(err, err_msg));
338 }
339 Ok(isl_rs_result)
340 }
341
342 pub fn get_schedule_maximize_band_depth(ctx: &Context) -> Result<i32, LibISLError> {
344 let isl_rs_ctx = Context { ptr: ctx.ptr,
345 should_free_on_drop: false };
346 let ctx = ctx.ptr;
347 let isl_rs_result = unsafe { isl_options_get_schedule_maximize_band_depth(ctx) };
348 let err = isl_rs_ctx.last_error();
349 if err != Error::None_ {
350 let err_msg = isl_rs_ctx.last_error_msg();
351 isl_rs_ctx.reset_error();
352 return Err(LibISLError::new(err, err_msg));
353 }
354 Ok(isl_rs_result)
355 }
356
357 pub fn get_schedule_maximize_coincidence(ctx: &Context) -> Result<i32, LibISLError> {
359 let isl_rs_ctx = Context { ptr: ctx.ptr,
360 should_free_on_drop: false };
361 let ctx = ctx.ptr;
362 let isl_rs_result = unsafe { isl_options_get_schedule_maximize_coincidence(ctx) };
363 let err = isl_rs_ctx.last_error();
364 if err != Error::None_ {
365 let err_msg = isl_rs_ctx.last_error_msg();
366 isl_rs_ctx.reset_error();
367 return Err(LibISLError::new(err, err_msg));
368 }
369 Ok(isl_rs_result)
370 }
371
372 pub fn get_schedule_outer_coincidence(ctx: &Context) -> Result<i32, LibISLError> {
374 let isl_rs_ctx = Context { ptr: ctx.ptr,
375 should_free_on_drop: false };
376 let ctx = ctx.ptr;
377 let isl_rs_result = unsafe { isl_options_get_schedule_outer_coincidence(ctx) };
378 let err = isl_rs_ctx.last_error();
379 if err != Error::None_ {
380 let err_msg = isl_rs_ctx.last_error_msg();
381 isl_rs_ctx.reset_error();
382 return Err(LibISLError::new(err, err_msg));
383 }
384 Ok(isl_rs_result)
385 }
386
387 pub fn get_schedule_separate_components(ctx: &Context) -> Result<i32, LibISLError> {
389 let isl_rs_ctx = Context { ptr: ctx.ptr,
390 should_free_on_drop: false };
391 let ctx = ctx.ptr;
392 let isl_rs_result = unsafe { isl_options_get_schedule_separate_components(ctx) };
393 let err = isl_rs_ctx.last_error();
394 if err != Error::None_ {
395 let err_msg = isl_rs_ctx.last_error_msg();
396 isl_rs_ctx.reset_error();
397 return Err(LibISLError::new(err, err_msg));
398 }
399 Ok(isl_rs_result)
400 }
401
402 pub fn get_schedule_serialize_sccs(ctx: &Context) -> Result<i32, LibISLError> {
404 let isl_rs_ctx = Context { ptr: ctx.ptr,
405 should_free_on_drop: false };
406 let ctx = ctx.ptr;
407 let isl_rs_result = unsafe { isl_options_get_schedule_serialize_sccs(ctx) };
408 let err = isl_rs_ctx.last_error();
409 if err != Error::None_ {
410 let err_msg = isl_rs_ctx.last_error_msg();
411 isl_rs_ctx.reset_error();
412 return Err(LibISLError::new(err, err_msg));
413 }
414 Ok(isl_rs_result)
415 }
416
417 pub fn get_schedule_split_scaled(ctx: &Context) -> Result<i32, LibISLError> {
419 let isl_rs_ctx = Context { ptr: ctx.ptr,
420 should_free_on_drop: false };
421 let ctx = ctx.ptr;
422 let isl_rs_result = unsafe { isl_options_get_schedule_split_scaled(ctx) };
423 let err = isl_rs_ctx.last_error();
424 if err != Error::None_ {
425 let err_msg = isl_rs_ctx.last_error_msg();
426 isl_rs_ctx.reset_error();
427 return Err(LibISLError::new(err, err_msg));
428 }
429 Ok(isl_rs_result)
430 }
431
432 pub fn get_schedule_treat_coalescing(ctx: &Context) -> Result<i32, LibISLError> {
434 let isl_rs_ctx = Context { ptr: ctx.ptr,
435 should_free_on_drop: false };
436 let ctx = ctx.ptr;
437 let isl_rs_result = unsafe { isl_options_get_schedule_treat_coalescing(ctx) };
438 let err = isl_rs_ctx.last_error();
439 if err != Error::None_ {
440 let err_msg = isl_rs_ctx.last_error_msg();
441 isl_rs_ctx.reset_error();
442 return Err(LibISLError::new(err, err_msg));
443 }
444 Ok(isl_rs_result)
445 }
446
447 pub fn get_schedule_whole_component(ctx: &Context) -> Result<i32, LibISLError> {
449 let isl_rs_ctx = Context { ptr: ctx.ptr,
450 should_free_on_drop: false };
451 let ctx = ctx.ptr;
452 let isl_rs_result = unsafe { isl_options_get_schedule_whole_component(ctx) };
453 let err = isl_rs_ctx.last_error();
454 if err != Error::None_ {
455 let err_msg = isl_rs_ctx.last_error_msg();
456 isl_rs_ctx.reset_error();
457 return Err(LibISLError::new(err, err_msg));
458 }
459 Ok(isl_rs_result)
460 }
461
462 pub fn get_tile_scale_tile_loops(ctx: &Context) -> Result<i32, LibISLError> {
464 let isl_rs_ctx = Context { ptr: ctx.ptr,
465 should_free_on_drop: false };
466 let ctx = ctx.ptr;
467 let isl_rs_result = unsafe { isl_options_get_tile_scale_tile_loops(ctx) };
468 let err = isl_rs_ctx.last_error();
469 if err != Error::None_ {
470 let err_msg = isl_rs_ctx.last_error_msg();
471 isl_rs_ctx.reset_error();
472 return Err(LibISLError::new(err, err_msg));
473 }
474 Ok(isl_rs_result)
475 }
476
477 pub fn get_tile_shift_point_loops(ctx: &Context) -> Result<i32, LibISLError> {
479 let isl_rs_ctx = Context { ptr: ctx.ptr,
480 should_free_on_drop: false };
481 let ctx = ctx.ptr;
482 let isl_rs_result = unsafe { isl_options_get_tile_shift_point_loops(ctx) };
483 let err = isl_rs_ctx.last_error();
484 if err != Error::None_ {
485 let err_msg = isl_rs_ctx.last_error_msg();
486 isl_rs_ctx.reset_error();
487 return Err(LibISLError::new(err, err_msg));
488 }
489 Ok(isl_rs_result)
490 }
491
492 pub fn new_with_defaults() -> Options {
494 let isl_rs_result = unsafe { isl_options_new_with_defaults() };
495 let isl_rs_result = Options { ptr: isl_rs_result,
496 should_free_on_drop: true };
497 isl_rs_result
498 }
499
500 pub fn set_ast_always_print_block(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
502 let isl_rs_ctx = Context { ptr: ctx.ptr,
503 should_free_on_drop: false };
504 let ctx = ctx.ptr;
505 let isl_rs_result = unsafe { isl_options_set_ast_always_print_block(ctx, val) };
506 let isl_rs_result = Stat::from_i32(isl_rs_result);
507 let err = isl_rs_ctx.last_error();
508 if err != Error::None_ {
509 let err_msg = isl_rs_ctx.last_error_msg();
510 isl_rs_ctx.reset_error();
511 return Err(LibISLError::new(err, err_msg));
512 }
513 Ok(isl_rs_result)
514 }
515
516 pub fn set_ast_iterator_type(ctx: &Context, val: &str) -> Result<Stat, LibISLError> {
518 let isl_rs_ctx = Context { ptr: ctx.ptr,
519 should_free_on_drop: false };
520 let ctx = ctx.ptr;
521 let val = CString::new(val).unwrap();
522 let val = val.as_ptr();
523 let isl_rs_result = unsafe { isl_options_set_ast_iterator_type(ctx, val) };
524 let isl_rs_result = Stat::from_i32(isl_rs_result);
525 let err = isl_rs_ctx.last_error();
526 if err != Error::None_ {
527 let err_msg = isl_rs_ctx.last_error_msg();
528 isl_rs_ctx.reset_error();
529 return Err(LibISLError::new(err, err_msg));
530 }
531 Ok(isl_rs_result)
532 }
533
534 pub fn set_ast_print_macro_once(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
536 let isl_rs_ctx = Context { ptr: ctx.ptr,
537 should_free_on_drop: false };
538 let ctx = ctx.ptr;
539 let isl_rs_result = unsafe { isl_options_set_ast_print_macro_once(ctx, val) };
540 let isl_rs_result = Stat::from_i32(isl_rs_result);
541 let err = isl_rs_ctx.last_error();
542 if err != Error::None_ {
543 let err_msg = isl_rs_ctx.last_error_msg();
544 isl_rs_ctx.reset_error();
545 return Err(LibISLError::new(err, err_msg));
546 }
547 Ok(isl_rs_result)
548 }
549
550 pub fn set_ast_print_outermost_block(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
552 let isl_rs_ctx = Context { ptr: ctx.ptr,
553 should_free_on_drop: false };
554 let ctx = ctx.ptr;
555 let isl_rs_result = unsafe { isl_options_set_ast_print_outermost_block(ctx, val) };
556 let isl_rs_result = Stat::from_i32(isl_rs_result);
557 let err = isl_rs_ctx.last_error();
558 if err != Error::None_ {
559 let err_msg = isl_rs_ctx.last_error_msg();
560 isl_rs_ctx.reset_error();
561 return Err(LibISLError::new(err, err_msg));
562 }
563 Ok(isl_rs_result)
564 }
565
566 pub fn set_bound(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
568 let isl_rs_ctx = Context { ptr: ctx.ptr,
569 should_free_on_drop: false };
570 let ctx = ctx.ptr;
571 let isl_rs_result = unsafe { isl_options_set_bound(ctx, val) };
572 let isl_rs_result = Stat::from_i32(isl_rs_result);
573 let err = isl_rs_ctx.last_error();
574 if err != Error::None_ {
575 let err_msg = isl_rs_ctx.last_error_msg();
576 isl_rs_ctx.reset_error();
577 return Err(LibISLError::new(err, err_msg));
578 }
579 Ok(isl_rs_result)
580 }
581
582 pub fn set_coalesce_bounded_wrapping(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
584 let isl_rs_ctx = Context { ptr: ctx.ptr,
585 should_free_on_drop: false };
586 let ctx = ctx.ptr;
587 let isl_rs_result = unsafe { isl_options_set_coalesce_bounded_wrapping(ctx, val) };
588 let isl_rs_result = Stat::from_i32(isl_rs_result);
589 let err = isl_rs_ctx.last_error();
590 if err != Error::None_ {
591 let err_msg = isl_rs_ctx.last_error_msg();
592 isl_rs_ctx.reset_error();
593 return Err(LibISLError::new(err, err_msg));
594 }
595 Ok(isl_rs_result)
596 }
597
598 pub fn set_coalesce_preserve_locals(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
600 let isl_rs_ctx = Context { ptr: ctx.ptr,
601 should_free_on_drop: false };
602 let ctx = ctx.ptr;
603 let isl_rs_result = unsafe { isl_options_set_coalesce_preserve_locals(ctx, val) };
604 let isl_rs_result = Stat::from_i32(isl_rs_result);
605 let err = isl_rs_ctx.last_error();
606 if err != Error::None_ {
607 let err_msg = isl_rs_ctx.last_error_msg();
608 isl_rs_ctx.reset_error();
609 return Err(LibISLError::new(err, err_msg));
610 }
611 Ok(isl_rs_result)
612 }
613
614 pub fn set_gbr_only_first(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
616 let isl_rs_ctx = Context { ptr: ctx.ptr,
617 should_free_on_drop: false };
618 let ctx = ctx.ptr;
619 let isl_rs_result = unsafe { isl_options_set_gbr_only_first(ctx, val) };
620 let isl_rs_result = Stat::from_i32(isl_rs_result);
621 let err = isl_rs_ctx.last_error();
622 if err != Error::None_ {
623 let err_msg = isl_rs_ctx.last_error_msg();
624 isl_rs_ctx.reset_error();
625 return Err(LibISLError::new(err, err_msg));
626 }
627 Ok(isl_rs_result)
628 }
629
630 pub fn set_on_error(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
632 let isl_rs_ctx = Context { ptr: ctx.ptr,
633 should_free_on_drop: false };
634 let ctx = ctx.ptr;
635 let isl_rs_result = unsafe { isl_options_set_on_error(ctx, val) };
636 let isl_rs_result = Stat::from_i32(isl_rs_result);
637 let err = isl_rs_ctx.last_error();
638 if err != Error::None_ {
639 let err_msg = isl_rs_ctx.last_error_msg();
640 isl_rs_ctx.reset_error();
641 return Err(LibISLError::new(err, err_msg));
642 }
643 Ok(isl_rs_result)
644 }
645
646 pub fn set_pip_symmetry(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
648 let isl_rs_ctx = Context { ptr: ctx.ptr,
649 should_free_on_drop: false };
650 let ctx = ctx.ptr;
651 let isl_rs_result = unsafe { isl_options_set_pip_symmetry(ctx, val) };
652 let isl_rs_result = Stat::from_i32(isl_rs_result);
653 let err = isl_rs_ctx.last_error();
654 if err != Error::None_ {
655 let err_msg = isl_rs_ctx.last_error_msg();
656 isl_rs_ctx.reset_error();
657 return Err(LibISLError::new(err, err_msg));
658 }
659 Ok(isl_rs_result)
660 }
661
662 pub fn set_schedule_algorithm(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
664 let isl_rs_ctx = Context { ptr: ctx.ptr,
665 should_free_on_drop: false };
666 let ctx = ctx.ptr;
667 let isl_rs_result = unsafe { isl_options_set_schedule_algorithm(ctx, val) };
668 let isl_rs_result = Stat::from_i32(isl_rs_result);
669 let err = isl_rs_ctx.last_error();
670 if err != Error::None_ {
671 let err_msg = isl_rs_ctx.last_error_msg();
672 isl_rs_ctx.reset_error();
673 return Err(LibISLError::new(err, err_msg));
674 }
675 Ok(isl_rs_result)
676 }
677
678 pub fn set_schedule_carry_self_first(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
680 let isl_rs_ctx = Context { ptr: ctx.ptr,
681 should_free_on_drop: false };
682 let ctx = ctx.ptr;
683 let isl_rs_result = unsafe { isl_options_set_schedule_carry_self_first(ctx, val) };
684 let isl_rs_result = Stat::from_i32(isl_rs_result);
685 let err = isl_rs_ctx.last_error();
686 if err != Error::None_ {
687 let err_msg = isl_rs_ctx.last_error_msg();
688 isl_rs_ctx.reset_error();
689 return Err(LibISLError::new(err, err_msg));
690 }
691 Ok(isl_rs_result)
692 }
693
694 pub fn set_schedule_max_coefficient(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
696 let isl_rs_ctx = Context { ptr: ctx.ptr,
697 should_free_on_drop: false };
698 let ctx = ctx.ptr;
699 let isl_rs_result = unsafe { isl_options_set_schedule_max_coefficient(ctx, val) };
700 let isl_rs_result = Stat::from_i32(isl_rs_result);
701 let err = isl_rs_ctx.last_error();
702 if err != Error::None_ {
703 let err_msg = isl_rs_ctx.last_error_msg();
704 isl_rs_ctx.reset_error();
705 return Err(LibISLError::new(err, err_msg));
706 }
707 Ok(isl_rs_result)
708 }
709
710 pub fn set_schedule_max_constant_term(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
712 let isl_rs_ctx = Context { ptr: ctx.ptr,
713 should_free_on_drop: false };
714 let ctx = ctx.ptr;
715 let isl_rs_result = unsafe { isl_options_set_schedule_max_constant_term(ctx, val) };
716 let isl_rs_result = Stat::from_i32(isl_rs_result);
717 let err = isl_rs_ctx.last_error();
718 if err != Error::None_ {
719 let err_msg = isl_rs_ctx.last_error_msg();
720 isl_rs_ctx.reset_error();
721 return Err(LibISLError::new(err, err_msg));
722 }
723 Ok(isl_rs_result)
724 }
725
726 pub fn set_schedule_maximize_band_depth(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
728 let isl_rs_ctx = Context { ptr: ctx.ptr,
729 should_free_on_drop: false };
730 let ctx = ctx.ptr;
731 let isl_rs_result = unsafe { isl_options_set_schedule_maximize_band_depth(ctx, val) };
732 let isl_rs_result = Stat::from_i32(isl_rs_result);
733 let err = isl_rs_ctx.last_error();
734 if err != Error::None_ {
735 let err_msg = isl_rs_ctx.last_error_msg();
736 isl_rs_ctx.reset_error();
737 return Err(LibISLError::new(err, err_msg));
738 }
739 Ok(isl_rs_result)
740 }
741
742 pub fn set_schedule_maximize_coincidence(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
744 let isl_rs_ctx = Context { ptr: ctx.ptr,
745 should_free_on_drop: false };
746 let ctx = ctx.ptr;
747 let isl_rs_result = unsafe { isl_options_set_schedule_maximize_coincidence(ctx, val) };
748 let isl_rs_result = Stat::from_i32(isl_rs_result);
749 let err = isl_rs_ctx.last_error();
750 if err != Error::None_ {
751 let err_msg = isl_rs_ctx.last_error_msg();
752 isl_rs_ctx.reset_error();
753 return Err(LibISLError::new(err, err_msg));
754 }
755 Ok(isl_rs_result)
756 }
757
758 pub fn set_schedule_outer_coincidence(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
760 let isl_rs_ctx = Context { ptr: ctx.ptr,
761 should_free_on_drop: false };
762 let ctx = ctx.ptr;
763 let isl_rs_result = unsafe { isl_options_set_schedule_outer_coincidence(ctx, val) };
764 let isl_rs_result = Stat::from_i32(isl_rs_result);
765 let err = isl_rs_ctx.last_error();
766 if err != Error::None_ {
767 let err_msg = isl_rs_ctx.last_error_msg();
768 isl_rs_ctx.reset_error();
769 return Err(LibISLError::new(err, err_msg));
770 }
771 Ok(isl_rs_result)
772 }
773
774 pub fn set_schedule_separate_components(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
776 let isl_rs_ctx = Context { ptr: ctx.ptr,
777 should_free_on_drop: false };
778 let ctx = ctx.ptr;
779 let isl_rs_result = unsafe { isl_options_set_schedule_separate_components(ctx, val) };
780 let isl_rs_result = Stat::from_i32(isl_rs_result);
781 let err = isl_rs_ctx.last_error();
782 if err != Error::None_ {
783 let err_msg = isl_rs_ctx.last_error_msg();
784 isl_rs_ctx.reset_error();
785 return Err(LibISLError::new(err, err_msg));
786 }
787 Ok(isl_rs_result)
788 }
789
790 pub fn set_schedule_serialize_sccs(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
792 let isl_rs_ctx = Context { ptr: ctx.ptr,
793 should_free_on_drop: false };
794 let ctx = ctx.ptr;
795 let isl_rs_result = unsafe { isl_options_set_schedule_serialize_sccs(ctx, val) };
796 let isl_rs_result = Stat::from_i32(isl_rs_result);
797 let err = isl_rs_ctx.last_error();
798 if err != Error::None_ {
799 let err_msg = isl_rs_ctx.last_error_msg();
800 isl_rs_ctx.reset_error();
801 return Err(LibISLError::new(err, err_msg));
802 }
803 Ok(isl_rs_result)
804 }
805
806 pub fn set_schedule_split_scaled(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
808 let isl_rs_ctx = Context { ptr: ctx.ptr,
809 should_free_on_drop: false };
810 let ctx = ctx.ptr;
811 let isl_rs_result = unsafe { isl_options_set_schedule_split_scaled(ctx, val) };
812 let isl_rs_result = Stat::from_i32(isl_rs_result);
813 let err = isl_rs_ctx.last_error();
814 if err != Error::None_ {
815 let err_msg = isl_rs_ctx.last_error_msg();
816 isl_rs_ctx.reset_error();
817 return Err(LibISLError::new(err, err_msg));
818 }
819 Ok(isl_rs_result)
820 }
821
822 pub fn set_schedule_treat_coalescing(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
824 let isl_rs_ctx = Context { ptr: ctx.ptr,
825 should_free_on_drop: false };
826 let ctx = ctx.ptr;
827 let isl_rs_result = unsafe { isl_options_set_schedule_treat_coalescing(ctx, val) };
828 let isl_rs_result = Stat::from_i32(isl_rs_result);
829 let err = isl_rs_ctx.last_error();
830 if err != Error::None_ {
831 let err_msg = isl_rs_ctx.last_error_msg();
832 isl_rs_ctx.reset_error();
833 return Err(LibISLError::new(err, err_msg));
834 }
835 Ok(isl_rs_result)
836 }
837
838 pub fn set_schedule_whole_component(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
840 let isl_rs_ctx = Context { ptr: ctx.ptr,
841 should_free_on_drop: false };
842 let ctx = ctx.ptr;
843 let isl_rs_result = unsafe { isl_options_set_schedule_whole_component(ctx, val) };
844 let isl_rs_result = Stat::from_i32(isl_rs_result);
845 let err = isl_rs_ctx.last_error();
846 if err != Error::None_ {
847 let err_msg = isl_rs_ctx.last_error_msg();
848 isl_rs_ctx.reset_error();
849 return Err(LibISLError::new(err, err_msg));
850 }
851 Ok(isl_rs_result)
852 }
853
854 pub fn set_tile_scale_tile_loops(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
856 let isl_rs_ctx = Context { ptr: ctx.ptr,
857 should_free_on_drop: false };
858 let ctx = ctx.ptr;
859 let isl_rs_result = unsafe { isl_options_set_tile_scale_tile_loops(ctx, val) };
860 let isl_rs_result = Stat::from_i32(isl_rs_result);
861 let err = isl_rs_ctx.last_error();
862 if err != Error::None_ {
863 let err_msg = isl_rs_ctx.last_error_msg();
864 isl_rs_ctx.reset_error();
865 return Err(LibISLError::new(err, err_msg));
866 }
867 Ok(isl_rs_result)
868 }
869
870 pub fn set_tile_shift_point_loops(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
872 let isl_rs_ctx = Context { ptr: ctx.ptr,
873 should_free_on_drop: false };
874 let ctx = ctx.ptr;
875 let isl_rs_result = unsafe { isl_options_set_tile_shift_point_loops(ctx, val) };
876 let isl_rs_result = Stat::from_i32(isl_rs_result);
877 let err = isl_rs_ctx.last_error();
878 if err != Error::None_ {
879 let err_msg = isl_rs_ctx.last_error_msg();
880 isl_rs_ctx.reset_error();
881 return Err(LibISLError::new(err, err_msg));
882 }
883 Ok(isl_rs_result)
884 }
885
886 pub fn do_not_free_on_drop(&mut self) {
889 self.should_free_on_drop = false;
890 }
891}
892
893impl Drop for Options {
894 fn drop(&mut self) {
895 if self.should_free_on_drop {
896 unsafe {
897 isl_options_free(self.ptr);
898 }
899 }
900 }
901}