diff options
author | Fedor Sergeev <fedor.sergeev@oracle.com> | 2017-11-20 22:33:58 +0000 |
---|---|---|
committer | Fedor Sergeev <fedor.sergeev@oracle.com> | 2017-11-20 22:33:58 +0000 |
commit | a476117e3aa6ef32306e39259d4da42aaca88e11 (patch) | |
tree | 11663c32c3f9b61b909d8d1d2a075288190e4af3 /clang/test | |
parent | 2bc260aba2b4bba4700ae30ab1d0edfc32925fee (diff) | |
download | bcm5719-llvm-a476117e3aa6ef32306e39259d4da42aaca88e11.tar.gz bcm5719-llvm-a476117e3aa6ef32306e39259d4da42aaca88e11.zip |
[Sparc] efficient pattern for UINT_TO_FP conversion
Summary:
while investigating performance degradation of imagick benchmark
there were found inefficient pattern for UINT_TO_FP conversion.
That pattern causes RAW hazard in assembly code. Specifically,
uitofp IR operator results in poor assembler :
st %i0, [%fp - 952]
ldd [%fp - 952], %f0
it stores 32-bit integer register into memory location and then
loads 64-bit floating point data from that location.
That is exactly RAW hazard case. To optimize that case it is
possible to use SPISD::ITOF and SPISD::XTOF for conversion from
integer to floating point data type and to use ISD::BITCAST to
copy from integer register into floating point register.
The fix is to write custom UINT_TO_FP pattern using SPISD::ITOF,
SPISD::XTOF, ISD::BITCAST.
Patch by Alexey Lapshin
Reviewers: fedor.sergeev, jyknight, dcederman, lero_chris
Reviewed By: jyknight
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D36875
llvm-svn: 318704
Diffstat (limited to 'clang/test')
0 files changed, 0 insertions, 0 deletions