[mips][p5600] Added P5600 processor and initial scheduler.
authorDaniel Sanders <daniel.sanders@imgtec.com>
Mon, 28 Sep 2015 18:24:08 +0000 (18:24 +0000)
committerDaniel Sanders <daniel.sanders@imgtec.com>
Mon, 28 Sep 2015 18:24:08 +0000 (18:24 +0000)
commit71e99129b835415dcc9b19cb353a95ac7ad8d048
tree950079903af161849ca7ff7c0dbb40b979c4bad1
parentbe2b2c32d38ab91bfe59b53d0dea8c8404802013
[mips][p5600] Added P5600 processor and initial scheduler.

Summary:
The P5600 is an out-of-order, superscalar implementation of the MIPS32R5
architecture.

The scheduler has a few missing details (see the 'Tricky Instructions'
section and some quirks of the P5600 are deliberately omitted due to
implementation difficulty and low chance of significant benefit (e.g. the
predicate on P5600WriteEitherALU). However, testing on SingleSource is
showing significant performance benefits on some apps (seven in the 10-30%
range) and only one significant regression (12%) when
-pre-RA-sched=linearize is given. Without -pre-RA-sched=linearize the
results are more variable. Some do even better (up to 55% improvement) but
increased numbers of copies are slowing others down (up to 12%).

Overall, the scheduler as it currently stands is a 2.4% win with
-pre-RA-sched=linearize and a 2.7% win without -pre-RA-sched=linearize.
I'm sure we can improve on this further.

For completeness, the FPGA this was tested on shows some failures with and
without the P5600 scheduler. These appear to be scheduling related since
the two test runs have fairly different sets of failing tests even after
accounting for other factors (e.g. spurious connection failures) however
it's not P5600 specific since we also get some for the generic scheduler.

Reviewers: vkalintiris

Subscribers: mpf, llvm-commits, atrick, vkalintiris

Differential Revision: http://reviews.llvm.org/D12193

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248725 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/Mips/Mips.td
lib/Target/Mips/MipsSchedule.td
lib/Target/Mips/MipsScheduleP5600.td [new file with mode: 0644]
lib/Target/Mips/MipsSubtarget.h