• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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