cfgexpand: Expand comment on when non-var clobbers can show up
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / pr48765.c
blob23748a9f151bcdd2016f00317bb423cdbf4d25ff
1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-additional-options "-O3 -mdejagnu-cpu=power6 -mno-vsx" } */
4 enum reg_class
6 NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS, XGRF_REGS, ALL_REGS,
7 LIM_REG_CLASSES
8 };
9 enum machine_mode
11 VOIDmode, QImode, HImode, PSImode, SImode, PDImode, DImode, TImode, OImode,
12 QFmode, HFmode, TQFmode, SFmode, DFmode, XFmode, TFmode, SCmode, DCmode,
13 XCmode, TCmode, CQImode, CHImode, CSImode, CDImode, CTImode, COImode,
14 BLKmode, CCmode, CCEVENmode, MAX_MACHINE_MODE
16 typedef struct rtx_def
18 int mode:8;
20 *rtx;
21 extern rtx *regno_reg_rtx;
22 typedef unsigned int HARD_REG_ELT_TYPE;
23 typedef HARD_REG_ELT_TYPE HARD_REG_SET[((64 + 32 - 1) / 32)];
24 extern int reg_alloc_order[64];
25 extern int max_regno;
26 extern int *reg_n_calls_crossed;
27 extern short *reg_renumber;
28 static int *reg_where_dead;
29 static int *reg_where_born;
30 static int *reg_order;
31 static char *regs_change_size;
32 static HARD_REG_SET *after_insn_hard_regs;
33 static int stupid_find_reg (int, enum reg_class, enum machine_mode, int, int,
34 int);
35 enum reg_class reg_preferred_class (int);
36 void
37 stupid_life_analysis (f, nregs, file)
38 int nregs, file;
39 rtx f;
41 register int i;
42 for (i = (((64)) + 3) + 1; i < max_regno; i++)
44 register int r = reg_order[i];
45 if ((int) LIM_REG_CLASSES > 1)
46 reg_renumber[r] =
47 stupid_find_reg (reg_n_calls_crossed[r], reg_preferred_class (r),
48 ((regno_reg_rtx[r])->mode), reg_where_born[r],
49 reg_where_dead[r], regs_change_size[r]);
53 static int
54 stupid_find_reg (call_preserved, class, mode, born_insn, dead_insn,
55 changes_size)
56 int call_preserved, born_insn, dead_insn, changes_size;
57 enum reg_class class;
58 enum machine_mode mode;
60 register int i, ins;
61 HARD_REG_SET used, this_reg;
62 for (ins = born_insn; ins < dead_insn; ins++)
65 register HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ =
66 (after_insn_hard_regs[ins]);
67 for (i = 0; i < ((64 + 32 - 1) / 32); i++)
68 *scan_tp_++ |= *scan_fp_++;
70 while (0);
71 for (i = 0; i < 64; i++)
73 int regno = reg_alloc_order[i];
74 if (((used)[(regno) / ((unsigned) 32)] &
75 (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) 32)))))
77 register int j;
78 if (j == regno)
79 return regno;