avr-related reload fix from Senthil Kumar Selvaraj
PR target/60040 * reload1.c (reload): Call finish_spills before restarting reload loop. Skip select_reload_regs if update_eliminables_and_spill returns true. testsuite/ PR target/60040 * gcc.target/avr/pr60040-1.c: New. * gcc.target/avr/pr60040-2.c: New. From-SVN: r235625
This commit is contained in:
parent
1390536b51
commit
849b265de1
|
@ -1,3 +1,10 @@
|
|||
2016-04-29 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
||||
|
||||
PR target/60040
|
||||
* reload1.c (reload): Call finish_spills before
|
||||
restarting reload loop. Skip select_reload_regs
|
||||
if update_eliminables_and_spill returns true.
|
||||
|
||||
2016-04-29 Claudiu Zissulescu <claziss@synopsys.com>
|
||||
|
||||
* config/arc/arc.h (UNSIGNED_INT12, UNSIGNED_INT16): Define.
|
||||
|
|
|
@ -981,7 +981,8 @@ reload (rtx_insn *first, int global)
|
|||
/* If we allocated another stack slot, redo elimination bookkeeping. */
|
||||
if (something_was_spilled || starting_frame_size != get_frame_size ())
|
||||
{
|
||||
update_eliminables_and_spill ();
|
||||
if (update_eliminables_and_spill ())
|
||||
finish_spills (global);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1021,10 +1022,12 @@ reload (rtx_insn *first, int global)
|
|||
did_spill = 1;
|
||||
something_changed = 1;
|
||||
}
|
||||
|
||||
select_reload_regs ();
|
||||
if (failure)
|
||||
goto failed;
|
||||
else
|
||||
{
|
||||
select_reload_regs ();
|
||||
if (failure)
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (insns_need_reload != 0 || did_spill)
|
||||
something_changed |= finish_spills (global);
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2016-04-29 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
Matthijs Kooijman <matthijs@stdin.nl>
|
||||
Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
||||
|
||||
PR target/60040
|
||||
* gcc.target/avr/pr60040-1.c: New.
|
||||
* gcc.target/avr/pr60040-2.c: New.
|
||||
|
||||
2016-04-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* gcc.dg/tree-ssa/pr18589-10.c: Adjust.
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-Os" } */
|
||||
|
||||
float dhistory[10];
|
||||
float test;
|
||||
|
||||
float getSlope(float history[]) {
|
||||
float sumx = 0;
|
||||
float sumy = 0;
|
||||
float sumxy = 0;
|
||||
float sumxsq = 0;
|
||||
float rate = 0;
|
||||
int n = 10;
|
||||
|
||||
int i;
|
||||
for (i=1; i< 11; i++) {
|
||||
sumx = sumx + i;
|
||||
sumy = sumy + history[i-1];
|
||||
sumy = sumy + history[i-1];
|
||||
sumxsq = sumxsq + (i*i);
|
||||
}
|
||||
|
||||
rate = sumy+sumx+sumxsq;
|
||||
return rate;
|
||||
}
|
||||
|
||||
void loop() {
|
||||
test = getSlope(dhistory);
|
||||
}
|
|
@ -0,0 +1,112 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
typedef unsigned char __uint8_t;
|
||||
typedef short unsigned int __uint16_t;
|
||||
typedef long unsigned int __uint32_t;
|
||||
typedef __uint8_t uint8_t ;
|
||||
typedef __uint16_t uint16_t ;
|
||||
typedef __uint32_t uint32_t ;
|
||||
typedef __builtin_va_list __gnuc_va_list;
|
||||
typedef __gnuc_va_list va_list;
|
||||
typedef enum rtems_blkdev_request_op {
|
||||
RTEMS_BLKDEV_REQ_READ,
|
||||
} rtems_fdisk_segment_desc;
|
||||
typedef struct rtems_fdisk_driver_handlers
|
||||
{
|
||||
int (*blank) (const rtems_fdisk_segment_desc* sd,
|
||||
uint32_t device,
|
||||
uint32_t segment,
|
||||
uint32_t offset,
|
||||
uint32_t size);
|
||||
} rtems_fdisk_driver_handlers;
|
||||
typedef struct rtems_fdisk_page_desc
|
||||
{
|
||||
uint16_t flags;
|
||||
uint32_t block;
|
||||
} rtems_fdisk_page_desc;
|
||||
typedef struct rtems_fdisk_segment_ctl
|
||||
{
|
||||
rtems_fdisk_page_desc* page_descriptors;
|
||||
uint32_t pages_active;
|
||||
} rtems_fdisk_segment_ctl;
|
||||
typedef struct rtems_fdisk_segment_ctl_queue
|
||||
{
|
||||
} rtems_fdisk_segment_ctl_queue;
|
||||
typedef struct rtems_fdisk_device_ctl
|
||||
{
|
||||
uint32_t flags;
|
||||
uint8_t* copy_buffer;
|
||||
} rtems_flashdisk;
|
||||
|
||||
extern void rtems_fdisk_error (const char *, ...);
|
||||
extern int rtems_fdisk_seg_write(const rtems_flashdisk*,
|
||||
rtems_fdisk_segment_ctl*,
|
||||
uint32_t,
|
||||
const rtems_fdisk_page_desc* page_desc,
|
||||
uint32_t);
|
||||
|
||||
void rtems_fdisk_printf (const rtems_flashdisk* fd, const char *format, ...)
|
||||
{
|
||||
{
|
||||
va_list args;
|
||||
__builtin_va_start(args,format);
|
||||
}
|
||||
}
|
||||
static int
|
||||
rtems_fdisk_seg_blank_check (const rtems_flashdisk* fd,
|
||||
rtems_fdisk_segment_ctl* sc,
|
||||
uint32_t offset,
|
||||
uint32_t size)
|
||||
{
|
||||
uint32_t device;
|
||||
uint32_t segment;
|
||||
const rtems_fdisk_segment_desc* sd;
|
||||
const rtems_fdisk_driver_handlers* ops;
|
||||
return ops->blank (sd, device, segment, offset, size);
|
||||
}
|
||||
static int
|
||||
rtems_fdisk_seg_write_page_desc (const rtems_flashdisk* fd,
|
||||
rtems_fdisk_segment_ctl* sc,
|
||||
uint32_t page,
|
||||
const rtems_fdisk_page_desc* page_desc)
|
||||
{
|
||||
uint32_t offset = page * sizeof (rtems_fdisk_page_desc);
|
||||
if ((fd->flags & (1 << 3)))
|
||||
{
|
||||
int ret = rtems_fdisk_seg_blank_check (fd, sc,
|
||||
offset,
|
||||
sizeof (rtems_fdisk_page_desc));
|
||||
}
|
||||
return rtems_fdisk_seg_write (fd, sc, offset,
|
||||
page_desc, sizeof (rtems_fdisk_page_desc));
|
||||
}
|
||||
void
|
||||
rtems_fdisk_recycle_segment (rtems_flashdisk* fd,
|
||||
rtems_fdisk_segment_ctl* ssc,
|
||||
rtems_fdisk_segment_ctl* dsc,
|
||||
uint32_t *pages)
|
||||
{
|
||||
int ret;
|
||||
uint32_t spage;
|
||||
uint32_t used = 0;
|
||||
uint32_t active = 0;
|
||||
{
|
||||
rtems_fdisk_page_desc* spd = &ssc->page_descriptors[spage];
|
||||
{
|
||||
rtems_fdisk_page_desc* dpd;
|
||||
uint32_t dpage;
|
||||
dpd = &dsc->page_descriptors[dpage];
|
||||
*dpd = *spd;
|
||||
ret = rtems_fdisk_seg_write_page_desc (fd,
|
||||
dsc,
|
||||
dpage, dpd);
|
||||
}
|
||||
}
|
||||
rtems_fdisk_printf (fd, "ssc end: %d-%d: p=%ld, a=%ld, u=%ld",
|
||||
pages, active, used);
|
||||
{
|
||||
rtems_fdisk_error ("compacting: ssc pages not 0: %d",
|
||||
ssc->pages_active);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue