The problem is that given code like this: a = b + c d = a + e ... ... (use of a) ... Lowering may produce code like this, at least on x86: T1 = b T1 += c a = T1 T2 = a T2 += e d = T2 ... ... (use of a) ... If "a" has a long live range, it may not get a register, resulting in clumsy code in the middle of the sequence like "a=reg; reg=a". Normally one might expect store forwarding to make the clumsy code fast, but it does presumably add an extra instruction-retirement cycle to the critical path in a pointer-chasing loop, and makes a big difference on some benchmarks. The simple fix here is, at the end of lowering "a=b+c", keep track of the final "a=T1" assignment. Then, when lowering "d=a+e" and we look up "a", we can substitute "T1". This slightly increases the live range of T1, but it does a great job of avoiding the redundant reload of the register from the stack location. A more general fix (in the future) might be to do live range splitting and let the register allocator handle it. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4095 R=kschimpf@google.com Review URL: https://codereview.chromium.org/1385433002 .
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| IceAPFloat.h | Loading commit data... | |
| IceAPInt.h | Loading commit data... | |
| IceAssembler.cpp | Loading commit data... | |
| IceAssembler.h | Loading commit data... | |
| IceAssemblerARM32.h | Loading commit data... | |
| IceAssemblerMIPS32.h | Loading commit data... | |
| IceAssemblerX8632.h | Loading commit data... | |
| IceAssemblerX8664.h | Loading commit data... | |
| IceAssemblerX86Base.h | Loading commit data... | |
| IceAssemblerX86BaseImpl.h | Loading commit data... | |
| IceBrowserCompileServer.cpp | Loading commit data... | |
| IceBrowserCompileServer.h | Loading commit data... | |
| IceBuildDefs.h | Loading commit data... | |
| IceCfg.cpp | Loading commit data... | |
| IceCfg.h | Loading commit data... | |
| IceCfgNode.cpp | Loading commit data... | |
| IceCfgNode.h | Loading commit data... | |
| IceClFlags.cpp | Loading commit data... | |
| IceClFlags.h | Loading commit data... | |
| IceClFlagsExtra.h | Loading commit data... | |
| IceCompileServer.cpp | Loading commit data... | |
| IceCompileServer.h | Loading commit data... | |
| IceCompiler.cpp | Loading commit data... | |
| IceCompiler.h | Loading commit data... | |
| IceConditionCodesARM32.h | Loading commit data... | |
| IceConditionCodesX8632.h | Loading commit data... | |
| IceConditionCodesX8664.h | Loading commit data... | |
| IceConverter.cpp | Loading commit data... | |
| IceConverter.h | Loading commit data... | |
| IceDefs.h | Loading commit data... | |
| IceELFObjectWriter.cpp | Loading commit data... | |
| IceELFObjectWriter.h | Loading commit data... | |
| IceELFSection.cpp | Loading commit data... | |
| IceELFSection.h | Loading commit data... | |
| IceELFStreamer.h | Loading commit data... | |
| IceFixups.cpp | Loading commit data... | |
| IceFixups.h | Loading commit data... | |
| IceGlobalContext.cpp | Loading commit data... | |
| IceGlobalContext.h | Loading commit data... | |
| IceGlobalInits.cpp | Loading commit data... | |
| IceGlobalInits.h | Loading commit data... | |
| IceInst.cpp | Loading commit data... | |
| IceInst.def | Loading commit data... | |
| IceInst.h | Loading commit data... | |
| IceInstARM32.cpp | Loading commit data... | |
| IceInstARM32.def | Loading commit data... | |
| IceInstARM32.h | Loading commit data... | |
| IceInstMIPS32.cpp | Loading commit data... | |
| IceInstMIPS32.def | Loading commit data... | |
| IceInstMIPS32.h | Loading commit data... | |
| IceInstVarIter.h | Loading commit data... | |
| IceInstX8632.cpp | Loading commit data... | |
| IceInstX8632.def | Loading commit data... | |
| IceInstX8632.h | Loading commit data... | |
| IceInstX8664.cpp | Loading commit data... | |
| IceInstX8664.def | Loading commit data... | |
| IceInstX8664.h | Loading commit data... | |
| IceInstX86Base.h | Loading commit data... | |
| IceInstX86BaseImpl.h | Loading commit data... | |
| IceIntrinsics.cpp | Loading commit data... | |
| IceIntrinsics.h | Loading commit data... | |
| IceLiveness.cpp | Loading commit data... | |
| IceLiveness.h | Loading commit data... | |
| IceLoopAnalyzer.cpp | Loading commit data... | |
| IceLoopAnalyzer.h | Loading commit data... | |
| IceOperand.cpp | Loading commit data... | |
| IceOperand.h | Loading commit data... | |
| IcePhiLoweringImpl.h | Loading commit data... | |
| IceRNG.cpp | Loading commit data... | |
| IceRNG.h | Loading commit data... | |
| IceRegAlloc.cpp | Loading commit data... | |
| IceRegAlloc.h | Loading commit data... | |
| IceRegistersARM32.h | Loading commit data... | |
| IceRegistersMIPS32.h | Loading commit data... | |
| IceRegistersX8632.h | Loading commit data... | |
| IceRegistersX8664.h | Loading commit data... | |
| IceSwitchLowering.cpp | Loading commit data... | |
| IceSwitchLowering.h | Loading commit data... | |
| IceTLS.h | Loading commit data... | |
| IceTargetLowering.cpp | Loading commit data... | |
| IceTargetLowering.h | Loading commit data... | |
| IceTargetLoweringARM32.cpp | Loading commit data... | |
| IceTargetLoweringARM32.def | Loading commit data... | |
| IceTargetLoweringARM32.h | Loading commit data... | |
| IceTargetLoweringMIPS32.cpp | Loading commit data... | |
| IceTargetLoweringMIPS32.def | Loading commit data... | |
| IceTargetLoweringMIPS32.h | Loading commit data... | |
| IceTargetLoweringX8632.cpp | Loading commit data... | |
| IceTargetLoweringX8632.def | Loading commit data... | |
| IceTargetLoweringX8632.h | Loading commit data... | |
| IceTargetLoweringX8632Traits.h | Loading commit data... | |
| IceTargetLoweringX8664.cpp | Loading commit data... | |
| IceTargetLoweringX8664.def | Loading commit data... | |
| IceTargetLoweringX8664.h | Loading commit data... | |
| IceTargetLoweringX8664Traits.h | Loading commit data... | |
| IceTargetLoweringX86Base.h | Loading commit data... | |
| IceTargetLoweringX86BaseImpl.h | Loading commit data... | |
| IceThreading.cpp | Loading commit data... | |
| IceThreading.h | Loading commit data... | |
| IceTimerTree.cpp | Loading commit data... | |
| IceTimerTree.def | Loading commit data... | |
| IceTimerTree.h | Loading commit data... | |
| IceTranslator.cpp | Loading commit data... | |
| IceTranslator.h | Loading commit data... | |
| IceTypeConverter.cpp | Loading commit data... | |
| IceTypeConverter.h | Loading commit data... | |
| IceTypes.cpp | Loading commit data... | |
| IceTypes.def | Loading commit data... | |
| IceTypes.h | Loading commit data... | |
| IceUtils.h | Loading commit data... | |
| Makefile | Loading commit data... | |
| PNaClTranslator.cpp | Loading commit data... | |
| PNaClTranslator.h | Loading commit data... | |
| README.SIMD.rst | Loading commit data... | |
| main.cpp | Loading commit data... |