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"