diff options
author | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
commit | 1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch) | |
tree | c607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gcc.target/sh/pr51244-19.c | |
parent | 283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff) | |
download | toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2 toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip |
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.target/sh/pr51244-19.c')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.target/sh/pr51244-19.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/sh/pr51244-19.c b/gcc-4.9/gcc/testsuite/gcc.target/sh/pr51244-19.c new file mode 100644 index 000000000..5845d93f6 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.target/sh/pr51244-19.c @@ -0,0 +1,75 @@ +/* Check that no unnecessary T bit stores are done before conditional + branches. + This case was extracted from the CSiBE set and contained the following + sequence: + mov.l @(8,r4),r2 + mov.l @(4,r4),r3 + cmp/gt r2,r3 + movt r2 +.L3: + tst r2,r2 + bt/s .L12 + mov #-1,r0 + + ..... + + mov.l @r4,r2 + tst r2,r2 + bra .L3 + movt r2 + + In this reduced code the movt insns were only present in the + unwanted sequences. Thus, if we see any movt insns, something is not + working as expected. This test requires -O2 because the T bit stores + in question will be eliminated in additional insn split passes after + reload. */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-skip-if "" { "sh*-*-*" } { "-m5*" } { "" } } */ +/* { dg-final { scan-assembler-not "movt" } } */ + +struct request +{ + unsigned long nr_sectors; +}; + +struct request_list +{ + int count; +}; + +struct request_queue +{ + struct request_list rq; + volatile int nr_sectors; + int max_queue_sectors; + int can_throttle; + unsigned long bounce_pfn; +}; + +typedef struct request_queue request_queue_t; + +static inline int +blk_oversized_queue (request_queue_t* q) +{ + if (q->can_throttle) + return q->nr_sectors > q->max_queue_sectors; + return q->rq.count == 0; +} + +struct request* +get_request (request_queue_t* q, int rw) +{ + struct request* rq = ((void*)0); + struct request_list *rl = &q->rq; + + if (blk_oversized_queue (q)) + { + if ((rw == 1) || (rw == 0)) + return ((void*)0); + if (blk_oversized_queue (q)) + return ((void*)0); + } + + return (void*)-100; +} |