Skip to content

Instantly share code, notes, and snippets.

@zhen8838
Created September 17, 2023 14:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zhen8838/8ea9ef7c04430af70ff56633ebd94f93 to your computer and use it in GitHub Desktop.
Save zhen8838/8ea9ef7c04430af70ff56633ebd94f93 to your computer and use it in GitHub Desktop.
tiramisu internal
Saved variable t4 of type int32
[src/tiramisu_core.cpp:7196 computation]
| Constructing a scheduled computation.
| Creating computation bx
| Constructed iteration domain: {bx[i, j, c] : 0<=i<98 and 0<=j<198 and 0<=c<3}
| [src/tiramisu_core.cpp:6985 init_computation]
| | Constructing the computation: {bx[i, j, c] : 0<=i<98 and 0<=j<198 and 0<=c<3}
| | [src/tiramisu_core.cpp:2794 name_unnamed_iteration_domain_dimensions]
| | | named unnameed iteration domain: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | Constructing the computation name: bx
| | [src/tiramisu_function.cpp:1813 add_computation]
| | [src/tiramisu_core.cpp:7721 set_identity_schedule_based_on_iteration_domain]
| | | [src/tiramisu_core.cpp:7656 gen_identity_schedule_for_iteration_domain]
| | | The following identity schedule is generated (setting schedule 0):
| | | { bx[i, j, c] -> bx[0, 0, i' = i, 0, j' = j, 0, c' = c, 0] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | The identity schedule for the original computation is set.
| | [src/tiramisu_core.cpp:7834 set_expression]
| | | The original expression is: (((input(i, j, c) + input(i, (j + 1), c)) + input(i, (j + 2), c)) / cast(3) )| | |
| | | Traversing the expression to replace non-affine accesses by a constant definition.
| | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | Input expression: (((input(i, j, c) + input(i, (j + 1), c)) + input(i, (j + 2), c)) / cast(3) )
| | | | Extracting access from e_op.
| | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | Input expression: ((input(i, j, c) + input(i, (j + 1), c)) + input(i, (j + 2), c))
| | | | | Extracting access from e_op.
| | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | Input expression: (input(i, j, c) + input(i, (j + 1), c))
| | | | | | Extracting access from e_op.
| | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | Input expression: input(i, j, c)
| | | | | | | Looking for non-affine accesses in an o_access.
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: i
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: j
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: c
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | Input expression: input(i, (j + 1), c)
| | | | | | | Looking for non-affine accesses in an o_access.
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: i
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: (j + 1)
| | | | | | | | Extracting access from e_op.
| | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | Input expression: j
| | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | Input expression: 1
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: c
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | Input expression: input(i, (j + 2), c)
| | | | | | Looking for non-affine accesses in an o_access.
| | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | Input expression: i
| | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | Input expression: (j + 2)
| | | | | | | Extracting access from e_op.
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: j
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: 2
| | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | Input expression: c
| | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | Input expression: cast(3)
| | | | | Extracting access from e_op.
| | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | Input expression: 3
| | | The new expression is: (((input(i, j, c) + input(i, (j + 1), c)) + input(i, (j + 2), c)) / cast(3) )| | |
| | [src/tiramisu_core.cpp:2816 get_iteration_domain_dimension_names]
| | [src/tiramisu_core.cpp:2658 set_schedule_domain_dim_names]
| | | Checking the validity of loop level 0
| | | Setting the name of the domain of the schedule dimension 0 into t5
| | | The schedule after renaming: { bx[t5, j, c] -> bx[0, 0, i = t5, 0, j' = j, 0, c' = c, 0] : 0 <= t5 <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | [src/tiramisu_core.cpp:2658 set_schedule_domain_dim_names]
| | | Checking the validity of loop level 1
| | | Setting the name of the domain of the schedule dimension 1 into t6
| | | The schedule after renaming: { bx[t5, t6, c] -> bx[0, 0, i = t5, 0, j = t6, 0, c' = c, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= c <= 2 }
| | [src/tiramisu_core.cpp:2658 set_schedule_domain_dim_names]
| | | Checking the validity of loop level 2
| | | Setting the name of the domain of the schedule dimension 2 into t7
| | | The schedule after renaming: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | [src/tiramisu_core.cpp:2681 set_loop_level_names]
| | | Checking the validity of loop level 0
| | | Setting the name of loop level 0 into i
| | | The schedule after renaming: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | [src/tiramisu_core.cpp:2681 set_loop_level_names]
| | | Checking the validity of loop level 1
| | | Setting the name of loop level 1 into j
| | | The schedule after renaming: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | [src/tiramisu_core.cpp:2681 set_loop_level_names]
| | | Checking the validity of loop level 2
| | | Setting the name of loop level 2 into c
| | | The schedule after renaming: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | Searching computation bx
| | Computation found.
| [src/tiramisu_core.cpp:6771 buffer]
| | Constructed buffer :_bx_b1 [(98 - 0), (198 - 0), (3 - 0), ]
| [src/tiramisu_core.cpp:7874 store_in]
| | Binding. The following access function is set: { bx[i, j, c] -> _bx_b1[i' = i, j' = j, c' = c] }
| | [src/tiramisu_core.cpp:7609 set_access]
| | | Setting access { bx[i, j, c] -> _bx_b1[i' = i, j' = j, c' = c] } for computation bx
| | | Searching computation bx
| | | Computation found.
| | | Searching computation bx
| | | Computation found.
| Constructed computation:
Dumping the computation "bx" :
Iteration domain of the computation "bx" : Dumping the schedule of the computation bx : Expression of the computation : (((input(i, j, c) + input(i, (j + 1), c)) + input(i, (j + 2), c)) / cast(3) )
Access relation of the computation : Time-space domain : NULL.
Computation to be scheduled ? 1
Halide statement: NULL
Saved variable t8 of type int32
[src/tiramisu_core.cpp:7196 computation]
| Constructing a scheduled computation.
| Creating computation by
| Constructed iteration domain: {by[i, j, c] : 0<=i<98 and 0<=j<198 and 0<=c<3}
| [src/tiramisu_core.cpp:6985 init_computation]
| | Constructing the computation: {by[i, j, c] : 0<=i<98 and 0<=j<198 and 0<=c<3}
| | [src/tiramisu_core.cpp:2794 name_unnamed_iteration_domain_dimensions]
| | | named unnameed iteration domain: { by[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | Constructing the computation name: by
| | [src/tiramisu_function.cpp:1813 add_computation]
| | [src/tiramisu_core.cpp:7721 set_identity_schedule_based_on_iteration_domain]
| | | [src/tiramisu_core.cpp:7656 gen_identity_schedule_for_iteration_domain]
| | | The following identity schedule is generated (setting schedule 0):
| | | { by[i, j, c] -> by[0, 0, i' = i, 0, j' = j, 0, c' = c, 0] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | The identity schedule for the original computation is set.
| | [src/tiramisu_core.cpp:7834 set_expression]
| | | The original expression is: (((input(i, j, c) + input((i + 1), j, c)) + input((i + 2), j, c)) / cast(3) )| | |
| | | Traversing the expression to replace non-affine accesses by a constant definition.
| | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | Input expression: (((input(i, j, c) + input((i + 1), j, c)) + input((i + 2), j, c)) / cast(3) )
| | | | Extracting access from e_op.
| | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | Input expression: ((input(i, j, c) + input((i + 1), j, c)) + input((i + 2), j, c))
| | | | | Extracting access from e_op.
| | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | Input expression: (input(i, j, c) + input((i + 1), j, c))
| | | | | | Extracting access from e_op.
| | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | Input expression: input(i, j, c)
| | | | | | | Looking for non-affine accesses in an o_access.
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: i
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: j
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: c
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | Input expression: input((i + 1), j, c)
| | | | | | | Looking for non-affine accesses in an o_access.
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: (i + 1)
| | | | | | | | Extracting access from e_op.
| | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | Input expression: i
| | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | Input expression: 1
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: j
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: c
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | Input expression: input((i + 2), j, c)
| | | | | | Looking for non-affine accesses in an o_access.
| | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | Input expression: (i + 2)
| | | | | | | Extracting access from e_op.
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: i
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: 2
| | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | Input expression: j
| | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | Input expression: c
| | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | Input expression: cast(3)
| | | | | Extracting access from e_op.
| | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | Input expression: 3
| | | The new expression is: (((input(i, j, c) + input((i + 1), j, c)) + input((i + 2), j, c)) / cast(3) )| | |
| | [src/tiramisu_core.cpp:2816 get_iteration_domain_dimension_names]
| | [src/tiramisu_core.cpp:2658 set_schedule_domain_dim_names]
| | | Checking the validity of loop level 0
| | | Setting the name of the domain of the schedule dimension 0 into t9
| | | The schedule after renaming: { by[t9, j, c] -> by[0, 0, i = t9, 0, j' = j, 0, c' = c, 0] : 0 <= t9 <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | [src/tiramisu_core.cpp:2658 set_schedule_domain_dim_names]
| | | Checking the validity of loop level 1
| | | Setting the name of the domain of the schedule dimension 1 into t10
| | | The schedule after renaming: { by[t9, t10, c] -> by[0, 0, i = t9, 0, j = t10, 0, c' = c, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= c <= 2 }
| | [src/tiramisu_core.cpp:2658 set_schedule_domain_dim_names]
| | | Checking the validity of loop level 2
| | | Setting the name of the domain of the schedule dimension 2 into t11
| | | The schedule after renaming: { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | [src/tiramisu_core.cpp:2681 set_loop_level_names]
| | | Checking the validity of loop level 0
| | | Setting the name of loop level 0 into i
| | | The schedule after renaming: { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | [src/tiramisu_core.cpp:2681 set_loop_level_names]
| | | Checking the validity of loop level 1
| | | Setting the name of loop level 1 into j
| | | The schedule after renaming: { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | [src/tiramisu_core.cpp:2681 set_loop_level_names]
| | | Checking the validity of loop level 2
| | | Setting the name of loop level 2 into c
| | | The schedule after renaming: { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | Searching computation by
| | Computation found.
| [src/tiramisu_core.cpp:6771 buffer]
| | Constructed buffer :_by_b2 [(98 - 0), (198 - 0), (3 - 0), ]
| [src/tiramisu_core.cpp:7874 store_in]
| | Binding. The following access function is set: { by[i, j, c] -> _by_b2[i' = i, j' = j, c' = c] }
| | [src/tiramisu_core.cpp:7609 set_access]
| | | Setting access { by[i, j, c] -> _by_b2[i' = i, j' = j, c' = c] } for computation by
| | | Searching computation by
| | | Computation found.
| | | Searching computation by
| | | Computation found.
| Constructed computation:
Dumping the computation "by" :
Iteration domain of the computation "by" : Dumping the schedule of the computation by : Expression of the computation : (((input(i, j, c) + input((i + 1), j, c)) + input((i + 2), j, c)) / cast(3) )
Access relation of the computation : Time-space domain : NULL.
Computation to be scheduled ? 1
Halide statement: NULL
[src/tiramisu_core.cpp:5655 compute_at]
| [src/tiramisu_core.cpp:2719 get_loop_level_numbers_from_dimension_names]
| | Searching for the dimension j0
| | Searching in the range of { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | Corresponding loop level is 1
| | Checking the validity of loop level 1
| [src/tiramisu_core.cpp:5450 compute_at]
| | [src/tiramisu_function.cpp:1777 align_schedules]
| | | [src/tiramisu_function.cpp:1717 get_max_schedules_range_dim]
| | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | Input map: { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | | | After alignment, map = { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0, 0, 0, 0, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | | [src/tiramisu_core.cpp:2765 name_unnamed_time_space_dimensions]
| | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | Input map: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | After alignment, map = { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0, 0, 0, 0, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | [src/tiramisu_core.cpp:2765 name_unnamed_time_space_dimensions]
| | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | Input map: { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | | | After alignment, map = { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | | [src/tiramisu_core.cpp:2765 name_unnamed_time_space_dimensions]
| | End of function
| | Setting the schedule of the producer bx to be computed at the loop nest of the consumer by at dimension 5
| | Original schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | [src/tiramisu_core.cpp:5257 compute_needed_and_produced]
| | | [src/tiramisu_codegen_halide.cpp:951 get_rhs_accesses]
| | | | [src/tiramisu_codegen_halide.cpp:603 traverse_expr_and_extract_accesses]
| | | | | Extracting access from e_op.
| | | | | [src/tiramisu_codegen_halide.cpp:603 traverse_expr_and_extract_accesses]
| | | | | | Extracting access from e_op.
| | | | | | [src/tiramisu_codegen_halide.cpp:603 traverse_expr_and_extract_accesses]
| | | | | | | Extracting access from e_op.
| | | | | | | [src/tiramisu_codegen_halide.cpp:603 traverse_expr_and_extract_accesses]
| | | | | | | | Extracting access from o_access.
| | | | | | | | Searching computation bx
| | | | | | | | Computation found.
| | | | | | | | Obtained accessed computation.
| | | | | | | | [src/tiramisu_codegen_halide.cpp:100 create_map_from_domain_and_range]
| | | | | | | | | Domain: { by[i, j, c] }
| | | | | | | | | Range: { bx[i, j, c] }
| | | | | | | | | Transformation map: { by[i, j, c] -> bx[i', j', c'] }
| | | | | | | | | Transformation map after adding equality constraints: { by[i, j, c] -> bx[i' = i, j' = j, c' = c] }
| | | | | | | | Transformation map before adding constraints: { by[i, j, c] -> bx[i', j', c'] }
| | | | | | | | Assigning 1 to the coefficient of output dimension 0
| | | | | | | | Looking for a dimension named i in the domain of { by[i, j, c] -> bx[i', j', c'] }
| | | | | | | | Dimension found. Assigning -1 to the input coefficient of dimension 0
| | | | | | | | After adding a constraint: { by[i, j, c] -> bx[i' = i, j', c'] }
| | | | | | | | Assigning 1 to the coefficient of output dimension 1
| | | | | | | | Looking for a dimension named j in the domain of { by[i, j, c] -> bx[i' = i, j', c'] }
| | | | | | | | Dimension found. Assigning -1 to the input coefficient of dimension 1
| | | | | | | | After adding a constraint: { by[i, j, c] -> bx[i' = i, j' = j, c'] }
| | | | | | | | Assigning 1 to the coefficient of output dimension 2
| | | | | | | | Looking for a dimension named c in the domain of { by[i, j, c] -> bx[i' = i, j' = j, c'] }
| | | | | | | | Dimension found. Assigning -1 to the input coefficient of dimension 2
| | | | | | | | After adding a constraint: { by[i, j, c] -> bx[i' = i, j' = j, c' = c] }
| | | | | | | | Transformation function after adding constraints: { by[i, j, c] -> bx[i' = i, j' = j, c' = c] }
| | | | | | | [src/tiramisu_codegen_halide.cpp:794 traverse_expr_and_extract_accesses]
| | | | | | | [src/tiramisu_codegen_halide.cpp:603 traverse_expr_and_extract_accesses]
| | | | | | | | Extracting access from o_access.
| | | | | | | | Searching computation bx
| | | | | | | | Computation found.
| | | | | | | | Obtained accessed computation.
| | | | | | | | [src/tiramisu_codegen_halide.cpp:100 create_map_from_domain_and_range]
| | | | | | | | | Domain: { by[i, j, c] }
| | | | | | | | | Range: { bx[i, j, c] }
| | | | | | | | | Transformation map: { by[i, j, c] -> bx[i', j', c'] }
| | | | | | | | | Transformation map after adding equality constraints: { by[i, j, c] -> bx[i' = i, j' = j, c' = c] }
| | | | | | | | Transformation map before adding constraints: { by[i, j, c] -> bx[i', j', c'] }
| | | | | | | | Assigning 1 to the coefficient of output dimension 0
| | | | | | | | Looking for a dimension named i in the domain of { by[i, j, c] -> bx[i', j', c'] }
| | | | | | | | Dimension found. Assigning -1 to the input coefficient of dimension 0
| | | | | | | | Assigning -(coeff * access_expression.get_int_val() - isl_val_get_num_si(isl_constraint_get_constant_val(cst))) to the cst dimension. The value assigned is : -1
| | | | | | | | After adding a constraint: { by[i, j, c] -> bx[i' = 1 + i, j', c'] }
| | | | | | | | Assigning 1 to the coefficient of output dimension 1
| | | | | | | | Looking for a dimension named j in the domain of { by[i, j, c] -> bx[i' = 1 + i, j', c'] }
| | | | | | | | Dimension found. Assigning -1 to the input coefficient of dimension 1
| | | | | | | | After adding a constraint: { by[i, j, c] -> bx[i' = 1 + i, j' = j, c'] }
| | | | | | | | Assigning 1 to the coefficient of output dimension 2
| | | | | | | | Looking for a dimension named c in the domain of { by[i, j, c] -> bx[i' = 1 + i, j' = j, c'] }
| | | | | | | | Dimension found. Assigning -1 to the input coefficient of dimension 2
| | | | | | | | After adding a constraint: { by[i, j, c] -> bx[i' = 1 + i, j' = j, c' = c] }
| | | | | | | | Transformation function after adding constraints: { by[i, j, c] -> bx[i' = 1 + i, j' = j, c' = c] }
| | | | | | | [src/tiramisu_codegen_halide.cpp:794 traverse_expr_and_extract_accesses]
| | | | | | [src/tiramisu_codegen_halide.cpp:794 traverse_expr_and_extract_accesses]
| | | | | | [src/tiramisu_codegen_halide.cpp:603 traverse_expr_and_extract_accesses]
| | | | | | | Extracting access from o_access.
| | | | | | | Searching computation bx
| | | | | | | Computation found.
| | | | | | | Obtained accessed computation.
| | | | | | | [src/tiramisu_codegen_halide.cpp:100 create_map_from_domain_and_range]
| | | | | | | | Domain: { by[i, j, c] }
| | | | | | | | Range: { bx[i, j, c] }
| | | | | | | | Transformation map: { by[i, j, c] -> bx[i', j', c'] }
| | | | | | | | Transformation map after adding equality constraints: { by[i, j, c] -> bx[i' = i, j' = j, c' = c] }
| | | | | | | Transformation map before adding constraints: { by[i, j, c] -> bx[i', j', c'] }
| | | | | | | Assigning 1 to the coefficient of output dimension 0
| | | | | | | Looking for a dimension named i in the domain of { by[i, j, c] -> bx[i', j', c'] }
| | | | | | | Dimension found. Assigning -1 to the input coefficient of dimension 0
| | | | | | | Assigning -(coeff * access_expression.get_int_val() - isl_val_get_num_si(isl_constraint_get_constant_val(cst))) to the cst dimension. The value assigned is : -2
| | | | | | | After adding a constraint: { by[i, j, c] -> bx[i' = 2 + i, j', c'] }
| | | | | | | Assigning 1 to the coefficient of output dimension 1
| | | | | | | Looking for a dimension named j in the domain of { by[i, j, c] -> bx[i' = 2 + i, j', c'] }
| | | | | | | Dimension found. Assigning -1 to the input coefficient of dimension 1
| | | | | | | After adding a constraint: { by[i, j, c] -> bx[i' = 2 + i, j' = j, c'] }
| | | | | | | Assigning 1 to the coefficient of output dimension 2
| | | | | | | Looking for a dimension named c in the domain of { by[i, j, c] -> bx[i' = 2 + i, j' = j, c'] }
| | | | | | | Dimension found. Assigning -1 to the input coefficient of dimension 2
| | | | | | | After adding a constraint: { by[i, j, c] -> bx[i' = 2 + i, j' = j, c' = c] }
| | | | | | | Transformation function after adding constraints: { by[i, j, c] -> bx[i' = 2 + i, j' = j, c' = c] }
| | | | | | [src/tiramisu_codegen_halide.cpp:794 traverse_expr_and_extract_accesses]
| | | | | [src/tiramisu_codegen_halide.cpp:794 traverse_expr_and_extract_accesses]
| | | | | [src/tiramisu_codegen_halide.cpp:603 traverse_expr_and_extract_accesses]
| | | | | | Extracting access from e_op.
| | | | | | [src/tiramisu_codegen_halide.cpp:603 traverse_expr_and_extract_accesses]
| | | | | | [src/tiramisu_codegen_halide.cpp:794 traverse_expr_and_extract_accesses]
| | | | | [src/tiramisu_codegen_halide.cpp:794 traverse_expr_and_extract_accesses]
| | | | [src/tiramisu_codegen_halide.cpp:794 traverse_expr_and_extract_accesses]
| | | [src/tiramisu_codegen_halide.cpp:967 get_rhs_accesses]
| | | Computed RHS accesses:
| | | { by[i, j, c] -> bx[i' = i, j' = j, c' = c] }
| | | { by[i, j, c] -> bx[i' = 1 + i, j' = j, c' = c] }
| | | { by[i, j, c] -> bx[i' = 2 + i, j' = j, c' = c] }
| | | Vector of accesses computed.
| | | Computing a union map of accesses to the producer.
| | | consumer_accesses: { by[i, j, c] -> bx[i' = i, j' = j, c' = c] }
| | | access: { by[i, j, c] -> bx[i' = 1 + i, j' = j, c' = c] }
| | | consumer_accesses: { by[i, j, c] -> bx[i' = 1 + i, j' = j, c' = c]; by[i, j, c] -> bx[i' = i, j' = j, c' = c] }
| | | access: { by[i, j, c] -> bx[i' = 2 + i, j' = j, c' = c] }
| | | Union computed.
| | | Intersecting the range and the domain of the following consumer_accesses: { by[i, j, c] -> bx[i' = 2 + i, j' = j, c' = c]; by[i, j, c] -> bx[i' = 1 + i, j' = j, c' = c]; by[i, j, c] -> bx[i' = i, j' = j, c' = c] }
| | | with the following iteration domain: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | [src/tiramisu_core.cpp:5121 intersect_map_domain_with_context]
| | | Accesses after keeping only those that have the producer in the range:
| | | { by[i, j, c] -> bx[i', j' = j, c' = c] : i >= 0 and 0 <= j <= 197 and 0 <= c <= 2 and i <= i' <= 97 and i' <= 2 + i }
| | | [src/tiramisu_core.cpp:5077 intersect_set_with_context]
| | | [src/tiramisu_core.cpp:5121 intersect_map_domain_with_context]
| | | [src/tiramisu_core.cpp:5121 intersect_map_domain_with_context]
| | | [src/tiramisu_core.cpp:5077 intersect_set_with_context]
| | | Applying consumer_sched on the domain of consumer_accesses.
| | | consumer_sched: { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | | consumer_accesses: { by[i, j, c] -> bx[i', j' = j, c' = c] : i >= 0 and 0 <= j <= 197 and 0 <= c <= 2 and i <= i' <= 97 and i' <= 2 + i }
| | | Applying it on the range.
| | |
| | |
| | | Consumer domain (in time-processor): { by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c, t35 = 0] : 0 <= i1 <= 31 and 0 <= j1 <= 31 and 0 <= c <= 2 and -32 - 32i0 - i1 <= 32*floor((-1 - i1)/32) <= 65 - 32i0 - i1 and -32 - 32j0 - j1 <= 32*floor((-1 - j1)/32) <= 165 - 32j0 - j1 }
| | | Consumer accesses (in time-processor): { by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c, t35 = 0] -> bx[0, 0, i, 0, j, 0, c' = c, 0, t38 = 0, 0, t39 = 0, 0] : (-j1 + j) mod 32 = 0 and 0 <= i1 <= 31 and 0 <= j1 <= 31 and 0 <= c <= 2 and 0 <= i <= 97 and j >= 32j0 and 0 <= j <= 197 and j <= 31 + 32j0 and 32*floor((-1 - i1)/32) >= -34 - 32i0 - i1 + i and -32 - 32i0 - i1 <= 32*floor((-1 - i1)/32) <= 65 - 32i0 - i1 and 32*floor((-1 - i1)/32) <= -32 - 32i0 - i1 + i }
| | | Producer domain (in time-processor): { bx[0, 0, i, 0, j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | Consumer domain after fixing left dimensions to parameters: [t40, t41] -> { by[0, t27 = 0, i0 = t40, t29 = 0, j0 = t41, t31 = 0, i1, t24 = 0, j1, t33 = 0, c, t35 = 0] : 0 <= i1 <= 31 and 0 <= j1 <= 31 and 0 <= c <= 2 and -32 - 32t40 - i1 <= 32*floor((-1 - i1)/32) <= 65 - 32t40 - i1 and -32 - 32t41 - j1 <= 32*floor((-1 - j1)/32) <= 165 - 32t41 - j1 }
| | | Producer domain after fixing left dimensions to parameters: [t40, t41] -> { bx[0, 0, i = t40, 0, j = t41, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t40 <= 97 and 0 <= t41 <= 197 and 0 <= c <= 2 }
| | | [src/tiramisu_core.cpp:5077 intersect_set_with_context]
| | | Needed in time-processor = consumer_access(consumer_domain) in time-processor: [t40, t41] -> { bx[0, 0, i, 0, j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t40 >= 0 and 32t40 <= i <= 97 and i <= 33 + 32t40 and j >= 32t41 and 0 <= j <= 197 and j <= 31 + 32t41 and 0 <= c <= 2 and -32 - 32t41 - j <= 32*floor((-1 - j)/32) <= 165 - 32t41 - j }
| | [src/tiramisu_core.cpp:5077 intersect_set_with_context]
| | Missing = needed - producer = [t40, t41] -> { bx[0, 0, i, 0, j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t40 >= 0 and 32t40 <= i <= 97 and i <= 33 + 32t40 and j >= 32t41 and t41 < j <= 197 and j <= 31 + 32t41 and 0 <= c <= 2 and -32 - 32t41 - j <= 32*floor((-1 - j)/32) <= 165 - 32t41 - j; bx[0, 0, i, 0, j = 0, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t41 = 0 and t40 >= 0 and i >= 32t40 and t40 < i <= 97 and i <= 33 + 32t40 and 0 <= c <= 2 and 32*floor((-1)/1) < 0 }
| |
| |
| | [src/tiramisu_core.cpp:5178 get_shift_degrees]
| | | Getting the shift degrees for the missing set.
| | | The missing set is: [t40, t41] -> { bx[0, 0, i, 0, j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t40 >= 0 and 32t40 <= i <= 97 and i <= 33 + 32t40 and j >= 32t41 and t41 < j <= 197 and j <= 31 + 32t41 and 0 <= c <= 2 and -32 - 32t41 - j <= 32*floor((-1 - j)/32) <= 165 - 32t41 - j; bx[0, 0, i, 0, j = 0, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t41 = 0 and t40 >= 0 and i >= 32t40 and t40 < i <= 97 and i <= 33 + 32t40 and 0 <= c <= 2 and 32*floor((-1)/1) < 0 }
| | | Get the shift degrees up to the loop level : 1
| | | The current dynamic dimension is: 2
| | | Projecting out all the dimensions of the set except the dimension 2
| | | Projecting 2 dimensions starting from dimension 0.
| | | After projection: [t40, t41] -> { [i, 0, j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t40 >= 0 and 32t40 <= i <= 97 and i <= 33 + 32t40 and j >= 32t41 and t41 < j <= 197 and j <= 31 + 32t41 and 0 <= c <= 2 and -32 - 32t41 - j <= 32*floor((-1 - j)/32) <= 165 - 32t41 - j; [i, 0, j = 0, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t41 = 0 and t40 >= 0 and i >= 32t40 and t40 < i <= 97 and i <= 33 + 32t40 and 0 <= c <= 2 }
| | | Projecting 9 dimensions starting from dimension 1.
| | | After projection: [t40, t41] -> { [i] : t40 >= 0 and 32t40 <= i <= 97 and i <= 33 + 32t40 and ((0 <= t41 <= 6) or (t41 = 0 and i > t40)) }
| | | [src/tiramisu_core.cpp:1889 isl_set_get_const_dim]
| | | | Getting the constant coefficient of [t40, t41] -> { [i] : t40 >= 0 and 32t40 <= i <= 97 and i <= 33 + 32t40 and ((0 <= t41 <= 6) or (t41 = 0 and i > t40)) } at dimension 0
| | | | The constant is: 0
| | | The constant value of the remaining dimension is: 0
| | | The current dynamic dimension is: 4
| | | Projecting out all the dimensions of the set except the dimension 4
| | | Projecting 4 dimensions starting from dimension 0.
| | | After projection: [t40, t41] -> { [j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t40 <= 3 and j >= 32t41 and t41 < j <= 197 and j <= 31 + 32t41 and 0 <= c <= 2 and -32 - 32t41 - j <= 32*floor((-1 - j)/32) <= 165 - 32t41 - j; [j = 0, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t41 = 0 and 0 <= t40 <= 3 and 0 <= c <= 2 }
| | | After projection: [t40, t41] -> { [j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t40 <= 3 and j >= 32t41 and t41 < j <= 197 and j <= 31 + 32t41 and 0 <= c <= 2 and -32 - 32t41 - j <= 32*floor((-1 - j)/32) <= 165 - 32t41 - j; [j = 0, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t41 = 0 and 0 <= t40 <= 3 and 0 <= c <= 2 }
| | | [src/tiramisu_core.cpp:1889 isl_set_get_const_dim]
| | | | Getting the constant coefficient of [t40, t41] -> { [j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t40 <= 3 and j >= 32t41 and t41 < j <= 197 and j <= 31 + 32t41 and 0 <= c <= 2 and -32 - 32t41 - j <= 32*floor((-1 - j)/32) <= 165 - 32t41 - j; [j = 0, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t41 = 0 and 0 <= t40 <= 3 and 0 <= c <= 2 } at dimension 0
| | | | Dimensions found. Constant = 0
| | | | The constant is: 0
| | | The constant value of the remaining dimension is: 0
| | | Shift degrees are: 0 0
| | Retrieving the constraints of the bset: [t40, t41] -> { bx[0, 0, i, 0, j, 0, c, 0, t38 = 0, 0, t39 = 0, 0, pt40, pt41] : t40 >= 0 and 32t40 <= i <= 97 and i <= 33 + 32t40 and j >= 32t41 and t41 < j <= 197 and j <= 31 + 32t41 and 0 <= c <= 2 and -32 - 32t41 - j <= 32*floor((-1 - j)/32) <= 165 - 32t41 - j }
| | Number of constraints: 21
| | List of constraints:
| | Checking the constraint number 0
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i11 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 1
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : t39 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 2
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i9 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 3
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : t38 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 4
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i7 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 5
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i5 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 6
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i3 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 7
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i1 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 8
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i0 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 9
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : t40 >= 0 })
| | }
| | Does the constraint involve the parameter t40? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : t40 >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : pt40 >= 0 })
| | }
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 10
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -32t40 + i >= 0 })
| | }
| | Does the constraint involve the parameter t40? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -32t40 + i >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i - 32pt40 >= 0 })
| | }
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 11
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 97 - i >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 12
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 33 + 32t40 - i >= 0 })
| | }
| | Does the constraint involve the parameter t40? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 33 + 32t40 - i >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 33 - i + 32pt40 >= 0 })
| | }
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 13
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -32t41 + j >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -32t41 + j >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : j - 32pt41 >= 0 })
| | }
| |
| | Checking the constraint number 14
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -1 - t41 + j >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -1 - t41 + j >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -1 + j - pt41 >= 0 })
| | }
| |
| | Checking the constraint number 15
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 197 - j >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 16
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 31 + 32t41 - j >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 31 + 32t41 - j >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 31 - j + 32pt41 >= 0 })
| | }
| |
| | Checking the constraint number 17
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : c >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 18
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 2 - c >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 19
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 32 + 32t41 + j + 32*floor((-1 - j)/32) >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 32 + 32t41 + j + 32*floor((-1 - j)/32) >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 32 + j + 32pt41 + 32*floor((-1 - j)/32) >= 0 })
| | }
| |
| | Checking the constraint number 20
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 165 - 32t41 - j - 32*floor((-1 - j)/32) >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 165 - 32t41 - j - 32*floor((-1 - j)/32) >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 165 - j - 32pt41 - 32*floor((-1 - j)/32) >= 0 })
| | }
| |
| | The basic set after modifying the constraints:
| | The new value of missing (after intersecting with the new bset):
| | Retrieving the constraints of the bset: [t40, t41] -> { bx[0, 0, i, 0, j = 0, 0, c, 0, t38 = 0, 0, t39 = 0, 0, pt40, pt41] : t41 = 0 and t40 >= 0 and i >= 32t40 and t40 < i <= 97 and i <= 33 + 32t40 and 0 <= c <= 2 and 32*floor((-1)/1) < 0 }
| | Number of constraints: 19
| | List of constraints:
| | Checking the constraint number 0
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i11 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 1
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : t39 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 2
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i9 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 3
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : t38 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 4
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i7 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 5
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i5 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 6
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : j = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 7
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i3 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 8
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i1 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 9
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i0 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 10
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : t41 = 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : t41 = 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : pt41 = 0 })
| | }
| |
| | Checking the constraint number 11
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : t40 >= 0 })
| | }
| | Does the constraint involve the parameter t40? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : t40 >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : pt40 >= 0 })
| | }
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 12
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -32t40 + i >= 0 })
| | }
| | Does the constraint involve the parameter t40? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -32t40 + i >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : i - 32pt40 >= 0 })
| | }
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 13
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 97 - i >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 14
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 33 + 32t40 - i >= 0 })
| | }
| | Does the constraint involve the parameter t40? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 33 + 32t40 - i >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 33 - i + 32pt40 >= 0 })
| | }
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 15
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -1 - 32*floor((-1)/1) >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 16
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -1 - t40 + i >= 0 })
| | }
| | Does the constraint involve the parameter t40? Yes.
| | Modifying the constraint. The original constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -1 - t40 + i >= 0 })
| | }
| | The new constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : -1 + i - pt40 >= 0 })
| | }
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 17
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : 2 - c >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | Checking the constraint number 18
| | Constraint:
| | {
| | ([t40, t41] -> { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11, pt40, pt41] : c >= 0 })
| | }
| | Does the constraint involve the parameter t40? No.
| | Does the constraint involve the parameter t41? No.
| |
| | The basic set after modifying the constraints:
| | The new value of missing (after intersecting with the new bset):
| | Missing before replacing the parameters with existential variables: [t40, t41] -> { bx[0, 0, i, 0, j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t40 >= 0 and 32t40 <= i <= 97 and i <= 33 + 32t40 and j >= 32t41 and t41 < j <= 197 and j <= 31 + 32t41 and 0 <= c <= 2 and -32 - 32t41 - j <= 32*floor((-1 - j)/32) <= 165 - 32t41 - j; bx[0, 0, i, 0, j = 0, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : t41 = 0 and t40 >= 0 and i >= 32t40 and t40 < i <= 97 and i <= 33 + 32t40 and 0 <= c <= 2 and 32*floor((-1)/1) < 0 }
| | Missing after replacing the parameters with existential variables: { bx[0, 0, i, 0, j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= i <= 97 and 0 < j <= 197 and 0 <= c <= 2 and -32 - j - 32*floor((-1 - j)/32) <= 32*floor((j)/32) <= 165 - j - 32*floor((-1 - j)/32); bx[0, 0, i, 0, j = 0, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : 0 < i <= 97 and 0 <= c <= 2 }
| |
| | [src/tiramisu_core.cpp:3239 duplicate]
| | | Creating a schedule that duplicates bx
| | | The duplicate is defined with the following constraints on the domain of the schedule:
| | | and the following constraints on the range of the schedule: { bx[0, 0, i, 0, j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= i <= 97 and 0 < j <= 197 and 0 <= c <= 2 and -32 - j - 32*floor((-1 - j)/32) <= 32*floor((j)/32) <= 165 - j - 32*floor((-1 - j)/32); bx[0, 0, i, 0, j = 0, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : 0 < i <= 97 and 0 <= c <= 2 }
| | | [src/tiramisu_function.cpp:1777 align_schedules]
| | | | [src/tiramisu_function.cpp:1717 get_max_schedules_range_dim]
| | | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | | Input map: { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0, t36 = 0, 0, t37 = 0, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | | | | After alignment, map = { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0, t36 = 0, 0, t37 = 0, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | | | [src/tiramisu_core.cpp:2765 name_unnamed_time_space_dimensions]
| | | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | | Input map: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | After alignment, map = { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | [src/tiramisu_core.cpp:2765 name_unnamed_time_space_dimensions]
| | | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | | Input map: { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | | | | After alignment, map = { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | | | [src/tiramisu_core.cpp:2765 name_unnamed_time_space_dimensions]
| | | End of function
| | | Preparing to adjust the schedule of the computation bx
| | | Original schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | The ID of the last duplicate of this computation (i.e., number of duplicates) is : 0
| | | Now creating a map for the new duplicate.
| | | The map of the original: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | Intersecting the following schedule and set on the range.
| | | Schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | Set: { bx[0, 0, i, 0, j, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= i <= 97 and 0 < j <= 197 and 0 <= c <= 2; bx[0, 0, i, 0, j = 0, 0, c, 0, t38 = 0, 0, t39 = 0, 0] : 0 < i <= 97 and 0 <= c <= 2 }
| | | [src/tiramisu_core.cpp:5121 intersect_map_domain_with_context]
| | | Resulting schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and t6 >= 0 and -t5 < t6 <= 197 and 0 <= t7 <= 2 }
| | | [src/tiramisu_core.cpp:1934 isl_map_set_const_dim]
| | | | Setting the constant coefficient of { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and t6 >= 0 and -t5 < t6 <= 197 and 0 <= t7 <= 2 } at dimension 0 into 1
| | | | Transformation map { bx[i0, i1, i, i3, j, i5, c, i7, t38, i9, t39, i11] -> bx[1, i1, i' = i, i3, j' = j, i5, c' = c, i7, t38' = t38, i9, t39' = t39, i11] }
| | | | After applying the transformation map: { bx[t5, t6, t7] -> bx[1, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and t6 >= 0 and -t5 < t6 <= 197 and 0 <= t7 <= 2 }
| | | After setting the dimension 0 to the new_ID: { bx[t5, t6, t7] -> bx[1, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and t6 >= 0 and -t5 < t6 <= 197 and 0 <= t7 <= 2 }
| | | The map of the new duplicate is now: { bx[t5, t6, t7] -> bx[1, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and t6 >= 0 and -t5 < t6 <= 197 and 0 <= t7 <= 2 }
| | | [src/tiramisu_core.cpp:689 copy]
| | | | Saved variable t42 of type int32
| | | | [src/tiramisu_core.cpp:7190 computation]
| | | | | [src/tiramisu_core.cpp:6995 init_computation]
| | | | | | Constructing the computation: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | | [src/tiramisu_core.cpp:2785 name_unnamed_iteration_domain_dimensions]
| | | | | | | named unnameed iteration domain: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | | Constructing the computation name: bx
| | | | | | [src/tiramisu_function.cpp:1813 add_computation]
| | | | | | [src/tiramisu_core.cpp:7731 set_identity_schedule_based_on_iteration_domain]
| | | | | | | [src/tiramisu_core.cpp:7666 gen_identity_schedule_for_iteration_domain]
| | | | | | | The following identity schedule is generated (setting schedule 0):
| | | | | | | { bx[i, j, c] -> bx[0, 0, i' = i, 0, j' = j, 0, c' = c, 0] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | | | The identity schedule for the original computation is set.
| | | | | | [src/tiramisu_core.cpp:7844 set_expression]
| | | | | | | The original expression is:
| | | | | | | {
| | | | | | | (((input(i, j, c) + input(i, (j + 1), c)) + input(i, (j + 2), c)) / cast(3) )
| | | | | | | }
| | | | | | | Traversing the expression to replace non-affine accesses by a constant definition.
| | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | Input expression: (((input(i, j, c) + input(i, (j + 1), c)) + input(i, (j + 2), c)) / cast(3) )
| | | | | | | | Extracting access from e_op.
| | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | Input expression: ((input(i, j, c) + input(i, (j + 1), c)) + input(i, (j + 2), c))
| | | | | | | | | Extracting access from e_op.
| | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | Input expression: (input(i, j, c) + input(i, (j + 1), c))
| | | | | | | | | | Extracting access from e_op.
| | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | Input expression: input(i, j, c)
| | | | | | | | | | | Looking for non-affine accesses in an o_access.
| | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | | Input expression: i
| | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | | Input expression: j
| | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | | Input expression: c
| | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | Input expression: input(i, (j + 1), c)
| | | | | | | | | | | Looking for non-affine accesses in an o_access.
| | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | | Input expression: i
| | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | | Input expression: (j + 1)
| | | | | | | | | | | | Extracting access from e_op.
| | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | | | Input expression: j
| | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | | | Input expression: 1
| | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | | Input expression: c
| | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | Input expression: input(i, (j + 2), c)
| | | | | | | | | | Looking for non-affine accesses in an o_access.
| | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | Input expression: i
| | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | Input expression: (j + 2)
| | | | | | | | | | | Extracting access from e_op.
| | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | | Input expression: j
| | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | | Input expression: 2
| | | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | | Input expression: c
| | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | | | | [src/tiramisu_codegen_halide.cpp:311 access_is_affine]
| | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | Input expression: cast(3)
| | | | | | | | | Extracting access from e_op.
| | | | | | | | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | | | | | | | Input expression: 3
| | | | | | | The new expression is:
| | | | | | | {
| | | | | | | (((input(i, j, c) + input(i, (j + 1), c)) + input(i, (j + 2), c)) / cast(3) )
| | | | | | | }
| | | | | | [src/tiramisu_core.cpp:2807 get_iteration_domain_dimension_names]
| | | | | | [src/tiramisu_core.cpp:2649 set_schedule_domain_dim_names]
| | | | | | | Checking the validity of loop level 0
| | | | | | | Setting the name of the domain of the schedule dimension 0 into t43
| | | | | | | The schedule after renaming: { bx[t43, j, c] -> bx[0, 0, i = t43, 0, j' = j, 0, c' = c, 0] : 0 <= t43 <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | | [src/tiramisu_core.cpp:2649 set_schedule_domain_dim_names]
| | | | | | | Checking the validity of loop level 1
| | | | | | | Setting the name of the domain of the schedule dimension 1 into t44
| | | | | | | The schedule after renaming: { bx[t43, t44, c] -> bx[0, 0, i = t43, 0, j = t44, 0, c' = c, 0] : 0 <= t43 <= 97 and 0 <= t44 <= 197 and 0 <= c <= 2 }
| | | | | | [src/tiramisu_core.cpp:2649 set_schedule_domain_dim_names]
| | | | | | | Checking the validity of loop level 2
| | | | | | | Setting the name of the domain of the schedule dimension 2 into t45
| | | | | | | The schedule after renaming: { bx[t43, t44, t45] -> bx[0, 0, i = t43, 0, j = t44, 0, c = t45, 0] : 0 <= t43 <= 97 and 0 <= t44 <= 197 and 0 <= t45 <= 2 }
| | | | | | [src/tiramisu_core.cpp:2672 set_loop_level_names]
| | | | | | | Checking the validity of loop level 0
| | | | | | | Setting the name of loop level 0 into i
| | | | | | | The schedule after renaming: { bx[t43, t44, t45] -> bx[0, 0, i = t43, 0, j = t44, 0, c = t45, 0] : 0 <= t43 <= 97 and 0 <= t44 <= 197 and 0 <= t45 <= 2 }
| | | | | | [src/tiramisu_core.cpp:2672 set_loop_level_names]
| | | | | | | Checking the validity of loop level 1
| | | | | | | Setting the name of loop level 1 into j
| | | | | | | The schedule after renaming: { bx[t43, t44, t45] -> bx[0, 0, i = t43, 0, j = t44, 0, c = t45, 0] : 0 <= t43 <= 97 and 0 <= t44 <= 197 and 0 <= t45 <= 2 }
| | | | | | [src/tiramisu_core.cpp:2672 set_loop_level_names]
| | | | | | | Checking the validity of loop level 2
| | | | | | | Setting the name of loop level 2 into c
| | | | | | | The schedule after renaming: { bx[t43, t44, t45] -> bx[0, 0, i = t43, 0, j = t44, 0, c = t45, 0] : 0 <= t43 <= 97 and 0 <= t44 <= 197 and 0 <= t45 <= 2 }
| | | | | | Searching computation bx
| | | | | | Computation found.
| | | The schedule of the original computation:
| | | The schedule of the duplicate:
| | Producer duplicated. Dumping the schedule of the original computation.
| | | Dumping the schedule of the computation bx :
| | | { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | Dumping the schedule of the duplicate computation.
| | | Dumping the schedule of the computation bx :
| | | { bx[t5, t6, t7] -> bx[1, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and t6 >= 0 and -t5 < t6 <= 197 and 0 <= t7 <= 2 }
| | Now setting the duplicate with regard to the other computations.
| | [src/tiramisu_core.cpp:2365 after]
| | | Scheduling bx to be executed after bx at level 1
| | | sched_graph[bx, bx] = 1
| | [src/tiramisu_core.cpp:2365 after]
| | | Scheduling by to be executed after bx at level 1
| | | sched_graph[bx, by] = 1
| | Dumping the schedule of the producer and consumer.
| | | Dumping the schedule of the computation bx :
| | | { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0, t38 = 0, 0, t39 = 0, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | Dumping the schedule of the computation by :
| | | { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
Saved variable i0 of type int32
Saved variable j0 of type int32
Saved variable i1 of type int32
Saved variable j1 of type int32
[src/tiramisu_core.cpp:2940 tile]
| [src/tiramisu_core.cpp:7747 get_loop_level_names]
| | Collecting names of loop levels from the range of the schedule: { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | Names of loop levels: i j c
| [src/tiramisu_core.cpp:2729 get_loop_level_numbers_from_dimension_names]
| | Searching for the dimension i
| | Searching in the range of { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | Corresponding loop level is 0
| | Searching for the dimension j
| | Searching in the range of { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | Corresponding loop level is 1
| | Checking the validity of loop level 0
| | Checking the validity of loop level 1
| The loop level that corresponds to i is 0
| The loop level that corresponds to j is 1
| [src/tiramisu_core.cpp:2708 tile]
| | Checking the validity of loop level 0
| | Checking the validity of loop level 1
| | [src/tiramisu_core.cpp:6296 split]
| | | [src/tiramisu_core.cpp:1869 isl_map_get_static_dim]
| | | | Getting the constant coefficient of { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 } at dimension 0
| | | | Dimensions found. Constant = 0
| | | | The constant is: 0
| | | Original schedule: { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | | Splitting dimension 2 with split size 32
| | | Origin Transformation map : {by[t15,t16,t17,t18,t19,t20,t21,t22] -> by[t15,t16,t12, t13, t14,t18,t19,t20,t21,t22] : t15 = 0 and t12 = floor(t17/32) and t14 = (t17%32) and t13 = 0}
| | | Transformation map : { by[t15 = 0, t16, t17, t18, t19, t20, t21, t22] -> by[t15' = 0, t16' = t16, t12, t13 = 0, t14, t18' = t18, t19' = t19, t20' = t20, t21' = t21, t22' = t22] : (-t17 + t14) mod 32 = 0 and -31 + t17 <= 32t12 <= t17 and 0 <= t14 <= 31 }
| | | Schedule after splitting: { by[t9, t10, t11] -> by[t15 = 0, t16 = 0, t12, t13 = 0, t14, t18 = 0, t19 = t10, t20 = 0, t21 = t11, t22 = 0] : (t9 - t14) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32t12 <= t9 and 0 <= t14 <= 31 }
| | [src/tiramisu_core.cpp:6296 split]
| | | [src/tiramisu_core.cpp:1869 isl_map_get_static_dim]
| | | | Getting the constant coefficient of { by[t9, t10, t11] -> by[t15 = 0, t16 = 0, t12, t13 = 0, t14, t18 = 0, t19 = t10, t20 = 0, t21 = t11, t22 = 0] : (t9 - t14) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32t12 <= t9 and 0 <= t14 <= 31 } at dimension 0
| | | | Dimensions found. Constant = 0
| | | | The constant is: 0
| | | Original schedule: { by[t9, t10, t11] -> by[t15 = 0, t16 = 0, t12, t13 = 0, t14, t18 = 0, t19 = t10, t20 = 0, t21 = t11, t22 = 0] : (t9 - t14) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32t12 <= t9 and 0 <= t14 <= 31 }
| | | Splitting dimension 6 with split size 32
| | | Origin Transformation map : {by[t26,t27,t28,t29,t30,t31,t32,t33,t34,t35] -> by[t26,t27,t28,t29,t30,t31,t23, t24, t25,t33,t34,t35] : t26 = 0 and t23 = floor(t32/32) and t25 = (t32%32) and t24 = 0}
| | | Transformation map : { by[t26 = 0, t27, t28, t29, t30, t31, t32, t33, t34, t35] -> by[t26' = 0, t27' = t27, t28' = t28, t29' = t29, t30' = t30, t31' = t31, t23, t24 = 0, t25, t33' = t33, t34' = t34, t35' = t35] : (-t32 + t25) mod 32 = 0 and -31 + t32 <= 32t23 <= t32 and 0 <= t25 <= 31 }
| | | Schedule after splitting: { by[t9, t10, t11] -> by[t26 = 0, t27 = 0, t28, t29 = 0, t30, t31 = 0, t23, t24 = 0, t25, t33 = 0, t34 = t11, t35 = 0] : (t10 - t25) mod 32 = 0 and (t9 - t30) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32t28 <= t9 and 0 <= t30 <= 31 and -31 + t10 <= 32t23 <= t10 and 0 <= t25 <= 31 }
| | [src/tiramisu_core.cpp:3091 interchange]
| | | Original schedule: { by[t9, t10, t11] -> by[t26 = 0, t27 = 0, t28, t29 = 0, t30, t31 = 0, t23, t24 = 0, t25, t33 = 0, t34 = t11, t35 = 0] : (t10 - t25) mod 32 = 0 and (t9 - t30) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32t28 <= t9 and 0 <= t30 <= 31 and -31 + t10 <= 32t23 <= t10 and 0 <= t25 <= 31 }
| | | Interchanging the dimensions 1 and 2
| | | [src/tiramisu_core.cpp:1869 isl_map_get_static_dim]
| | | | Getting the constant coefficient of { by[t9, t10, t11] -> by[t26 = 0, t27 = 0, t28, t29 = 0, t30, t31 = 0, t23, t24 = 0, t25, t33 = 0, t34 = t11, t35 = 0] : (t10 - t25) mod 32 = 0 and (t9 - t30) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32t28 <= t9 and 0 <= t30 <= 31 and -31 + t10 <= 32t23 <= t10 and 0 <= t25 <= 31 } at dimension 0
| | | | Dimensions found. Constant = 0
| | | | The constant is: 0
| | | [src/tiramisu_core.cpp:1869 isl_map_get_static_dim]
| | | | Getting the constant coefficient of { by[t9, t10, t11] -> by[t26 = 0, t27 = 0, t28, t29 = 0, t30, t31 = 0, t23, t24 = 0, t25, t33 = 0, t34 = t11, t35 = 0] : (t10 - t25) mod 32 = 0 and (t9 - t30) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32t28 <= t9 and 0 <= t30 <= 31 and -31 + t10 <= 32t23 <= t10 and 0 <= t25 <= 31 } at dimension 0
| | | | Dimensions found. Constant = 0
| | | | The constant is: 0
| | | A map that transforms the duplicate
| | | { by[0,t27,t28,t29,t30,t31,t23,t24,t25,t33,t34,t35] ->by[0,t27,t28,t29,t23,t31,t30,t24,t25,t33,t34,t35]}
| | | Final transformation map : { by[0, t27, t28, t29, t30, t31, t23, t24, t25, t33, t34, t35] -> by[0, t27' = t27, t28' = t28, t29' = t29, t23' = t23, t31' = t31, t30' = t30, t24' = t24, t25' = t25, t33' = t33, t34' = t34, t35' = t35] }
| | | Schedule after interchange: { by[t9, t10, t11] -> by[0, t27 = 0, t28, t29 = 0, t23, t31 = 0, t30, t24 = 0, t25, t33 = 0, t34 = t11, t35 = 0] : (t10 - t25) mod 32 = 0 and (t9 - t30) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32t28 <= t9 and -31 + t10 <= 32t23 <= t10 and 0 <= t30 <= 31 and 0 <= t25 <= 31 }
| [src/tiramisu_core.cpp:1187 update_names]
| | Original loop level names: i j c
| | New names: i0 j0 i1 j1
| | Start erasing from: 0
| | Number of loop levels to erase: 2
| | Original loop level names after erasing loop levels: c
| | Original loop level names after inserting the new loop levels: i0 j0 i1 j1 c
| | [src/tiramisu_core.cpp:2631 set_loop_level_names]
| | | Number of loop levels: 5
| | | Number of names to be set: 5
| | | Setting the name of loop level 0 into i0
| | | Setting the name of loop level 1 into j0
| | | Setting the name of loop level 2 into i1
| | | Setting the name of loop level 3 into j1
| | | Setting the name of loop level 4 into c
| | | The schedule after renaming: { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | Names updated. New names are:
| | [src/tiramisu_core.cpp:7747 get_loop_level_names]
| | | Collecting names of loop levels from the range of the schedule: { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | | Names of loop levels: i0 j0 i1 j1 c
[src/tiramisu_core.cpp:379 tag_gpu_level]
| [src/tiramisu_core.cpp:2729 get_loop_level_numbers_from_dimension_names]
| | Searching for the dimension i0
| | Searching in the range of { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | Corresponding loop level is 0
| | Searching for the dimension j0
| | Searching in the range of { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | Corresponding loop level is 1
| | Searching for the dimension i1
| | Searching in the range of { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | Corresponding loop level is 2
| | Searching for the dimension j1
| | Searching in the range of { by[t9, t10, t11] -> by[0, t27 = 0, i0, t29 = 0, j0, t31 = 0, i1, t24 = 0, j1, t33 = 0, c = t11, t35 = 0] : (t10 - j1) mod 32 = 0 and (t9 - i1) mod 32 = 0 and 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 and -31 + t9 <= 32i0 <= t9 and -31 + t10 <= 32j0 <= t10 and 0 <= i1 <= 31 and 0 <= j1 <= 31 }
| | Corresponding loop level is 3
| | Checking the validity of loop level 0
| | Checking the validity of loop level 1
| | Checking the validity of loop level 2
| | Checking the validity of loop level 3
| Checking the validity of loop level 0
| Checking the validity of loop level 1
| Checking the validity of loop level 2
| Checking the validity of loop level 3
Saved variable i of type int32
Saved variable j of type int32
Saved variable c of type int32
Saved variable t0 of type int32
[src/tiramisu_core.cpp:7185 computation]
| Constructing an unscheduled computation.
| Creating computation input
| Constructed iteration domain: {input[i, j, c] : 0<=i<100 and 0<=j<200 and 0<=c<3}
| [src/tiramisu_core.cpp:6974 init_computation]
| | Constructing the computation: {input[i, j, c] : 0<=i<100 and 0<=j<200 and 0<=c<3}
| | [src/tiramisu_core.cpp:2794 name_unnamed_iteration_domain_dimensions]
| | | named unnameed iteration domain: { input[i, j, c] : 0 <= i <= 99 and 0 <= j <= 199 and 0 <= c <= 2 }
| | Constructing the computation name: input
| | [src/tiramisu_function.cpp:1813 add_computation]
| | [src/tiramisu_core.cpp:7710 set_identity_schedule_based_on_iteration_domain]
| | | [src/tiramisu_core.cpp:7645 gen_identity_schedule_for_iteration_domain]
| | | The following identity schedule is generated (setting schedule 0):
| | | { input[i, j, c] -> input[0, 0, i' = i, 0, j' = j, 0, c' = c, 0] : 0 <= i <= 99 and 0 <= j <= 199 and 0 <= c <= 2 }
| | | The identity schedule for the original computation is set.
| | [src/tiramisu_core.cpp:7823 set_expression]
| | | The original expression is: | | |
| | | Traversing the expression to replace non-affine accesses by a constant definition.
| | | [src/tiramisu_codegen_halide.cpp:803 traverse_expr_and_replace_non_affine_accesses]
| | | | Input expression:
| | | The new expression is: | | |
| | [src/tiramisu_core.cpp:2816 get_iteration_domain_dimension_names]
| | [src/tiramisu_core.cpp:2658 set_schedule_domain_dim_names]
| | | Checking the validity of loop level 0
| | | Setting the name of the domain of the schedule dimension 0 into t1
| | | The schedule after renaming: { input[t1, j, c] -> input[0, 0, i = t1, 0, j' = j, 0, c' = c, 0] : 0 <= t1 <= 99 and 0 <= j <= 199 and 0 <= c <= 2 }
| | [src/tiramisu_core.cpp:2658 set_schedule_domain_dim_names]
| | | Checking the validity of loop level 1
| | | Setting the name of the domain of the schedule dimension 1 into t2
| | | The schedule after renaming: { input[t1, t2, c] -> input[0, 0, i = t1, 0, j = t2, 0, c' = c, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= c <= 2 }
| | [src/tiramisu_core.cpp:2658 set_schedule_domain_dim_names]
| | | Checking the validity of loop level 2
| | | Setting the name of the domain of the schedule dimension 2 into t3
| | | The schedule after renaming: { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | [src/tiramisu_core.cpp:2681 set_loop_level_names]
| | | Checking the validity of loop level 0
| | | Setting the name of loop level 0 into i
| | | The schedule after renaming: { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | [src/tiramisu_core.cpp:2681 set_loop_level_names]
| | | Checking the validity of loop level 1
| | | Setting the name of loop level 1 into j
| | | The schedule after renaming: { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | [src/tiramisu_core.cpp:2681 set_loop_level_names]
| | | Checking the validity of loop level 2
| | | Setting the name of loop level 2 into c
| | | The schedule after renaming: { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | Searching computation input
| | Computation found.
| [src/tiramisu_core.cpp:7863 store_in]
| | Binding. The following access function is set: { input[i, j, c] -> _input_b0[i' = i, j' = j, c' = c] }
| | [src/tiramisu_core.cpp:7598 set_access]
| | | Setting access { input[i, j, c] -> _input_b0[i' = i, j' = j, c' = c] } for computation input
| | | Searching computation input
| | | Computation found.
| | | Searching computation input
| | | Computation found.
| Constructed computation:
Dumping the computation "input" :
Iteration domain of the computation "input" : { input[i, j, c] : i >= 0 and i <= 99 and j >= 0 and j <= 199 and c >= 0 and c <= 2 }
Dumping the schedule of the computation input : Expression of the computation :
Access relation of the computation : Time-space domain : NULL.
Computation to be scheduled ? 0
Halide statement: NULL
[src/tiramisu_core.cpp:3068 interchange]
| [src/tiramisu_core.cpp:2728 get_loop_level_numbers_from_dimension_names]
| | Searching for the dimension i
| | Searching in the range of { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | Corresponding loop level is 0
| | Searching for the dimension j
| | Searching in the range of { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | Corresponding loop level is 1
| | Checking the validity of loop level 0
| | Checking the validity of loop level 1
| Checking the validity of loop level 0
| Checking the validity of loop level 1
| [src/tiramisu_core.cpp:3090 interchange]
| | Original schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | Interchanging the dimensions 0 and 1
| | [src/tiramisu_core.cpp:1868 isl_map_get_static_dim]
| | | Getting the constant coefficient of { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 } at dimension 0
| | | Dimensions found. Constant = 0
| | | The constant is: 0
| | [src/tiramisu_core.cpp:1868 isl_map_get_static_dim]
| | | Getting the constant coefficient of { bx[t5, t6, t7] -> bx[0, t12 = 0, i = t5, t13 = 0, j = t6, t14 = 0, c = t7, t15 = 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 } at dimension 0
| | | Dimensions found. Constant = 0
| | | The constant is: 0
| | A map that transforms the duplicate
| | { bx[0,t12,i,t13,j,t14,c,t15] ->bx[0,t12,j,t13,i,t14,c,t15]}
| | Final transformation map : { bx[0, t12, i, t13, j, t14, c, t15] -> bx[0, t12' = t12, j' = j, t13' = t13, i' = i, t14' = t14, c' = c, t15' = t15] }
| | Schedule after interchange: { bx[t5, t6, t7] -> bx[0, t12 = 0, j = t6, t13 = 0, i = t5, t14 = 0, c = t7, t15 = 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
[src/tiramisu_core.cpp:5019 shift]
| [src/tiramisu_core.cpp:2728 get_loop_level_numbers_from_dimension_names]
| | Searching for the dimension i
| | Searching in the range of { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | Corresponding loop level is 0
| | Checking the validity of loop level 0
| Checking the validity of loop level 0
| [src/tiramisu_core.cpp:5035 shift]
| | Creating a schedule that shifts the loop level 0 of the computation bx by 10
| | [src/tiramisu_function.cpp:1777 align_schedules]
| | | [src/tiramisu_function.cpp:1717 get_max_schedules_range_dim]
| | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | Input map: { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | | | After alignment, map = { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | | [src/tiramisu_core.cpp:2774 name_unnamed_time_space_dimensions]
| | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | Input map: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | After alignment, map = { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | [src/tiramisu_core.cpp:2774 name_unnamed_time_space_dimensions]
| | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | Input map: { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | | | After alignment, map = { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | | [src/tiramisu_core.cpp:2774 name_unnamed_time_space_dimensions]
| | End of function
| | Original schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | [src/tiramisu_core.cpp:3333 add_eq_to_schedule_map]
| | | The schedule : { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | Editing the dimension 2
| | | Coefficient of the input dimension -1
| | | Coefficient of the output dimension -1
| | | Coefficient of the constant 10
| | | Setting the constraint for dimension 2
| | | The identity schedule is now: { bx[i0, i1, i, i3, j, i5, c, i7] -> bx[i0, i1, i' = 10 + i, o3, j', o5, c', o7] }
| | | The transformation map is: { bx[i0, i1, i, i3, j, i5, c, i7] -> bx[i0, i1, i' = 10 + i, i3, j' = j, i5, c' = c, i7] }
| | | The schedule after being transformed: { bx[t5, t6, t7] -> bx[0, 0, i = 10 + t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | Schedule after shifting: { bx[t5, t6, t7] -> bx[0, 0, i = 10 + t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
Saved variable i0 of type int32
Saved variable i1 of type int32
[src/tiramisu_core.cpp:6258 split]
| [src/tiramisu_core.cpp:7737 get_loop_level_names]
| | Collecting names of loop levels from the range of the schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | Names of loop levels: i j c
| [src/tiramisu_core.cpp:2729 get_loop_level_numbers_from_dimension_names]
| | Searching for the dimension i
| | Searching in the range of { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | Corresponding loop level is 0
| | Checking the validity of loop level 0
| Checking the validity of loop level 0
| [src/tiramisu_core.cpp:6286 split]
| | [src/tiramisu_core.cpp:1869 isl_map_get_static_dim]
| | | Getting the constant coefficient of { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 } at dimension 0
| | | Dimensions found. Constant = 0
| | | The constant is: 0
| | Original schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | Splitting dimension 2 with split size 16
| | Origin Transformation map : {bx[t15,t16,t17,t18,t19,t20,t21,t22] -> bx[t15,t16,t12, t13, t14,t18,t19,t20,t21,t22] : t15 = 0 and t12 = floor(t17/16) and t14 = (t17%16) and t13 = 0}
| | Transformation map : { bx[t15 = 0, t16, t17, t18, t19, t20, t21, t22] -> bx[t15' = 0, t16' = t16, t12, t13 = 0, t14, t18' = t18, t19' = t19, t20' = t20, t21' = t21, t22' = t22] : (-t17 + t14) mod 16 = 0 and -15 + t17 <= 16t12 <= t17 and 0 <= t14 <= 15 }
| | Schedule after splitting: { bx[t5, t6, t7] -> bx[t15 = 0, t16 = 0, t12, t13 = 0, t14, t18 = 0, t19 = t6, t20 = 0, t21 = t7, t22 = 0] : (t5 - t14) mod 16 = 0 and 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 and -15 + t5 <= 16t12 <= t5 and 0 <= t14 <= 15 }
| [src/tiramisu_core.cpp:1187 update_names]
| | Original loop level names: i j c
| | New names: i0 i1
| | Start erasing from: 0
| | Number of loop levels to erase: 1
| | Original loop level names after erasing loop levels: j c
| | Original loop level names after inserting the new loop levels: i0 i1 j c
| | [src/tiramisu_core.cpp:2631 set_loop_level_names]
| | | Number of loop levels: 4
| | | Number of names to be set: 4
| | | Setting the name of loop level 0 into i0
| | | Setting the name of loop level 1 into i1
| | | Setting the name of loop level 2 into j
| | | Setting the name of loop level 3 into c
| | | The schedule after renaming: { bx[t5, t6, t7] -> bx[t15 = 0, t16 = 0, i0, t13 = 0, i1, t18 = 0, j = t6, t20 = 0, c = t7, t22 = 0] : (t5 - i1) mod 16 = 0 and 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 and -15 + t5 <= 16i0 <= t5 and 0 <= i1 <= 15 }
| | Names updated. New names are:
| | [src/tiramisu_core.cpp:7737 get_loop_level_names]
| | | Collecting names of loop levels from the range of the schedule: { bx[t5, t6, t7] -> bx[t15 = 0, t16 = 0, i0, t13 = 0, i1, t18 = 0, j = t6, t20 = 0, c = t7, t22 = 0] : (t5 - i1) mod 16 = 0 and 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 and -15 + t5 <= 16i0 <= t5 and 0 <= i1 <= 15 }
| | | Names of loop levels: i0 i1 j c
[src/tiramisu_core.cpp:1302 unroll]
| Saved variable t12 of type int32
| Saved variable t13 of type int32
| [src/tiramisu_core.cpp:1314 unroll]
| | [src/tiramisu_core.cpp:7747 get_loop_level_names]
| | | Collecting names of loop levels from the range of the schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | Names of loop levels: i j c
| | [src/tiramisu_core.cpp:2729 get_loop_level_numbers_from_dimension_names]
| | | Searching for the dimension c
| | | Searching in the range of { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | Corresponding loop level is 2
| | | Checking the validity of loop level 2
| | Checking the validity of loop level 2
| | [src/tiramisu_core.cpp:6226 separateAndSplit]
| | | [src/tiramisu_core.cpp:7747 get_loop_level_names]
| | | | Collecting names of loop levels from the range of the schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | Names of loop levels: i j c
| | | [src/tiramisu_core.cpp:2729 get_loop_level_numbers_from_dimension_names]
| | | | Searching for the dimension c
| | | | Searching in the range of { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | Corresponding loop level is 2
| | | | Checking the validity of loop level 2
| | | Checking the validity of loop level 2
| | | [src/tiramisu_core.cpp:6133 separateAndSplit]
| | | | Applying separateAndSplit on loop level 2 with a split factor of 3
| | | | [src/tiramisu_core.cpp:7568 gen_time_space_domain]
| | | | | Iteration domain: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | [src/tiramisu_core.cpp:5087 intersect_set_with_context]
| | | | | Iteration domain Intersect context: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | Schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | Generated time-space domain: { bx[0, 0, i, 0, j, 0, c, 0] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | [src/tiramisu_core.cpp:5971 compute_maximal_AST_depth]
| | | | | [src/tiramisu_core.cpp:2775 name_unnamed_time_space_dimensions]
| | | | | [src/tiramisu_core.cpp:7568 gen_time_space_domain]
| | | | | | Iteration domain: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | | [src/tiramisu_core.cpp:5087 intersect_set_with_context]
| | | | | | Iteration domain Intersect context: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | | Schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | | Generated time-space domain: { bx[0, 0, i, 0, j, 0, c, 0] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | Getting the maximal AST depth of the set { bx[0, i, 0, j, 0, c, 0] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | Setting ISL AST generator options.
| | | | | Generating time-space domain.
| | | | | Setting the iterator names.
| | | | | [src/tiramisu_core.cpp:5808 compute_recursively_max_AST_depth]
| | | | | | Computing maximal AST depth from the following ISL AST node
| | | | | | {
| | | | | | for (int i = 0; i <= 97; i += 1)
| | | | | | for (int j = 0; j <= 197; j += 1)
| | | | | | for (int c = 0; c <= 2; c += 1)
| | | | | | bx(0, i, 0, j, 0, c, 0);
| | | | | | }
| | | | | | Computing maximal depth from a for loop.
| | | | | | [src/tiramisu_core.cpp:5808 compute_recursively_max_AST_depth]
| | | | | | | Computing maximal AST depth from the following ISL AST node
| | | | | | | {
| | | | | | | for (int j = 0; j <= 197; j += 1)
| | | | | | | for (int c = 0; c <= 2; c += 1)
| | | | | | | bx(0, i, 0, j, 0, c, 0);
| | | | | | | }
| | | | | | | Computing maximal depth from a for loop.
| | | | | | | [src/tiramisu_core.cpp:5808 compute_recursively_max_AST_depth]
| | | | | | | | Computing maximal AST depth from the following ISL AST node
| | | | | | | | {
| | | | | | | | for (int c = 0; c <= 2; c += 1)
| | | | | | | | bx(0, i, 0, j, 0, c, 0);
| | | | | | | | }
| | | | | | | | Computing maximal depth from a for loop.
| | | | | | | | [src/tiramisu_core.cpp:5808 compute_recursively_max_AST_depth]
| | | | | | | | | Computing maximal AST depth from the following ISL AST node
| | | | | | | | | {
| | | | | | | | | bx(0, i, 0, j, 0, c, 0);
| | | | | | | | | }
| | | | | | | | | Reached a user node.
| | | | | | | | | Current depth = 1
| | | | | | | | Current depth = 2
| | | | | | | Current depth = 3
| | | | | | Current depth = 4
| | | | | The maximal AST depth is : 4
| | | | Computing upper bound at loop level 2
| | | | [src/tiramisu_core.cpp:6043 get_bound]
| | | | | Getting the upper bound on the dimension 2 of the set { bx[0, i, 0, j, 0, c, 0] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | Setting ISL AST generator options.
| | | | | Generating time-space domain.
| | | | | Setting the iterator names.
| | | | | [src/tiramisu_core.cpp:5878 extract_bound_expression]
| | | | | | Extracting bounds from a loop at depth = 2
| | | | | | Extracting bounds from the following ISL AST node :
| | | | | | {
| | | | | | for (int i = 0; i <= 97; i += 1)
| | | | | | for (int j = 0; j <= 197; j += 1)
| | | | | | for (int c = 0; c <= 2; c += 1)
| | | | | | bx(0, i, 0, j, 0, c, 0);
| | | | | | }
| | | | | | Extracting bounds from a for loop.
| | | | | | Lower bound at this level is: 0
| | | | | | Upper bound at this level is: i <= 97
| | | | | | [src/tiramisu_core.cpp:5878 extract_bound_expression]
| | | | | | | Extracting bounds from a loop at depth = 1
| | | | | | | Extracting bounds from the following ISL AST node :
| | | | | | | {
| | | | | | | for (int j = 0; j <= 197; j += 1)
| | | | | | | for (int c = 0; c <= 2; c += 1)
| | | | | | | bx(0, i, 0, j, 0, c, 0);
| | | | | | | }
| | | | | | | Extracting bounds from a for loop.
| | | | | | | Lower bound at this level is: 0
| | | | | | | Upper bound at this level is: j <= 197
| | | | | | | [src/tiramisu_core.cpp:5878 extract_bound_expression]
| | | | | | | | Extracting bounds from a loop at depth = 0
| | | | | | | | Extracting bounds from the following ISL AST node :
| | | | | | | | {
| | | | | | | | for (int c = 0; c <= 2; c += 1)
| | | | | | | | bx(0, i, 0, j, 0, c, 0);
| | | | | | | | }
| | | | | | | | Extracting bounds from a for loop.
| | | | | | | | Lower bound at this level is: 0
| | | | | | | | Upper bound at this level is: c <= 2
| | | | | | | | [src/tiramisu_codegen_halide.cpp:972 tiramisu_expr_from_isl_ast_expr]
| | | | | | | | | Input expression: 2
| | | | | | | | Extracted bound:2
| | | | | | | Extracted bound:2
| | | | | | Extracted bound:2
| | | | | The upper bound is : 2
| | | | Computing lower bound at loop level 2
| | | | [src/tiramisu_core.cpp:6043 get_bound]
| | | | | Getting the lower bound on the dimension 2 of the set { bx[0, i, 0, j, 0, c, 0] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | Setting ISL AST generator options.
| | | | | Generating time-space domain.
| | | | | Setting the iterator names.
| | | | | [src/tiramisu_core.cpp:5878 extract_bound_expression]
| | | | | | Extracting bounds from a loop at depth = 2
| | | | | | Extracting bounds from the following ISL AST node :
| | | | | | {
| | | | | | for (int i = 0; i <= 97; i += 1)
| | | | | | for (int j = 0; j <= 197; j += 1)
| | | | | | for (int c = 0; c <= 2; c += 1)
| | | | | | bx(0, i, 0, j, 0, c, 0);
| | | | | | }
| | | | | | Extracting bounds from a for loop.
| | | | | | Lower bound at this level is: 0
| | | | | | Upper bound at this level is: i <= 97
| | | | | | [src/tiramisu_core.cpp:5878 extract_bound_expression]
| | | | | | | Extracting bounds from a loop at depth = 1
| | | | | | | Extracting bounds from the following ISL AST node :
| | | | | | | {
| | | | | | | for (int j = 0; j <= 197; j += 1)
| | | | | | | for (int c = 0; c <= 2; c += 1)
| | | | | | | bx(0, i, 0, j, 0, c, 0);
| | | | | | | }
| | | | | | | Extracting bounds from a for loop.
| | | | | | | Lower bound at this level is: 0
| | | | | | | Upper bound at this level is: j <= 197
| | | | | | | [src/tiramisu_core.cpp:5878 extract_bound_expression]
| | | | | | | | Extracting bounds from a loop at depth = 0
| | | | | | | | Extracting bounds from the following ISL AST node :
| | | | | | | | {
| | | | | | | | for (int c = 0; c <= 2; c += 1)
| | | | | | | | bx(0, i, 0, j, 0, c, 0);
| | | | | | | | }
| | | | | | | | Extracting bounds from a for loop.
| | | | | | | | Lower bound at this level is: 0
| | | | | | | | Upper bound at this level is: c <= 2
| | | | | | | | [src/tiramisu_codegen_halide.cpp:972 tiramisu_expr_from_isl_ast_expr]
| | | | | | | | | Input expression: 0
| | | | | | | | Extracted bound:0
| | | | | | | Extracted bound:0
| | | | | | Extracted bound:0
| | | | | The lower bound is : 0
| | | | Loop bound for the loop to be separated and split: ((cast(2) - cast(0) ) + cast(1) )
| | | | [src/tiramisu_core.cpp:748 separate]
| | | | | Separating the computation at level 2
| | | | | Generating the time-space domain.
| | | | | [src/tiramisu_core.cpp:7568 gen_time_space_domain]
| | | | | | Iteration domain: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | | [src/tiramisu_core.cpp:5087 intersect_set_with_context]
| | | | | | Iteration domain Intersect context: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | | Schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | | Generated time-space domain: { bx[0, 0, i, 0, j, 0, c, 0] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | Constructing the constraint (i<v*floor(N/v))
| | | | | Removing any cast operator in N.
| | | | | The constraint is:{bx[0,o1,i,o3,j,o5,c,o7]: c < (3*( floor(((((2) - (0) ) + (1) ))/3)) +(0) )}
| | | | | Constructing the constraint (i>=v*(floor(N/v)))
| | | | | The constraint is:{bx[0,o1,i,o3,j,o5,c,o7]: c >= (3*(floor(((((2) - (0) ) + (1) ))/3)) +(0) )}
| | | | | The separate computation is empty. Thus not added.
| | | | | [src/tiramisu_core.cpp:1719 add_schedule_constraint]
| | | | | | Adding the following constraints to the range of the schedule :
| | | | | | { bx[0, o1, i, o3, j, o5, c, o7] : c <= 2 }
| | | | | | The schedule : { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | | Schedule after transformation :
| | | | | | { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | The original computation:
Dumping the computation "bx" :
Iteration domain of the computation "bx" : Dumping the schedule of the computation bx : Expression of the computation : (((input(i, j, c) + input(i, (j + 1), c)) + input(i, (j + 2), c)) / cast(3) )
Access relation of the computation : Time-space domain
Computation to be scheduled ? 1
Halide statement: NULL
| | | | [src/tiramisu_core.cpp:6434 split_with_lower_bound]
| | | | | [src/tiramisu_core.cpp:1869 isl_map_get_static_dim]
| | | | | | Getting the constant coefficient of { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 } at dimension 0
| | | | | | Dimensions found. Constant = 0
| | | | | | The constant is: 0
| | | | | Original schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | Splitting dimension 6 with split size 3
| | | | | Transformation map : { bx[t29 = 0, t30, t31, t32, t33, t34, t35, t36] -> bx[t29' = 0, t30' = t30, t31' = t31, t32' = t32, t33' = t33, t34' = t34, t26, t27 = 0, t28, t36' = t36] : (-t35 + t28) mod 3 = 0 and -2 + t35 <= 3t26 <= t35 and 0 <= t28 <= 2 }
| | | | | Schedule after splitting: { bx[t5, t6, t7] -> bx[t29 = 0, t30 = 0, t31 = t5, t32 = 0, t33 = t6, t34 = 0, t26, t27 = 0, t28, t36 = 0] : (-t7 + t28) mod 3 = 0 and 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 and -2 + t7 <= 3t26 <= t7 and 0 <= t28 <= 2 }
| | | | [src/tiramisu_core.cpp:5971 compute_maximal_AST_depth]
| | | | | [src/tiramisu_core.cpp:2775 name_unnamed_time_space_dimensions]
| | | | | [src/tiramisu_core.cpp:7568 gen_time_space_domain]
| | | | | | Iteration domain: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | | [src/tiramisu_core.cpp:5087 intersect_set_with_context]
| | | | | | Iteration domain Intersect context: { bx[i, j, c] : 0 <= i <= 97 and 0 <= j <= 197 and 0 <= c <= 2 }
| | | | | | Schedule: { bx[t5, t6, t7] -> bx[t29 = 0, t30 = 0, t31 = t5, t32 = 0, t33 = t6, t34 = 0, t26, t27 = 0, t28, t36 = 0] : (-t7 + t28) mod 3 = 0 and 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 and -2 + t7 <= 3t26 <= t7 and 0 <= t28 <= 2 }
| | | | | | Generated time-space domain: { bx[t29 = 0, t30 = 0, t31, t32 = 0, t33, t34 = 0, t26 = 0, t27 = 0, t28, t36 = 0] : 0 <= t31 <= 97 and 0 <= t33 <= 197 and 0 <= t28 <= 2 }
| | | | | Getting the maximal AST depth of the set { bx[t30 = 0, t31, t32 = 0, t33, t34 = 0, t26 = 0, t27 = 0, t28, t36 = 0] : 0 <= t31 <= 97 and 0 <= t33 <= 197 and 0 <= t28 <= 2 }
| | | | | Setting ISL AST generator options.
| | | | | Generating time-space domain.
| | | | | Setting the iterator names.
| | | | | [src/tiramisu_core.cpp:5808 compute_recursively_max_AST_depth]
| | | | | | Computing maximal AST depth from the following ISL AST node
| | | | | | {
| | | | | | for (int t31 = 0; t31 <= 97; t31 += 1)
| | | | | | for (int t33 = 0; t33 <= 197; t33 += 1)
| | | | | | for (int t28 = 0; t28 <= 2; t28 += 1)
| | | | | | bx(0, t31, 0, t33, 0, 0, 0, t28, 0);
| | | | | | }
| | | | | | Computing maximal depth from a for loop.
| | | | | | [src/tiramisu_core.cpp:5808 compute_recursively_max_AST_depth]
| | | | | | | Computing maximal AST depth from the following ISL AST node
| | | | | | | {
| | | | | | | for (int t33 = 0; t33 <= 197; t33 += 1)
| | | | | | | for (int t28 = 0; t28 <= 2; t28 += 1)
| | | | | | | bx(0, t31, 0, t33, 0, 0, 0, t28, 0);
| | | | | | | }
| | | | | | | Computing maximal depth from a for loop.
| | | | | | | [src/tiramisu_core.cpp:5808 compute_recursively_max_AST_depth]
| | | | | | | | Computing maximal AST depth from the following ISL AST node
| | | | | | | | {
| | | | | | | | for (int t28 = 0; t28 <= 2; t28 += 1)
| | | | | | | | bx(0, t31, 0, t33, 0, 0, 0, t28, 0);
| | | | | | | | }
| | | | | | | | Computing maximal depth from a for loop.
| | | | | | | | [src/tiramisu_core.cpp:5808 compute_recursively_max_AST_depth]
| | | | | | | | | Computing maximal AST depth from the following ISL AST node
| | | | | | | | | {
| | | | | | | | | bx(0, t31, 0, t33, 0, 0, 0, t28, 0);
| | | | | | | | | }
| | | | | | | | | Reached a user node.
| | | | | | | | | Current depth = 1
| | | | | | | | Current depth = 2
| | | | | | | Current depth = 3
| | | | | | Current depth = 4
| | | | | The maximal AST depth is : 4
| | | | Split did not happen.
| | | | Cancel splitting.
| | | | [src/tiramisu_function.cpp:1777 align_schedules]
| | | | | [src/tiramisu_function.cpp:1717 get_max_schedules_range_dim]
| | | | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | | | Input map: { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | | | | | After alignment, map = { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | | | | [src/tiramisu_core.cpp:2775 name_unnamed_time_space_dimensions]
| | | | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | | | Input map: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | | After alignment, map = { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, c = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | [src/tiramisu_core.cpp:2775 name_unnamed_time_space_dimensions]
| | | | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | | | Input map: { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | | | | | After alignment, map = { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | | | | [src/tiramisu_core.cpp:2775 name_unnamed_time_space_dimensions]
| | | | End of function
| | | [src/tiramisu_core.cpp:1187 update_names]
| | | | Original loop level names: i j c
| | | | New names: t12
| | | | Start erasing from: 2
| | | | Number of loop levels to erase: 1
| | | | Original loop level names after erasing loop levels: i j
| | | | Original loop level names after inserting the new loop levels: i j t12
| | | | [src/tiramisu_core.cpp:2631 set_loop_level_names]
| | | | | Number of loop levels: 3
| | | | | Number of names to be set: 3
| | | | | Setting the name of loop level 0 into i
| | | | | Setting the name of loop level 1 into j
| | | | | Setting the name of loop level 2 into t12
| | | | | The schedule after renaming: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, t12 = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | Names updated. New names are:
| | | | [src/tiramisu_core.cpp:7747 get_loop_level_names]
| | | | | Collecting names of loop levels from the range of the schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, t12 = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | Names of loop levels: i j t12
| | | [src/tiramisu_core.cpp:674 tag_unroll_level]
| | | [src/tiramisu_core.cpp:2682 set_loop_level_names]
| | | | Checking the validity of loop level 2
| | | | Setting the name of loop level 2 into t12
| | | | The schedule after renaming: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, t12 = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | [src/tiramisu_core.cpp:1187 update_names]
| | | | Original loop level names: i j c
| | | | New names: t13
| | | | Start erasing from: 2
| | | | Number of loop levels to erase: 1
| | | | Original loop level names after erasing loop levels: i j
| | | | Original loop level names after inserting the new loop levels: i j t13
| | | | [src/tiramisu_core.cpp:2631 set_loop_level_names]
| | | | | Number of loop levels: 3
| | | | | Number of names to be set: 3
| | | | | Setting the name of loop level 0 into i
| | | | | Setting the name of loop level 1 into j
| | | | | Setting the name of loop level 2 into t13
| | | | | The schedule after renaming: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, t13 = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | Names updated. New names are:
| | | | [src/tiramisu_core.cpp:7747 get_loop_level_names]
| | | | | Collecting names of loop levels from the range of the schedule: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, t13 = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | Names of loop levels: i j t13
| | | [src/tiramisu_function.cpp:1777 align_schedules]
| | | | [src/tiramisu_function.cpp:1717 get_max_schedules_range_dim]
| | | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | | Input map: { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | | | | After alignment, map = { input[t1, t2, t3] -> input[0, 0, i = t1, 0, j = t2, 0, c = t3, 0] : 0 <= t1 <= 99 and 0 <= t2 <= 199 and 0 <= t3 <= 2 }
| | | | [src/tiramisu_core.cpp:2775 name_unnamed_time_space_dimensions]
| | | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | | Input map: { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, t13 = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | | After alignment, map = { bx[t5, t6, t7] -> bx[0, 0, i = t5, 0, j = t6, 0, t13 = t7, 0] : 0 <= t5 <= 97 and 0 <= t6 <= 197 and 0 <= t7 <= 2 }
| | | | [src/tiramisu_core.cpp:2775 name_unnamed_time_space_dimensions]
| | | | [src/tiramisu_function.cpp:29 isl_map_align_range_dims]
| | | | | Input map: { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | | | | After alignment, map = { by[t9, t10, t11] -> by[0, 0, i = t9, 0, j = t10, 0, c = t11, 0] : 0 <= t9 <= 97 and 0 <= t10 <= 197 and 0 <= t11 <= 2 }
| | | | [src/tiramisu_core.cpp:2775 name_unnamed_time_space_dimensions]
| | | End of function
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment