forked from OSchip/llvm-project
a476117e3a
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 |
||
---|---|---|
.. | ||
32abi.ll | ||
64abi.ll | ||
64bit.ll | ||
64cond.ll | ||
64spill.ll | ||
2006-01-22-BitConvertLegalize.ll | ||
2007-05-09-JumpTables.ll | ||
2007-07-05-LiveIntervalAssert.ll | ||
2008-10-10-InlineAsmMemoryOperand.ll | ||
2008-10-10-InlineAsmRegOperand.ll | ||
2009-08-28-PIC.ll | ||
2009-08-28-WeakLinkage.ll | ||
2011-01-11-CC.ll | ||
2011-01-11-Call.ll | ||
2011-01-11-FrameAddr.ll | ||
2011-01-19-DelaySlot.ll | ||
2011-01-21-ByValArgs.ll | ||
2011-01-22-SRet.ll | ||
2011-12-03-TailDuplication.ll | ||
2012-05-01-LowerArguments.ll | ||
2013-05-17-CallFrame.ll | ||
DbgValueOtherTargets.test | ||
LeonCASAInstructionUT.ll | ||
LeonDetectRoundChangePassUT.ll | ||
LeonFixAllFDIVSQRTPassUT.ll | ||
LeonInsertNOPLoadPassUT.ll | ||
LeonItinerariesUT.ll | ||
LeonReplaceSDIVPassUT.ll | ||
LeonSMACUMACInstructionUT.ll | ||
analyze-branch.ll | ||
atomics.ll | ||
basictest.ll | ||
blockaddr.ll | ||
constpool.ll | ||
constructor.ll | ||
ctpop.ll | ||
disable-fsmuld-fmuls.ll | ||
empty-functions.ll | ||
exception.ll | ||
fail-alloca-align.ll | ||
float-constants.ll | ||
float.ll | ||
fp128.ll | ||
func-addr.ll | ||
globals.ll | ||
inlineasm-v9.ll | ||
inlineasm.ll | ||
leafproc.ll | ||
lit.local.cfg | ||
mature-mc-support.ll | ||
missing-sret.ll | ||
missinglabel.ll | ||
mult-alt-generic-sparc.ll | ||
multiple-div.ll | ||
obj-relocs.ll | ||
parts.ll | ||
private.ll | ||
register-clobber.ll | ||
rem.ll | ||
reserved-regs.ll | ||
select-mask.ll | ||
setjmp.ll | ||
sjlj.ll | ||
soft-float.ll | ||
soft-mul-div.ll | ||
spill.ll | ||
spillsize.ll | ||
sret-secondary.ll | ||
stack-align.ll | ||
stack-protector.ll | ||
thread-pointer.ll | ||
tls.ll | ||
trap.ll | ||
varargs.ll | ||
vector-call.ll | ||
vector-extract-elt.ll | ||
zerostructcall.ll |