aboutsummaryrefslogtreecommitdiff
path: root/gcc/regcprop.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/regcprop.cc')
-rw-r--r--gcc/regcprop.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/regcprop.cc b/gcc/regcprop.cc
index 4fa1305..98ab3f7 100644
--- a/gcc/regcprop.cc
+++ b/gcc/regcprop.cc
@@ -332,6 +332,10 @@ copy_value (rtx dest, rtx src, struct value_data *vd)
if (vd->e[sr].mode == VOIDmode)
set_value_regno (sr, vd->e[dr].mode, vd);
+ else if (!ordered_p (GET_MODE_PRECISION (vd->e[sr].mode),
+ GET_MODE_PRECISION (GET_MODE (src))))
+ return;
+
/* If we are narrowing the input to a smaller number of hard regs,
and it is in big endian, we are really extracting a high part.
Since we generally associate a low part of a value with the value itself,