llvm-project/llvm/test/CodeGen/SPARC
Fedor Sergeev a476117e3a [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
2017-11-20 22:33:58 +00:00
..
32abi.ll Revert "[MachineCopyPropagation] Extend pass to do COPY source forwarding" 2017-08-17 04:04:11 +00:00
64abi.ll Elide stores which are overwritten without being observed. 2017-05-16 19:43:56 +00:00
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 ScheduleDAGInstrs: Add condjump deps to addSchedBarrierDeps() 2016-11-11 01:34:21 +00:00
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 [Sparc] Don't overlap variable-sized allocas with other stack variables. 2016-10-25 22:13:28 +00:00
DbgValueOtherTargets.test
LeonCASAInstructionUT.ll Add support for Myriad ma2x8x series of CPUs 2017-10-02 18:50:48 +00:00
LeonDetectRoundChangePassUT.ll Sparc: fix test. 2016-10-19 15:55:11 +00:00
LeonFixAllFDIVSQRTPassUT.ll [Sparc] Remove execute permissions from non-executable text files 2017-05-17 11:05:20 +00:00
LeonInsertNOPLoadPassUT.ll [Sparc] Remove execute permissions from non-executable text files 2017-05-17 11:05:20 +00:00
LeonItinerariesUT.ll Revert r302938 "Add LiveRangeShrink pass to shrink live range within BB." 2017-05-18 18:50:05 +00:00
LeonReplaceSDIVPassUT.ll This pass, fixing an erratum in some LEON 2 processors ensures that the SDIV instruction is not issued, but replaced by SDIVcc instead, which does not exhibit the error. Unit test included. 2016-10-10 08:53:06 +00:00
LeonSMACUMACInstructionUT.ll [Sparc] Remove execute permissions from non-executable text files 2017-05-17 11:05:20 +00:00
analyze-branch.ll
atomics.ll Revert "Re-enable "[MachineCopyPropagation] Extend pass to do COPY source forwarding"" 2017-10-03 16:59:13 +00:00
basictest.ll [Sparc] Implement UMUL_LOHI and SMUL_LOHI instead of MULHS/MULHU/MUL. 2016-10-05 20:54:17 +00:00
blockaddr.ll
constpool.ll
constructor.ll [Solaris] emit .init_array instead of .ctors on Solaris (Sparc/x86) 2017-06-21 20:36:32 +00:00
ctpop.ll
disable-fsmuld-fmuls.ll [SPARC] Clean up the support for disabling fsmuld and fmuls instructions. 2017-07-20 20:09:11 +00:00
empty-functions.ll Don't emit CFI instructions at the end of a function 2017-04-24 18:45:59 +00:00
exception.ll
fail-alloca-align.ll [Sparc] Don't overlap variable-sized allocas with other stack variables. 2016-10-25 22:13:28 +00:00
float-constants.ll
float.ll [Sparc] efficient pattern for UINT_TO_FP conversion 2017-11-20 22:33:58 +00:00
fp128.ll
func-addr.ll
globals.ll
inlineasm-v9.ll [SPARC] Support 'f' and 'e' inline asm constraints. 2017-05-12 15:59:10 +00:00
inlineasm.ll [SPARC] Support 'f' and 'e' inline asm constraints. 2017-05-12 15:59:10 +00:00
leafproc.ll
lit.local.cfg
mature-mc-support.ll [LLC] Add an inline assembly diagnostics handler. 2017-02-03 11:14:39 +00:00
missing-sret.ll
missinglabel.ll
mult-alt-generic-sparc.ll
multiple-div.ll
obj-relocs.ll
parts.ll
private.ll
register-clobber.ll Check for register clobbers when merging a vreg live range with a 2017-01-13 19:08:36 +00:00
rem.ll
reserved-regs.ll [Sparc] Check register use with isPhysRegUsed() instead of reg_nodbg_empty() 2017-03-08 15:23:10 +00:00
select-mask.ll
setjmp.ll
sjlj.ll [Sparc] Remove execute permissions from non-executable text files 2017-05-17 11:05:20 +00:00
soft-float.ll [SPARC] Fix test so that it checks the correct label. 2017-01-04 14:01:58 +00:00
soft-mul-div.ll [Sparc] Added software multiplication/division feature 2017-07-18 19:08:38 +00:00
spill.ll
spillsize.ll
sret-secondary.ll
stack-align.ll [Sparc] Don't overlap variable-sized allocas with other stack variables. 2016-10-25 22:13:28 +00:00
stack-protector.ll
thread-pointer.ll
tls.ll
trap.ll
varargs.ll
vector-call.ll
vector-extract-elt.ll [DAG] Teach computeKnownBits and ComputeNumSignBits in SelectionDAG to look through EXTRACT_VECTOR_ELT. 2016-10-05 17:40:27 +00:00
zerostructcall.ll