aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/expr.cc')
-rw-r--r--gcc/expr.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/expr.cc b/gcc/expr.cc
index 4c892d6..efe387e 100644
--- a/gcc/expr.cc
+++ b/gcc/expr.cc
@@ -416,8 +416,15 @@ convert_mode_scalar (rtx to, rtx from, int unsignedp)
rtx tof = NULL_RTX;
if (fromi)
{
- rtx toi = gen_reg_rtx (toi_mode);
- convert_mode_scalar (toi, fromi, 1);
+ rtx toi;
+ if (GET_MODE (fromi) == VOIDmode)
+ toi = simplify_unary_operation (ZERO_EXTEND, toi_mode,
+ fromi, fromi_mode);
+ else
+ {
+ toi = gen_reg_rtx (toi_mode);
+ convert_mode_scalar (toi, fromi, 1);
+ }
toi
= maybe_expand_shift (LSHIFT_EXPR, toi_mode, toi,
GET_MODE_PRECISION (to_mode)