VAX: Use a mode iterator to produce individual interlocked branches
authorMaciej W. Rozycki <macro@linux-mips.org>
Sat, 5 Dec 2020 18:26:25 +0000 (18:26 +0000)
committerMaciej W. Rozycki <macro@linux-mips.org>
Sat, 5 Dec 2020 18:26:25 +0000 (18:26 +0000)
Regardless of the machine mode all the interlocked branches of the same
kind, one of the two provided by the ISA, use the same RTL patterns and
machine instructions, except for the memory operand's constraint.

Remove code duplication then and make use of a mode iterator combined
with an attribute to expand the same insn patterns with the constraint
suitably substituted from a single template.  No functional change.

gcc/
* config/vax/builtins.md (bb_mem): New mode attribute.
(jbbssiqi, jbbssihi, jbbssisi): Fold insns into...
(jbbssi<mode>): ... this.
(jbbcciqi, jbbccihi, jbbccisi): Likewise...
(jbbcci<mode>): ... this.

gcc/config/vax/builtins.md

index 6bce7a85add02aaaea95a9201cdce08f24c4c97c..473b44f489f3da3eb6d6c472bd083f9798410d55 100644 (file)
@@ -24,6 +24,8 @@
   ]
 )
 
+(define_mode_attr bb_mem [(QI "m") (HI "Q") (SI "Q")])
+
 (define_expand "ffssi2"
   [(set (match_operand:SI 0 "nonimmediate_operand" "")
        (ffs:SI (match_operand:SI 1 "general_operand" "")))]
   DONE;
 }")
 
-(define_insn "jbbssiqi"
-  [(parallel
-    [(set (pc)
-         (if_then_else
-           (ne (zero_extract:SI (match_operand:QI 0 "memory_operand" "g")
-                                (const_int 1)
-                                (match_operand:SI 1 "general_operand" "nrm"))
-               (const_int 0))
-           (label_ref (match_operand 2 "" ""))
-           (pc)))
-     (set (zero_extract:SI (match_operand:QI 3 "memory_operand" "+0")
-                          (const_int 1)
-                          (match_dup 1))
-         (const_int 1))])]
-  ""
-  "jbssi %1,%0,%l2")
-
-(define_insn "jbbssihi"
+(define_insn "jbbssi<mode>"
   [(parallel
     [(set (pc)
          (if_then_else
-           (ne (zero_extract:SI (match_operand:HI 0 "memory_operand" "Q")
-                                (const_int 1)
-                                (match_operand:SI 1 "general_operand" "nrm"))
-               (const_int 0))
-           (label_ref (match_operand 2 "" ""))
-           (pc)))
-     (set (zero_extract:SI (match_operand:HI 3 "memory_operand" "+0")
-                          (const_int 1)
-                          (match_dup 1))
-         (const_int 1))])]
-  ""
-  "jbssi %1,%0,%l2")
-
-(define_insn "jbbssisi"
-  [(parallel
-    [(set (pc)
-         (if_then_else
-           (ne (zero_extract:SI (match_operand:SI 0 "memory_operand" "Q")
-                                (const_int 1)
-                                (match_operand:SI 1 "general_operand" "nrm"))
-               (const_int 0))
+           (eq (zero_extract:SI
+                 (match_operand:VAXint 0 "memory_operand" "<bb_mem>")
+                 (const_int 1)
+                 (match_operand:SI 1 "general_operand" "nrmT"))
+               (const_int 1))
            (label_ref (match_operand 2 "" ""))
            (pc)))
-     (set (zero_extract:SI (match_operand:SI 3 "memory_operand" "+0")
+     (set (zero_extract:SI (match_operand:VAXint 3 "memory_operand" "+0")
                           (const_int 1)
                           (match_dup 1))
          (const_int 1))])]
   ""
   "jbssi %1,%0,%l2")
 
-
 (define_expand "sync_lock_release<mode>"
   [(set (match_operand:VAXint 0 "memory_operand" "+m")
        (unspec:VAXint [(match_operand:VAXint 1 "const_int_operand" "n")
   DONE;
 }")
 
-(define_insn "jbbcciqi"
-  [(parallel
-    [(set (pc)
-         (if_then_else
-           (eq (zero_extract:SI (match_operand:QI 0 "memory_operand" "g")
-                                (const_int 1)
-                                (match_operand:SI 1 "general_operand" "nrm"))
-               (const_int 0))
-           (label_ref (match_operand 2 "" ""))
-           (pc)))
-     (set (zero_extract:SI (match_operand:QI 3 "memory_operand" "+0")
-                          (const_int 1)
-                          (match_dup 1))
-         (const_int 0))])]
-  ""
-  "jbcci %1,%0,%l2")
-
-(define_insn "jbbccihi"
+(define_insn "jbbcci<mode>"
   [(parallel
     [(set (pc)
          (if_then_else
-           (eq (zero_extract:SI (match_operand:HI 0 "memory_operand" "Q")
-                                (const_int 1)
-                                (match_operand:SI 1 "general_operand" "nrm"))
+           (eq (zero_extract:SI
+                 (match_operand:VAXint 0 "memory_operand" "<bb_mem>")
+                 (const_int 1)
+                 (match_operand:SI 1 "general_operand" "nrmT"))
                (const_int 0))
            (label_ref (match_operand 2 "" ""))
            (pc)))
-     (set (zero_extract:SI (match_operand:HI 3 "memory_operand" "+0")
+     (set (zero_extract:SI (match_operand:VAXint 3 "memory_operand" "+0")
                           (const_int 1)
                           (match_dup 1))
          (const_int 0))])]
   ""
   "jbcci %1,%0,%l2")
-
-(define_insn "jbbccisi"
-  [(parallel
-    [(set (pc)
-         (if_then_else
-           (eq (zero_extract:SI (match_operand:SI 0 "memory_operand" "Q")
-                                (const_int 1)
-                                (match_operand:SI 1 "general_operand" "nrm"))
-               (const_int 0))
-           (label_ref (match_operand 2 "" ""))
-           (pc)))
-     (set (zero_extract:SI (match_operand:SI 3 "memory_operand" "+0")
-                          (const_int 1)
-                          (match_dup 1))
-         (const_int 0))])]
-  ""
-  "jbcci %1,%0,%l2")
-