aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2013-09-12 13:06:38 -0400
committerDJ Delorie <dj@gcc.gnu.org>2013-09-12 13:06:38 -0400
commit8369f38a6f3f797952452dc25cd148909e049ee6 (patch)
tree51fd6fe31983c5c9dd226dd15ecbc2b15e406a2e
parent511daaf5267c535201c6d9e6aabb442bbe12f0f8 (diff)
downloadgcc-8369f38a6f3f797952452dc25cd148909e049ee6.zip
gcc-8369f38a6f3f797952452dc25cd148909e049ee6.tar.gz
gcc-8369f38a6f3f797952452dc25cd148909e049ee6.tar.bz2
cfgexpand.c (expand_debug_expr): Avoid sign-extending SImode to PSImode.
* cfgexpand.c (expand_debug_expr): Avoid sign-extending SImode to PSImode. From-SVN: r202534
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cfgexpand.c7
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0acde62..de4bb3d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2013-09-12 DJ Delorie <dj@redhat.com>
+
+ * cfgexpand.c (expand_debug_expr): Avoid sign-extending SImode to
+ PSImode.
+
2013-09-12 Martin Jambor <mjambor@suse.cz>
PR ipa/58389
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 4f10361..88e48c2 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -3154,7 +3154,12 @@ expand_debug_expr (tree exp)
&& GET_MODE (op0) != VOIDmode && GET_MODE (op1) != VOIDmode
&& GET_MODE (op0) != GET_MODE (op1))
{
- if (GET_MODE_BITSIZE (GET_MODE (op0)) < GET_MODE_BITSIZE (GET_MODE (op1)))
+ if (GET_MODE_BITSIZE (GET_MODE (op0)) < GET_MODE_BITSIZE (GET_MODE (op1))
+ /* If OP0 is a partial mode, then we must truncate, even if it has
+ the same bitsize as OP1 as GCC's representation of partial modes
+ is opaque. */
+ || (GET_MODE_CLASS (GET_MODE (op0)) == MODE_PARTIAL_INT
+ && GET_MODE_BITSIZE (GET_MODE (op0)) == GET_MODE_BITSIZE (GET_MODE (op1))))
op1 = simplify_gen_unary (TRUNCATE, GET_MODE (op0), op1,
GET_MODE (op1));
else