ispc/ispc — pull request #588 by egaburov (2013-09-18 15:41:31+00:00)
Title: Added knc-i1x16.h , knc-i1x8.h and knc-i1x8unsafe_fast.h

### Expanded support for KNC:

* **knc-i1x16.h**: patched knc.h to pass compiler tests. Only i32, float & double are vectorised; i64 is still scalar for now, still gives good performance; some performance loss from knc.h, reason is not clear...
* **knc-i1x8.h**: slow (only double is vectorised), but included for completeness
* **knc-i1x8unsafe_fast.h**: fast, but is not safe in some circumstances (see inside the file for failed tests). FWIW, this one delivers ~10-50% slower performance on double precision code, depending on the code, compared to knc-i1x16.h Not sure whether this is due to a performance bug in the include or due to KNC in-order architecture (e.g., 2x unroll may reduce bubbles in the pipeline)

The main cause of the fails on knc-i1x8unsafe_fast.h is that KNC ISA doesn't have native types for <8 x i32> and <8 x float> (only <16 x i32> and <16 x float> respectively). If this can be fixed, knc-1x8unsafe_fast.h will pass all the tests which knc-i1x16.h passes and should be as fast as knc-i1x8.h