comparison gcc/testsuite/gcc.dg/pr41295.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 /* { dg-do compile } */
2 /* { dg-options "-O1 -g" } */
3
4 enum reg_class
5 {
6 BASE_REGS,
7 GENERAL_REGS,
8 LIM_REG_CLASSES
9 };
10
11 static __inline__ unsigned char
12 hard_reg_set_subset_p (const unsigned long x[4], const unsigned long y[4])
13 {
14 return ((x[0] & ~y[0]) == 0
15 && (x[1] & ~y[1]) == 0
16 && (x[2] & ~y[2]) == 0
17 && (x[3] & ~y[3]) == 0);
18 }
19
20 static __inline__ unsigned char
21 hard_reg_set_equal_p (const unsigned long x[4], const unsigned long y[4])
22 {
23 return x[0] == y[0]
24 && x[1] == y[1]
25 && x[2] == y[2]
26 && x[3] == y[3];
27 }
28
29 extern unsigned long reg_class_contents[(int) LIM_REG_CLASSES][4];
30 extern int ira_important_classes_num;
31 extern enum reg_class ira_important_classes[(int) LIM_REG_CLASSES];
32 extern enum reg_class ira_reg_class_intersect[(int) LIM_REG_CLASSES][(int)
33 LIM_REG_CLASSES];
34 extern unsigned char ira_reg_classes_intersect_p[(int) LIM_REG_CLASSES][(int)
35 LIM_REG_CLASSES];
36 extern enum reg_class ira_reg_class_super_classes[(int) LIM_REG_CLASSES][(int)
37 LIM_REG_CLASSES];
38 static unsigned long temp_hard_regset[4];
39
40 static void
41 setup_reg_class_relations (void)
42 {
43 int i, cl1, cl2, cl3;
44 unsigned long temp_set2[4];
45 for (cl1 = 0; cl1 < (int) LIM_REG_CLASSES; cl1++)
46 {
47 ira_reg_class_super_classes[cl1][0] = LIM_REG_CLASSES;
48 for (cl2 = 0; cl2 < (int) LIM_REG_CLASSES; cl2++)
49 {
50 ira_reg_classes_intersect_p[cl1][cl2] = 0;
51 {
52 unsigned long *scan_tp_ = (temp_set2), *scan_fp_ =
53 (reg_class_contents[cl2]);
54 scan_tp_[1] = scan_fp_[1];
55 scan_tp_[2] = scan_fp_[2];
56 scan_tp_[3] = scan_fp_[3];
57 }
58 for (i = 0; i < ira_important_classes_num; i++)
59 {
60 cl3 = ira_important_classes[i];
61 {
62 unsigned long *scan_tp_ = (temp_hard_regset), *scan_fp_ =
63 (reg_class_contents[cl3]);
64 scan_tp_[0] = scan_fp_[0];
65 scan_tp_[1] = scan_fp_[1];
66 scan_tp_[3] = scan_fp_[3];
67 }
68 if (!hard_reg_set_subset_p (temp_hard_regset, temp_set2)
69 || (hard_reg_set_equal_p (temp_hard_regset, temp_set2)
70 && hard_reg_set_subset_p (reg_class_contents[cl3],
71 reg_class_contents[(int)
72 ira_reg_class_intersect
73 [cl1]
74 [cl2]])))
75 ira_reg_class_intersect[cl1][cl2] = (enum reg_class) cl3;
76 }
77 }
78 }
79 }
80
81 static void
82 find_reg_class_closure (void)
83 {
84 setup_reg_class_relations ();
85 }
86
87 void
88 ira_init (void)
89 {
90 find_reg_class_closure ();
91 }