1/* { dg-do compile } */
2
3typedef struct rtx_def *rtx;
4enum machine_mode {
5  VOIDmode,
6  CCFPmode,
7  CCFPUmode,
8  MAX_MACHINE_MODE
9};
10enum mode_class {
11  MODE_CC,
12  MODE_FLOAT,
13  MODE_COMPLEX_FLOAT,
14  MODE_VECTOR_FLOAT
15};
16extern const enum mode_class mode_class[(int) MAX_MACHINE_MODE];
17enum rtx_code {
18  UNKNOWN,
19  GEU,
20  ORDERED,
21  CONST_INT
22};
23struct rtx_def {
24  unsigned int code: 16;
25  unsigned int mode : 8;
26};
27extern enum rtx_code reverse_condition (enum rtx_code);
28extern enum rtx_code reverse_condition_maybe_unordered (enum rtx_code);
29enum rtx_code
30reversed_comparison_code_parts (enum rtx_code code, rtx insn, rtx arg0,
31				rtx arg1)
32{
33  enum machine_mode mode;
34  mode = (enum machine_mode) (arg0)->mode;
35  if (mode == VOIDmode)
36    mode = (enum machine_mode) (arg1)->mode;
37  if ((mode_class[(int) (mode)]) == MODE_CC)
38    return (mode != CCFPmode && mode != CCFPUmode
39	    ? reverse_condition (code)
40	    : reverse_condition_maybe_unordered (code));
41  switch (code)
42    {
43    case GEU:
44      return reverse_condition (code);
45    case ORDERED:
46      return UNKNOWN;
47    }
48  if (((enum rtx_code) (arg0)->code) == CONST_INT
49      || (((enum machine_mode) (arg0)->mode) != VOIDmode
50	  && ! ((mode_class[(int) (mode)]) == MODE_FLOAT
51		|| (mode_class[(int) (mode)]) == MODE_COMPLEX_FLOAT
52		|| (mode_class[(int) (mode)]) == MODE_VECTOR_FLOAT)))
53    return reverse_condition (code);
54  return UNKNOWN;
55}
56