Mercurial > hg > CbC > CbC_gcc
diff gcc/config/ia64/predicates.md @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | f6334be47118 |
children | 84e7813d76e9 |
line wrap: on
line diff
--- a/gcc/config/ia64/predicates.md Sun Aug 21 07:07:55 2011 +0900 +++ b/gcc/config/ia64/predicates.md Fri Oct 27 22:46:09 2017 +0900 @@ -1,5 +1,5 @@ ;; Predicate definitions for IA-64. -;; Copyright (C) 2004, 2005, 2007, 2010 Free Software Foundation, Inc. +;; Copyright (C) 2004-2017 Free Software Foundation, Inc. ;; ;; This file is part of GCC. ;; @@ -69,12 +69,17 @@ of constants here. */ t = SYMBOL_REF_DECL (op); if (DECL_P (t)) - t = DECL_SIZE_UNIT (t); + { + /* Common symbol isn't placed in small data section. */ + if (DECL_COMMON (t)) + return false; + t = DECL_SIZE_UNIT (t); + } else t = TYPE_SIZE_UNIT (TREE_TYPE (t)); - if (t && host_integerp (t, 0)) + if (t && tree_fits_shwi_p (t)) { - size = tree_low_cst (t, 0); + size = tree_to_shwi (t); if (size < 0) size = 0; } @@ -92,6 +97,32 @@ } }) +;; True if OP refers to a local symbol [+any offset]. +;; To be encoded as: +;; movl % = @gprel(symbol+offset) +;; add % = %, gp +(define_predicate "local_symbolic_operand64" + (match_code "symbol_ref,const") +{ + switch (GET_CODE (op)) + { + case CONST: + op = XEXP (op, 0); + if (GET_CODE (op) != PLUS + || GET_CODE (XEXP (op, 0)) != SYMBOL_REF + || GET_CODE (XEXP (op, 1)) != CONST_INT) + return false; + op = XEXP (op, 0); + /* FALLTHRU */ + + case SYMBOL_REF: + return SYMBOL_REF_LOCAL_P (op); + + default: + gcc_unreachable (); + } +}) + ;; True if OP refers to a symbol in the small address area. (define_predicate "small_addr_symbolic_operand" (match_code "symbol_ref,const") @@ -568,9 +599,15 @@ (match_test "op == CONST0_RTX (GET_MODE (op))")))) ;; Return 1 if OP is a valid comparison operator for "cbranch" instructions. +;; If we're assuming that FP operations cannot generate user-visible traps, +;; then we can use the FP unordered-signaling instructions to implement the +;; FP unordered-quiet comparison predicates. (define_predicate "ia64_cbranch_operator" - (ior (match_operand 0 "ordered_comparison_operator") - (match_code "ordered,unordered"))) + (if_then_else (match_test "flag_trapping_math") + (ior (match_operand 0 "ordered_comparison_operator") + (match_code "ordered,unordered")) + (and (match_operand 0 "comparison_operator") + (not (match_code "uneq,ltgt"))))) ;; True if this is a comparison operator, which accepts a normal 8-bit ;; signed immediate operand.