re PR target/51287 (252.eon compfail with -march=atom)
authorEnkovich Ilya <ilya.enkovich@intel.com>
Fri, 25 Nov 2011 09:46:27 +0000 (09:46 +0000)
committerKirill Yukhin <kyukhin@gcc.gnu.org>
Fri, 25 Nov 2011 09:46:27 +0000 (09:46 +0000)
       PR target/51287
       * i386.c (distance_non_agu_define): Fix insn attr check.

From-SVN: r181713

gcc/ChangeLog
gcc/config/i386/i386.c

index f4cf7e1c5318b15e3c95b56f6bfbda70f01ac371..94360219f122e18472ba64061a57db96f7aeb24a 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-24  Enkovich Ilya  <ilya.enkovich@intel.com>
+
+       PR target/51287
+       * i386.c (distance_non_agu_define): Fix insn attr check.
+
 2011-11-24  Andrew MacLeod  <amacleod@redhat.com>
 
        * optab.c (maybe_emit_atomic_exchange): New.  Try to emit an
index 409accc163395774a1de66c7253a4c295dd76816..1b871be84802683703497773c61d8c8e79239366 100644 (file)
@@ -16273,7 +16273,6 @@ distance_non_agu_define_in_bb (unsigned int regno1, unsigned int regno2,
   basic_block bb = start ? BLOCK_FOR_INSN (start) : NULL;
   rtx prev = start;
   rtx next = NULL;
-  enum attr_type insn_type;
 
   *found = false;
 
@@ -16286,8 +16285,8 @@ distance_non_agu_define_in_bb (unsigned int regno1, unsigned int regno2,
          distance = increase_distance (prev, next, distance);
          if (insn_defines_reg (regno1, regno2, prev))
            {
-             insn_type = get_attr_type (prev);
-             if (insn_type != TYPE_LEA)
+             if (recog_memoized (prev) < 0
+                 || get_attr_type (prev) != TYPE_LEA)
                {
                  *found = true;
                  return distance;