Should not sink instructions which may cause trap
authorjiwang <jiwang@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Sep 2014 08:44:14 +0000 (08:44 +0000)
committerjiwang <jiwang@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Sep 2014 08:44:14 +0000 (08:44 +0000)
2014-09-30  Jiong Wang  <jiong.wang@arm.com>

  gcc/
    * shrink-wrap.c (move_insn_for_shrink_wrap): Check "can_throw_internal"
    before sinking insn.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@215709 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/shrink-wrap.c

index d224b0f..9e78a93 100644 (file)
@@ -1,3 +1,8 @@
+2014-09-30  Jiong Wang  <jiong.wang@arm.com>
+
+       * shrink-wrap.c (move_insn_for_shrink_wrap): Check "can_throw_internal"
+       before sinking insn.
+
 2014-09-30  David Sherwood  <david.sherwood@arm.com>
 
        * ira-int.h (ira_allocno): Add "wmode" field.
index bd4813c..b1ff8a2 100644 (file)
@@ -189,6 +189,9 @@ move_insn_for_shrink_wrap (basic_block bb, rtx_insn *insn,
       unsigned int nonconstobj_num = 0;
       rtx src_inner = NULL_RTX;
 
+      if (can_throw_internal (insn))
+       return false;
+
       subrtx_var_iterator::array_type array;
       FOR_EACH_SUBRTX_VAR (iter, array, src, ALL)
        {