arm.md (enabled_for_depr_it): New attribute.
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Wed, 5 Jun 2013 17:02:31 +0000 (17:02 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Wed, 5 Jun 2013 17:02:31 +0000 (17:02 +0000)
2013-06-05  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

* config/arm/arm.md (enabled_for_depr_it): New attribute.
(predicable_short_it): Likewise.
(predicated): Likewise.
(enabled): Handle above.
(define_cond_exec): Set predicated attribute to yes.

From-SVN: r199705

gcc/ChangeLog
gcc/config/arm/arm.md

index bc7f98e5888e9f46da9cf7a0703b61ef4156e368..7932819966ff0dfcb8cbeccc15b0620004f364d5 100644 (file)
@@ -1,3 +1,11 @@
+2013-06-05  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/arm/arm.md (enabled_for_depr_it): New attribute.
+       (predicable_short_it): Likewise.
+       (predicated): Likewise.
+       (enabled): Handle above.
+       (define_cond_exec): Set predicated attribute to yes.
+
 2013-06-05  Mike Stump  <mikestump@comcast.net>
 
        * gdbinit.in (__FUNCTION__): Add.
index 466baa8454a8c6f8e56a9d6aaa9f0dce9d2c4591..5370efab8d7429bff5c56a92d636254cd89a9dc1 100644 (file)
 ; IS_THUMB1 is set to 'yes' iff we are generating Thumb-1 code.
 (define_attr "is_thumb1" "no,yes" (const (symbol_ref "thumb1_code")))
 
+; We use this attribute to disable alternatives that can produce 32-bit
+; instructions inside an IT-block in Thumb2 state.  ARMv8 deprecates IT blocks
+; that contain 32-bit instructions.
+(define_attr "enabled_for_depr_it" "no,yes" (const_string "yes"))
+
+; This attribute is used to disable a predicated alternative when we have
+; arm_restrict_it.
+(define_attr "predicable_short_it" "no,yes" (const_string "yes"))
+
 ;; Operand number of an input operand that is shifted.  Zero if the
 ;; given instruction does not shift one of its input operands.
 (define_attr "shift" "" (const_int 0))
 (define_attr "fpu" "none,vfp"
   (const (symbol_ref "arm_fpu_attr")))
 
+(define_attr "predicated" "yes,no" (const_string "no"))
+
 ; LENGTH of an instruction (in bytes)
 (define_attr "length" ""
   (const_int 4))
    (cond [(eq_attr "insn_enabled" "no")
          (const_string "no")
 
+         (and (eq_attr "predicable_short_it" "no")
+              (and (eq_attr "predicated" "yes")
+                   (match_test "arm_restrict_it")))
+         (const_string "no")
+
+         (and (eq_attr "enabled_for_depr_it" "no")
+              (match_test "arm_restrict_it"))
+         (const_string "no")
+
          (eq_attr "arch_enabled" "no")
          (const_string "no")
 
      (const_int 0)])]
   "TARGET_32BIT"
   ""
+[(set_attr "predicated" "yes")]
 )
 
 (define_insn "force_register_use"