re PR target/64003 (valgrind complains about get_attr_length_nobnd in insn-attrtab...
authorIlya Enkovich <ilya.enkovich@intel.com>
Fri, 5 Dec 2014 16:00:52 +0000 (16:00 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Fri, 5 Dec 2014 16:00:52 +0000 (16:00 +0000)
PR target/64003
* config/i386/i386.md (*jcc_1_bnd): New.
(*jcc_2_bnd): New.
(jump_bnd): New.
(*jcc_1): Remove bnd prefix.
(*jcc_2): Likewise.
(jump): Likewise.

From-SVN: r218426

gcc/ChangeLog
gcc/config/i386/i386.md

index a8f92da085298e2e32b06d434deebf33e8a8b121..2b81193af9443b0423f4d7a50a11b6407e0a70fa 100644 (file)
@@ -1,3 +1,13 @@
+2014-12-05  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       PR target/64003
+       * config/i386/i386.md (*jcc_1_bnd): New.
+       (*jcc_2_bnd): New.
+       (jump_bnd): New.
+       (*jcc_1): Remove bnd prefix.
+       (*jcc_2): Likewise.
+       (jump): Likewise.
+
 2014-12-05  Renlin Li  <renlin.li@arm.com>
 
        * config/aarch64/aarch64.c (aarch64_parse_cpu): Don't define
index 88435d6627b09af40cf52c457c0d590126a711e1..9019ed892a4d3937958075feb0768875103b77e8 100644 (file)
 ;; Basic conditional jump instructions.
 ;; We ignore the overflow flag for signed branch instructions.
 
+(define_insn "*jcc_1_bnd"
+  [(set (pc)
+       (if_then_else (match_operator 1 "ix86_comparison_operator"
+                                     [(reg FLAGS_REG) (const_int 0)])
+                     (label_ref (match_operand 0))
+                     (pc)))]
+  "TARGET_MPX && ix86_bnd_prefixed_insn_p (insn)"
+  "bnd %+j%C1\t%l0"
+  [(set_attr "type" "ibr")
+   (set_attr "modrm" "0")
+   (set (attr "length")
+          (if_then_else (and (ge (minus (match_dup 0) (pc))
+                                 (const_int -126))
+                             (lt (minus (match_dup 0) (pc))
+                                 (const_int 128)))
+            (const_int 3)
+            (const_int 7)))])
+
 (define_insn "*jcc_1"
   [(set (pc)
        (if_then_else (match_operator 1 "ix86_comparison_operator"
                      (label_ref (match_operand 0))
                      (pc)))]
   ""
-  "%!%+j%C1\t%l0"
+  "%+j%C1\t%l0"
   [(set_attr "type" "ibr")
    (set_attr "modrm" "0")
-   (set (attr "length_nobnd")
+   (set (attr "length")
           (if_then_else (and (ge (minus (match_dup 0) (pc))
                                  (const_int -126))
                              (lt (minus (match_dup 0) (pc))
             (const_int 2)
             (const_int 6)))])
 
+(define_insn "*jcc_2_bnd"
+  [(set (pc)
+       (if_then_else (match_operator 1 "ix86_comparison_operator"
+                                     [(reg FLAGS_REG) (const_int 0)])
+                     (pc)
+                     (label_ref (match_operand 0))))]
+  "TARGET_MPX && ix86_bnd_prefixed_insn_p (insn)"
+  "bnd %+j%c1\t%l0"
+  [(set_attr "type" "ibr")
+   (set_attr "modrm" "0")
+   (set (attr "length")
+          (if_then_else (and (ge (minus (match_dup 0) (pc))
+                                 (const_int -126))
+                             (lt (minus (match_dup 0) (pc))
+                                 (const_int 128)))
+            (const_int 3)
+            (const_int 7)))])
+
 (define_insn "*jcc_2"
   [(set (pc)
        (if_then_else (match_operator 1 "ix86_comparison_operator"
                      (pc)
                      (label_ref (match_operand 0))))]
   ""
-  "%!%+j%c1\t%l0"
+  "%+j%c1\t%l0"
   [(set_attr "type" "ibr")
    (set_attr "modrm" "0")
-   (set (attr "length_nobnd")
+   (set (attr "length")
           (if_then_else (and (ge (minus (match_dup 0) (pc))
                                  (const_int -126))
                              (lt (minus (match_dup 0) (pc))
 \f
 ;; Unconditional and other jump instructions
 
+(define_insn "jump_bnd"
+  [(set (pc)
+       (label_ref (match_operand 0)))]
+  "TARGET_MPX && ix86_bnd_prefixed_insn_p (insn)"
+  "bnd jmp\t%l0"
+  [(set_attr "type" "ibr")
+   (set (attr "length")
+          (if_then_else (and (ge (minus (match_dup 0) (pc))
+                                 (const_int -126))
+                             (lt (minus (match_dup 0) (pc))
+                                 (const_int 128)))
+            (const_int 3)
+            (const_int 6)))
+   (set_attr "modrm" "0")])
+
 (define_insn "jump"
   [(set (pc)
        (label_ref (match_operand 0)))]
   ""
-  "%!jmp\t%l0"
+  "jmp\t%l0"
   [(set_attr "type" "ibr")
-   (set (attr "length_nobnd")
+   (set (attr "length")
           (if_then_else (and (ge (minus (match_dup 0) (pc))
                                  (const_int -126))
                              (lt (minus (match_dup 0) (pc))