1 /* { dg-do compile } */
2 /* { dg-options "-O2 -w" } */
3 typedef union tree_node
*tree
;
4 typedef union gimple_statement_d
*gimple
;
6 { VOIDmode
, BLKmode
, CCmode
, CCGCmode
, CCGOCmode
, CCNOmode
, CCAmode
, CCCmode
,
7 CCOmode
, CCSmode
, CCZmode
, CCFPmode
, CCFPUmode
, BImode
, QImode
, HImode
,
8 SImode
, DImode
, TImode
, OImode
, QQmode
, HQmode
, SQmode
, DQmode
, TQmode
,
9 UQQmode
, UHQmode
, USQmode
, UDQmode
, UTQmode
, HAmode
, SAmode
, DAmode
,
10 TAmode
, UHAmode
, USAmode
, UDAmode
, UTAmode
, SFmode
, DFmode
, XFmode
,
11 TFmode
, SDmode
, DDmode
, TDmode
, CQImode
, CHImode
, CSImode
, CDImode
,
12 CTImode
, COImode
, SCmode
, DCmode
, XCmode
, TCmode
, V2QImode
, V4QImode
,
13 V2HImode
, V1SImode
, V8QImode
, V4HImode
, V2SImode
, V1DImode
, V16QImode
,
14 V8HImode
, V4SImode
, V2DImode
, V1TImode
, V32QImode
, V16HImode
, V8SImode
,
15 V4DImode
, V2TImode
, V64QImode
, V32HImode
, V16SImode
, V8DImode
, V4TImode
,
16 V2SFmode
, V4SFmode
, V2DFmode
, V8SFmode
, V4DFmode
, V2TFmode
, V16SFmode
,
17 V8DFmode
, V4TFmode
, MAX_MACHINE_MODE
, MIN_MODE_RANDOM
=
18 VOIDmode
, MAX_MODE_RANDOM
= BLKmode
, MIN_MODE_CC
= CCmode
, MAX_MODE_CC
=
19 CCFPUmode
, MIN_MODE_INT
= QImode
, MAX_MODE_INT
=
20 OImode
, MIN_MODE_PARTIAL_INT
= VOIDmode
, MAX_MODE_PARTIAL_INT
=
21 VOIDmode
, MIN_MODE_FRACT
= QQmode
, MAX_MODE_FRACT
=
22 TQmode
, MIN_MODE_UFRACT
= UQQmode
, MAX_MODE_UFRACT
=
23 UTQmode
, MIN_MODE_ACCUM
= HAmode
, MAX_MODE_ACCUM
=
24 TAmode
, MIN_MODE_UACCUM
= UHAmode
, MAX_MODE_UACCUM
=
25 UTAmode
, MIN_MODE_FLOAT
= SFmode
, MAX_MODE_FLOAT
=
26 TFmode
, MIN_MODE_DECIMAL_FLOAT
= SDmode
, MAX_MODE_DECIMAL_FLOAT
=
27 TDmode
, MIN_MODE_COMPLEX_INT
= CQImode
, MAX_MODE_COMPLEX_INT
=
28 COImode
, MIN_MODE_COMPLEX_FLOAT
= SCmode
, MAX_MODE_COMPLEX_FLOAT
=
29 TCmode
, MIN_MODE_VECTOR_INT
= V2QImode
, MAX_MODE_VECTOR_INT
=
30 V4TImode
, MIN_MODE_VECTOR_FRACT
= VOIDmode
, MAX_MODE_VECTOR_FRACT
=
31 VOIDmode
, MIN_MODE_VECTOR_UFRACT
= VOIDmode
, MAX_MODE_VECTOR_UFRACT
=
32 VOIDmode
, MIN_MODE_VECTOR_ACCUM
= VOIDmode
, MAX_MODE_VECTOR_ACCUM
=
33 VOIDmode
, MIN_MODE_VECTOR_UACCUM
= VOIDmode
, MAX_MODE_VECTOR_UACCUM
=
34 VOIDmode
, MIN_MODE_VECTOR_FLOAT
= V2SFmode
, MAX_MODE_VECTOR_FLOAT
=
35 V4TFmode
, NUM_MACHINE_MODES
= MAX_MACHINE_MODE
};
37 { MODE_RANDOM
, MODE_CC
, MODE_INT
, MODE_PARTIAL_INT
, MODE_FRACT
, MODE_UFRACT
,
38 MODE_ACCUM
, MODE_UACCUM
, MODE_FLOAT
, MODE_DECIMAL_FLOAT
, MODE_COMPLEX_INT
,
39 MODE_COMPLEX_FLOAT
, MODE_VECTOR_INT
, MODE_VECTOR_FRACT
,
40 MODE_VECTOR_UFRACT
, MODE_VECTOR_ACCUM
, MODE_VECTOR_UACCUM
,
41 MODE_VECTOR_FLOAT
, MAX_MODE_CLASS
};
42 extern const unsigned char mode_class
[NUM_MACHINE_MODES
];
43 extern const unsigned char mode_inner
[NUM_MACHINE_MODES
];
46 unsigned char has_nans
;
48 extern const struct real_format
*real_format_for_mode
[MAX_MODE_FLOAT
-
50 MAX_MODE_DECIMAL_FLOAT
-
51 MIN_MODE_DECIMAL_FLOAT
+
54 { ERROR_MARK
, IDENTIFIER_NODE
, TREE_LIST
, TREE_VEC
, BLOCK
, OFFSET_TYPE
,
55 ENUMERAL_TYPE
, BOOLEAN_TYPE
, INTEGER_TYPE
, REAL_TYPE
, POINTER_TYPE
,
56 REFERENCE_TYPE
, NULLPTR_TYPE
, FIXED_POINT_TYPE
, COMPLEX_TYPE
, VECTOR_TYPE
,
57 ARRAY_TYPE
, RECORD_TYPE
, UNION_TYPE
, QUAL_UNION_TYPE
, VOID_TYPE
,
58 FUNCTION_TYPE
, METHOD_TYPE
, LANG_TYPE
, INTEGER_CST
, REAL_CST
, FIXED_CST
,
59 COMPLEX_CST
, VECTOR_CST
, STRING_CST
, FUNCTION_DECL
, LABEL_DECL
,
60 FIELD_DECL
, VAR_DECL
, CONST_DECL
, PARM_DECL
, TYPE_DECL
, RESULT_DECL
,
61 DEBUG_EXPR_DECL
, NAMESPACE_DECL
, IMPORTED_DECL
, TRANSLATION_UNIT_DECL
,
62 COMPONENT_REF
, BIT_FIELD_REF
, REALPART_EXPR
, IMAGPART_EXPR
, ARRAY_REF
,
63 ARRAY_RANGE_REF
, INDIRECT_REF
, OBJ_TYPE_REF
, CONSTRUCTOR
, COMPOUND_EXPR
,
64 MODIFY_EXPR
, INIT_EXPR
, TARGET_EXPR
, COND_EXPR
, VEC_COND_EXPR
, BIND_EXPR
,
65 CALL_EXPR
, WITH_CLEANUP_EXPR
, CLEANUP_POINT_EXPR
, PLACEHOLDER_EXPR
,
66 PLUS_EXPR
, MINUS_EXPR
, MULT_EXPR
, POINTER_PLUS_EXPR
, TRUNC_DIV_EXPR
,
67 CEIL_DIV_EXPR
, FLOOR_DIV_EXPR
, ROUND_DIV_EXPR
, TRUNC_MOD_EXPR
,
68 CEIL_MOD_EXPR
, FLOOR_MOD_EXPR
, ROUND_MOD_EXPR
, RDIV_EXPR
, EXACT_DIV_EXPR
,
69 FIX_TRUNC_EXPR
, FLOAT_EXPR
, NEGATE_EXPR
, MIN_EXPR
, MAX_EXPR
, ABS_EXPR
,
70 LSHIFT_EXPR
, RSHIFT_EXPR
, LROTATE_EXPR
, RROTATE_EXPR
, BIT_IOR_EXPR
,
71 BIT_XOR_EXPR
, BIT_AND_EXPR
, BIT_NOT_EXPR
, TRUTH_ANDIF_EXPR
,
72 TRUTH_ORIF_EXPR
, TRUTH_AND_EXPR
, TRUTH_OR_EXPR
, TRUTH_XOR_EXPR
,
73 TRUTH_NOT_EXPR
, LT_EXPR
, LE_EXPR
, GT_EXPR
, GE_EXPR
, EQ_EXPR
, NE_EXPR
,
74 UNORDERED_EXPR
, ORDERED_EXPR
, UNLT_EXPR
, UNLE_EXPR
, UNGT_EXPR
, UNGE_EXPR
,
75 UNEQ_EXPR
, LTGT_EXPR
, RANGE_EXPR
, PAREN_EXPR
, CONVERT_EXPR
,
76 ADDR_SPACE_CONVERT_EXPR
, FIXED_CONVERT_EXPR
, NOP_EXPR
, NON_LVALUE_EXPR
,
77 VIEW_CONVERT_EXPR
, COMPOUND_LITERAL_EXPR
, SAVE_EXPR
, ADDR_EXPR
,
78 FDESC_EXPR
, COMPLEX_EXPR
, CONJ_EXPR
, PREDECREMENT_EXPR
, PREINCREMENT_EXPR
,
79 POSTDECREMENT_EXPR
, POSTINCREMENT_EXPR
, VA_ARG_EXPR
, TRY_CATCH_EXPR
,
80 TRY_FINALLY_EXPR
, DECL_EXPR
, LABEL_EXPR
, GOTO_EXPR
, RETURN_EXPR
,
81 EXIT_EXPR
, LOOP_EXPR
, SWITCH_EXPR
, CASE_LABEL_EXPR
, ASM_EXPR
, SSA_NAME
,
82 CATCH_EXPR
, EH_FILTER_EXPR
, SCEV_KNOWN
, SCEV_NOT_KNOWN
, POLYNOMIAL_CHREC
,
83 STATEMENT_LIST
, ASSERT_EXPR
, TREE_BINFO
, WITH_SIZE_EXPR
,
84 REALIGN_LOAD_EXPR
, TARGET_MEM_REF
, MEM_REF
, OMP_PARALLEL
, OMP_TASK
,
85 OMP_FOR
, OMP_SECTIONS
, OMP_SINGLE
, OMP_SECTION
, OMP_MASTER
, OMP_ORDERED
,
86 OMP_CRITICAL
, OMP_ATOMIC
, OMP_CLAUSE
, REDUC_MAX_EXPR
, REDUC_MIN_EXPR
,
87 REDUC_PLUS_EXPR
, DOT_PROD_EXPR
, WIDEN_SUM_EXPR
, WIDEN_MULT_EXPR
,
88 WIDEN_MULT_PLUS_EXPR
, WIDEN_MULT_MINUS_EXPR
, FMA_EXPR
, VEC_LSHIFT_EXPR
,
89 VEC_RSHIFT_EXPR
, VEC_WIDEN_MULT_HI_EXPR
, VEC_WIDEN_MULT_LO_EXPR
,
90 VEC_UNPACK_HI_EXPR
, VEC_UNPACK_LO_EXPR
, VEC_UNPACK_FLOAT_HI_EXPR
,
91 VEC_UNPACK_FLOAT_LO_EXPR
, VEC_PACK_TRUNC_EXPR
, VEC_PACK_SAT_EXPR
,
92 VEC_PACK_FIX_TRUNC_EXPR
, VEC_EXTRACT_EVEN_EXPR
, VEC_EXTRACT_ODD_EXPR
,
93 VEC_INTERLEAVE_HIGH_EXPR
, VEC_INTERLEAVE_LOW_EXPR
, PREDICT_EXPR
,
94 OPTIMIZATION_NODE
, TARGET_OPTION_NODE
, LAST_AND_UNUSED_TREE_CODE
,
95 C_MAYBE_CONST_EXPR
, EXCESS_PRECISION_EXPR
, UNCONSTRAINED_ARRAY_TYPE
,
96 UNCONSTRAINED_ARRAY_REF
, NULL_EXPR
, PLUS_NOMOD_EXPR
, MINUS_NOMOD_EXPR
,
97 ATTR_ADDR_EXPR
, STMT_STMT
, LOOP_STMT
, EXIT_STMT
, OFFSET_REF
, PTRMEM_CST
,
98 NEW_EXPR
, VEC_NEW_EXPR
, DELETE_EXPR
, VEC_DELETE_EXPR
, SCOPE_REF
,
99 MEMBER_REF
, TYPE_EXPR
, AGGR_INIT_EXPR
, VEC_INIT_EXPR
, THROW_EXPR
,
100 EMPTY_CLASS_EXPR
, BASELINK
, TEMPLATE_DECL
, TEMPLATE_PARM_INDEX
,
101 TEMPLATE_TEMPLATE_PARM
, TEMPLATE_TYPE_PARM
, TYPENAME_TYPE
, TYPEOF_TYPE
,
102 BOUND_TEMPLATE_TEMPLATE_PARM
, UNBOUND_CLASS_TEMPLATE
, USING_DECL
,
103 USING_STMT
, DEFAULT_ARG
, TEMPLATE_ID_EXPR
, OVERLOAD
, PSEUDO_DTOR_EXPR
,
104 MODOP_EXPR
, CAST_EXPR
, REINTERPRET_CAST_EXPR
, CONST_CAST_EXPR
,
105 STATIC_CAST_EXPR
, DYNAMIC_CAST_EXPR
, DOTSTAR_EXPR
, TYPEID_EXPR
,
106 NOEXCEPT_EXPR
, NON_DEPENDENT_EXPR
, CTOR_INITIALIZER
, TRY_BLOCK
,
107 EH_SPEC_BLOCK
, HANDLER
, MUST_NOT_THROW_EXPR
, CLEANUP_STMT
, IF_STMT
,
108 FOR_STMT
, RANGE_FOR_STMT
, WHILE_STMT
, DO_STMT
, BREAK_STMT
, CONTINUE_STMT
,
109 SWITCH_STMT
, EXPR_STMT
, TAG_DEFN
, OFFSETOF_EXPR
, SIZEOF_EXPR
, ARROW_EXPR
,
110 ALIGNOF_EXPR
, AT_ENCODE_EXPR
, STMT_EXPR
, UNARY_PLUS_EXPR
, STATIC_ASSERT
,
111 TYPE_ARGUMENT_PACK
, NONTYPE_ARGUMENT_PACK
, TYPE_PACK_EXPANSION
,
112 EXPR_PACK_EXPANSION
, ARGUMENT_PACK_SELECT
, TRAIT_EXPR
, LAMBDA_EXPR
,
113 DECLTYPE_TYPE
, TEMPLATE_INFO
, URSHIFT_EXPR
, COMPARE_EXPR
, COMPARE_L_EXPR
,
114 COMPARE_G_EXPR
, CLASS_INTERFACE_TYPE
, CLASS_IMPLEMENTATION_TYPE
,
115 CATEGORY_INTERFACE_TYPE
, CATEGORY_IMPLEMENTATION_TYPE
,
116 PROTOCOL_INTERFACE_TYPE
, KEYWORD_DECL
, INSTANCE_METHOD_DECL
,
117 CLASS_METHOD_DECL
, PROPERTY_DECL
, MESSAGE_SEND_EXPR
, CLASS_REFERENCE_EXPR
,
118 PROPERTY_REF
, MAX_TREE_CODES
};
121 enum tree_code code
:16;
129 enum machine_mode mode
:8;
133 struct tree_base base
;
134 struct tree_typed typed
;
135 struct tree_type type
;
138 parse_predicate (tree cond
, tree
* op0
, tree
* op1
)
142 tree type
= (*(&op
->typed
.type
));
144 return invert_tree_comparison (code
,
146 [((((type
))->base
.code
) ==
147 VECTOR_TYPE
? vector_type_mode (type
)
148 : (type
)->type
.mode
)]) ==
151 ((real_format_for_mode
153 mode_class
[(((enum mode_class
)
154 mode_class
[((((type
))->
167 vector_type_mode (type
)
171 mode_inner
[((((type
))->base
.code
) == VECTOR_TYPE
? vector_type_mode (type
) : (type
)->type
.mode
)])]) == MODE_DECIMAL_FLOAT
) ? ((((((enum mode_class
) mode_class
[((((type
))->base
.code
) == VECTOR_TYPE
? vector_type_mode (type
) : (type
)->type
.mode
)]) == MODE_DECIMAL_FLOAT
) ? (((((type
))->base
.code
) == VECTOR_TYPE
? vector_type_mode (type
) : (type
)->type
.mode
)) : ((enum machine_mode
) mode_inner
[((((type
))->base
.code
) == VECTOR_TYPE
? vector_type_mode (type
) : (type
)->type
.mode
)])) - MIN_MODE_DECIMAL_FLOAT
) + (MAX_MODE_FLOAT
- MIN_MODE_FLOAT
+ 1)) : (((((enum mode_class
) mode_class
[((((type
))->base
.code
) == VECTOR_TYPE
? vector_type_mode (type
) : (type
)->type
.mode
)]) == MODE_DECIMAL_FLOAT
) ? (((((type
))->base
.code
) == VECTOR_TYPE
? vector_type_mode (type
) : (type
)->type
.mode
)) : ((enum machine_mode
) mode_inner
[((((type
))->base
.code
) == VECTOR_TYPE
? vector_type_mode (type
) : (type
)->type
.mode
)])) - MIN_MODE_FLOAT
)]))->has_nans
) ));