On 2020-01-01 4:11 p.m., John David Anglin wrote:
> This fixes PR target/93111.  The ICE
> 
> The comparison_operator predicate is too broad and includes a couple of 
> comparisons
> that aren't valid for integer comparisons on hppa.  We need to use the 
> ordered_comparison_operator
> predicate.
> 
> Similarly, the cmpib_comparison_operator predicate misses a couple of 
> comparisons that are valid
> for the cmpib patterns.  Again we can use the ordered_comparison_operator 
> predicate.
> 
> Tested on hppa-unknown-linux-gnu.  Committed to active branches.
Unfortunately, the cmpib_comparison_operator changes broke 64-bit gcc and linux 
builds.  I missed
that the patterns using the cmpib_comparison_operator only apply to double word 
comparisons.

The following change reverts this portion of the previous change.  Tested on 
hppa64-hp-hpux11.11
and linux-unknown-linux-gnu.  Committed to active branches.

Dave

2020-01-06  John David Anglin  <dang...@gcc.gnu.org>

        * config/pa/pa.md: Revert change to use ordered_comparison_operator
        instead of cmpib_comparison_operator in cmpib patterns.
        * config/pa/predicates.md (cmpib_comparison_operator): Revert removal
        of cmpib_comparison_operator.  Revise comment.

Index: config/pa/pa.md
===================================================================
--- config/pa/pa.md     (revision 279888)
+++ config/pa/pa.md     (working copy)
@@ -1524,7 +1524,7 @@
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (match_operator 3 "ordered_comparison_operator"
+        (match_operator 3 "cmpib_comparison_operator"
                         [(match_operand:DI 1 "reg_or_0_operand" "rM")
                          (match_operand:DI 2 "arith5_operand" "rL")])
         (label_ref (match_operand 0 "" ""))
@@ -1553,7 +1553,7 @@
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (match_operator 3 "ordered_comparison_operator"
+        (match_operator 3 "cmpib_comparison_operator"
                         [(match_operand:DI 1 "reg_or_0_operand" "rM")
                          (match_operand:DI 2 "arith5_operand" "rL")])
         (pc)
Index: config/pa/predicates.md
===================================================================
--- config/pa/predicates.md     (revision 279888)
+++ config/pa/predicates.md     (working copy)
@@ -662,6 +662,12 @@
   (and (match_code "symbol_ref")
        (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_EXEC")))

+;; True iff OP is an operator suitable for use in a double-word cmpib
+;; instruction.
+
+(define_predicate "cmpib_comparison_operator"
+  (match_code "eq,ne,lt,le,leu,gt,gtu,ge"))
+
 ;; True iff OP is an operator suitable for use in a movb instruction.

 (define_predicate "movb_comparison_operator"

Reply via email to