aboutsummaryrefslogtreecommitdiff
path: root/gcc/explow.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/explow.cc')
-rw-r--r--gcc/explow.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/explow.cc b/gcc/explow.cc
index 7799a98..8f8ca7f 100644
--- a/gcc/explow.cc
+++ b/gcc/explow.cc
@@ -854,6 +854,18 @@ promote_function_mode (const_tree type, machine_mode mode, int *punsignedp,
switch (TREE_CODE (type))
{
+ case BITINT_TYPE:
+ if (TYPE_MODE (type) == BLKmode)
+ return mode;
+
+ struct bitint_info info;
+ bool ok;
+ ok = targetm.c.bitint_type_info (TYPE_PRECISION (type), &info);
+ gcc_assert (ok);
+
+ if (!info.extended)
+ return mode;
+ /* FALLTHRU */
case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
case REAL_TYPE: case OFFSET_TYPE: case FIXED_POINT_TYPE:
case POINTER_TYPE: case REFERENCE_TYPE:
@@ -893,6 +905,18 @@ promote_mode (const_tree type ATTRIBUTE_UNUSED, machine_mode mode,
switch (code)
{
+ case BITINT_TYPE:
+ if (TYPE_MODE (type) == BLKmode)
+ return mode;
+
+ struct bitint_info info;
+ bool ok;
+ ok = targetm.c.bitint_type_info (TYPE_PRECISION (type), &info);
+ gcc_assert (ok);
+
+ if (!info.extended)
+ return mode;
+ /* FALLTHRU */
case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
case REAL_TYPE: case OFFSET_TYPE: case FIXED_POINT_TYPE:
/* Values of these types always have scalar mode. */