Simplify fold_internal_goacc_dim
authorTom de Vries <tom@codesourcery.com>
Wed, 20 Dec 2017 22:47:33 +0000 (22:47 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Wed, 20 Dec 2017 22:47:33 +0000 (22:47 +0000)
2017-12-20  Tom de Vries  <tom@codesourcery.com>

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

From-SVN: r255905

gcc/ChangeLog
gcc/gimple-fold.c

index 43c062e1eddfcb7b568e9b1700d16a43e70a4631..1045167668499dab0301d14c61bbf1c5236193aa 100644 (file)
@@ -1,3 +1,7 @@
+2017-12-20  Tom de Vries  <tom@codesourcery.com>
+
+       * gimple-fold.c (fold_internal_goacc_dim): Simplify.
+
 2017-12-20  Jakub Jelinek  <jakub@redhat.com>
 
        PR ipa/83506
index 7b3c6db919f85c4b582e6d376658c0b6d17479fe..33eae3e1ed11f1ee3036d53908fa5dd2d8e8a2a8 100644 (file)
@@ -3721,15 +3721,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;