Fix modes used in LOAD_EXTEND_OP conversion.
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 10 Nov 2013 12:57:36 +0000 (12:57 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 10 Nov 2013 12:57:36 +0000 (12:57 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/wide-int@204638 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/postreload.c

index b9d9717..7803b33 100644 (file)
@@ -303,21 +303,19 @@ reload_cse_simplify_set (rtx set, rtx insn)
              switch (extend_op)
                {
                case ZERO_EXTEND:
-                 result = wide_int (std::make_pair (this_rtx, GET_MODE (src)));
-                 if (GET_MODE_PRECISION (GET_MODE (src))
-                     > GET_MODE_PRECISION (word_mode))
-                   result = wi::zext (result, GET_MODE_PRECISION (word_mode));
+                 result = wide_int::from (std::make_pair (this_rtx,
+                                                          GET_MODE (src)),
+                                          BITS_PER_WORD, UNSIGNED);
                  break;
                case SIGN_EXTEND:
-                 result = wide_int (std::make_pair (this_rtx, GET_MODE (src)));
-                 if (GET_MODE_PRECISION (GET_MODE (src))
-                     > GET_MODE_PRECISION (word_mode))
-                   result = wi::sext (result, GET_MODE_PRECISION (word_mode));
+                 result = wide_int::from (std::make_pair (this_rtx,
+                                                          GET_MODE (src)),
+                                          BITS_PER_WORD, SIGNED);
                  break;
                default:
                  gcc_unreachable ();
                }
-             this_rtx = immed_wide_int_const (result, GET_MODE (src));
+             this_rtx = immed_wide_int_const (result, word_mode);
            }
 #endif
          this_cost = set_src_cost (this_rtx, speed);