summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTWriter.cpp
diff options
context:
space:
mode:
authorQuentin Colombet <qcolombet@apple.com>2014-11-11 02:23:47 +0000
committerQuentin Colombet <qcolombet@apple.com>2014-11-11 02:23:47 +0000
commit360460ba6478cb1cf872abc0ed4423941d790868 (patch)
tree01b4c0c1a76c9509ab74d23784ec4b0025b593bb /clang/lib/Serialization/ASTWriter.cpp
parentfc410b6aaf9167f228769e0b2f56cf0411a621cb (diff)
downloadbcm5719-llvm-360460ba6478cb1cf872abc0ed4423941d790868.tar.gz
bcm5719-llvm-360460ba6478cb1cf872abc0ed4423941d790868.zip
[X86] Custom lower UINT_TO_FP from v4f32 to v4i32, and for v8f32 to v8i32 if
AVX2 is available. According to IACA, the new lowering has a throughput of 8 cycles instead of 13 with the previous one. Althought this lowering kicks in some SPECs benchmarks, the performance improvement was within the noise. Correctness testing has been done for the whole range of uint32_t with the following program: uint4 v = (uint4) {0,1,2,3}; uint32_t i; //Check correctness over entire range for uint4 -> float4 conversion for( i = 0; i < 1U << (32-2); i++ ) { float4 t = test(v); float4 c = correct(v); if( 0xf != _mm_movemask_ps( t == c )) { printf( "Error @ %vx: %vf vs. %vf\n", v, c, t); return -1; } v += 4; } Where "correct" is the old lowering and "test" the new one. The patch adds a test case for the two custom lowering instruction. It also modifies the vector cost model, which is why cast.ll and uitofp.ll are modified. 2009-02-26-MachineLICMBug.ll is also modified because we now hoist 7 instructions instead of 4 (3 more constant loads). rdar://problem/18153096> llvm-svn: 221657
Diffstat (limited to 'clang/lib/Serialization/ASTWriter.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud