Commit f986735a by Pekka Jääskeläinen Committed by Pekka Jääskeläinen

[BRIGFE] The modulo in ID computation should not be needed.

The case where a dim is greater than the grid size doesn't seem
to be mentioned in the specs nor tested by PRM test suite.

From-SVN: r259944
parent 637f3cde
2018-05-04 Pekka Jääskeläinen <pekka.jaaskelainen@parmance.com> 2018-05-04 Pekka Jääskeläinen <pekka.jaaskelainen@parmance.com>
* brig/brigfrontend/brig-code-entry-handler.cc: The modulo in
ID computation should not be needed.
2018-05-04 Pekka Jääskeläinen <pekka.jaaskelainen@parmance.com>
* brig/brig-lang.c: Add support for whole program * brig/brig-lang.c: Add support for whole program
optimizations by marking the kernels externally visible. optimizations by marking the kernels externally visible.
* brig/brigfrontend/brig-branch-inst-handler.cc: See above. * brig/brigfrontend/brig-branch-inst-handler.cc: See above.
......
...@@ -1048,7 +1048,6 @@ brig_code_entry_handler::expand_builtin (BrigOpcode16_t brig_opcode, ...@@ -1048,7 +1048,6 @@ brig_code_entry_handler::expand_builtin (BrigOpcode16_t brig_opcode,
tree local_id_var = m_parent.m_cf->m_local_id_vars[dim]; tree local_id_var = m_parent.m_cf->m_local_id_vars[dim];
tree wg_id_var = m_parent.m_cf->m_wg_id_vars[dim]; tree wg_id_var = m_parent.m_cf->m_wg_id_vars[dim];
tree wg_size_var = m_parent.m_cf->m_wg_size_vars[dim]; tree wg_size_var = m_parent.m_cf->m_wg_size_vars[dim];
tree grid_size_var = m_parent.m_cf->m_grid_size_vars[dim];
tree wg_id_x_wg_size = build2 (MULT_EXPR, uint32_type_node, tree wg_id_x_wg_size = build2 (MULT_EXPR, uint32_type_node,
convert (uint32_type_node, wg_id_var), convert (uint32_type_node, wg_id_var),
...@@ -1056,15 +1055,8 @@ brig_code_entry_handler::expand_builtin (BrigOpcode16_t brig_opcode, ...@@ -1056,15 +1055,8 @@ brig_code_entry_handler::expand_builtin (BrigOpcode16_t brig_opcode,
tree sum tree sum
= build2 (PLUS_EXPR, uint32_type_node, wg_id_x_wg_size, local_id_var); = build2 (PLUS_EXPR, uint32_type_node, wg_id_x_wg_size, local_id_var);
/* We need a modulo here because of work-groups which have dimensions
larger than the grid size :( TO CHECK: is this really allowed in the
specs? */
tree modulo
= build2 (TRUNC_MOD_EXPR, uint32_type_node, sum, grid_size_var);
return add_temp_var (std::string ("workitemabsid_") return add_temp_var (std::string ("workitemabsid_")
+ (char) ((int) 'x' + dim), + (char) ((int) 'x' + dim), sum);
modulo);
} }
else if (brig_opcode == BRIG_OPCODE_WORKITEMFLATID) else if (brig_opcode == BRIG_OPCODE_WORKITEMFLATID)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment