Hi,

this patch simplifies fold_internal_goacc_dim.

Bootstrapped and reg-tested on x86_64.

Committed as trivial.

Thanks,
- Tom
Simplify fold_internal_goacc_dim

2017-12-20  Tom de Vries  <t...@codesourcery.com>

	* gimple-fold.c (fold_internal_goacc_dim): Simplify.

---
 gcc/gimple-fold.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 87ce3d8..fafd833 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -3728,15 +3728,23 @@ fold_internal_goacc_dim (const gimple *call)
 {
   int axis = oacc_get_ifn_dim_arg (call);
   int size = oacc_get_fn_dim_size (current_function_decl, axis);
-  bool is_pos = gimple_call_internal_fn (call) == IFN_GOACC_DIM_POS;
   tree result = NULL_TREE;
+  tree type = TREE_TYPE (gimple_call_lhs (call));
 
-  /* If the size is 1, or we only want the size and it is not dynamic,
-     we know the answer.  */
-  if (size == 1 || (!is_pos && size))
+  switch (gimple_call_internal_fn (call))
     {
-      tree type = TREE_TYPE (gimple_call_lhs (call));
-      result = build_int_cst (type, size - is_pos);
+    case IFN_GOACC_DIM_POS:
+      /* If the size is 1, we know the answer.  */
+      if (size == 1)
+	result = build_int_cst (type, 0);
+      break;
+    case IFN_GOACC_DIM_SIZE:
+      /* If the size is not dynamic, we know the answer.  */
+      if (size)
+	result = build_int_cst (type, size);
+      break;
+    default:
+      break;
     }
 
   return result;

Reply via email to