1 #ifndef HYBRID_H 2 #define HYBRID_H 3 4 #include <isl/val.h> 5 #include <isl/schedule_node.h> 6 7 #include "ppcg.h" 8 9 struct ppcg_ht_bounds; 10 typedef struct ppcg_ht_bounds ppcg_ht_bounds; 11 12 struct ppcg_ht_phase; 13 typedef struct ppcg_ht_phase ppcg_ht_phase; 14 15 isl_bool ppcg_ht_has_input_pattern(__isl_keep isl_schedule_node *node); 16 isl_bool ppcg_ht_parent_has_input_pattern(__isl_keep isl_schedule_node *node); 17 18 __isl_give ppcg_ht_bounds *ppcg_ht_compute_bounds(struct ppcg_scop *scop, 19 __isl_keep isl_schedule_node *node); 20 void ppcg_ht_bounds_dump(__isl_keep ppcg_ht_bounds *bounds); 21 isl_bool ppcg_ht_bounds_is_valid(__isl_keep ppcg_ht_bounds *bounds); 22 isl_bool ppcg_ht_bounds_supports_sizes(__isl_keep ppcg_ht_bounds *bounds, 23 __isl_keep isl_multi_val *sizes); 24 __isl_give isl_schedule_node *ppcg_ht_bounds_insert_tiling( 25 __isl_take ppcg_ht_bounds *bounds, __isl_take isl_multi_val *sizes, 26 __isl_take isl_schedule_node *node, struct ppcg_options *options); 27 __isl_null ppcg_ht_bounds *ppcg_ht_bounds_free( 28 __isl_take ppcg_ht_bounds *bounds); 29 30 __isl_keep ppcg_ht_phase *ppcg_ht_phase_extract_from_mark( 31 __isl_keep isl_schedule_node *node); 32 __isl_give isl_schedule_node *ppcg_ht_phase_shift_space_point( 33 __isl_keep ppcg_ht_phase *phase, __isl_take isl_schedule_node *node); 34 __isl_give isl_schedule_node *hybrid_tile_foreach_phase( 35 __isl_take isl_schedule_node *node, 36 __isl_give isl_schedule_node *(*fn)(__isl_take isl_schedule_node *node, 37 void *user), void *user); 38 __isl_give isl_schedule_node *hybrid_tile_drop_phase_marks( 39 __isl_take isl_schedule_node *node); 40 41 #endif 42