Implement LANG_HOOKS_TYPE_FOR_SIZE for jit
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 18 Jan 2017 21:09:32 +0000 (21:09 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Wed, 18 Jan 2017 21:09:32 +0000 (21:09 +0000)
gcc/jit/ChangeLog:
* dummy-frontend.c (jit_langhook_type_for_size): Implement, using
lto's lto_type_for_size.

From-SVN: r244600

gcc/jit/ChangeLog
gcc/jit/dummy-frontend.c

index 03b42fdf4686f4fa66ecaf795473d94c591b7c9b..712382ca1274cad2c418cd8d35b668e2470bc279 100644 (file)
@@ -1,3 +1,8 @@
+2017-01-18  David Malcolm  <dmalcolm@redhat.com>
+
+       * dummy-frontend.c (jit_langhook_type_for_size): Implement, using
+       lto's lto_type_for_size.
+
 2017-01-01  Jakub Jelinek  <jakub@redhat.com>
 
        Update copyright years.
index 1ef47360113ab0fa3ebf7de4e4f4a590cc1aba95..4c7932bab88bdcd5e1edeb69791d366e47375fd9 100644 (file)
@@ -207,12 +207,53 @@ jit_langhook_type_for_mode (enum machine_mode mode, int unsignedp)
   return NULL;
 }
 
+/* Return an integer type with PRECISION bits of precision,
+   that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
+
 static tree
-jit_langhook_type_for_size (unsigned int bits ATTRIBUTE_UNUSED,
-                           int unsignedp ATTRIBUTE_UNUSED)
+jit_langhook_type_for_size (unsigned precision, int unsignedp)
 {
-  gcc_unreachable ();
-  return NULL;
+  int i;
+
+  if (precision == TYPE_PRECISION (integer_type_node))
+    return unsignedp ? unsigned_type_node : integer_type_node;
+
+  if (precision == TYPE_PRECISION (signed_char_type_node))
+    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
+
+  if (precision == TYPE_PRECISION (short_integer_type_node))
+    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
+
+  if (precision == TYPE_PRECISION (long_integer_type_node))
+    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
+
+  if (precision == TYPE_PRECISION (long_long_integer_type_node))
+    return unsignedp
+          ? long_long_unsigned_type_node
+          : long_long_integer_type_node;
+
+  for (i = 0; i < NUM_INT_N_ENTS; i ++)
+    if (int_n_enabled_p[i]
+       && precision == int_n_data[i].bitsize)
+      return (unsignedp ? int_n_trees[i].unsigned_type
+             : int_n_trees[i].signed_type);
+
+  if (precision <= TYPE_PRECISION (intQI_type_node))
+    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
+
+  if (precision <= TYPE_PRECISION (intHI_type_node))
+    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
+
+  if (precision <= TYPE_PRECISION (intSI_type_node))
+    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
+
+  if (precision <= TYPE_PRECISION (intDI_type_node))
+    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
+
+  if (precision <= TYPE_PRECISION (intTI_type_node))
+    return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
+
+  return NULL_TREE;
 }
 
 /* Record a builtin function.  We just ignore builtin functions.  */