- 01 Jul, 2016 1 commit
-
-
danno authored
This optimizes the passing of stack parameters in function calls. For some architectures (ia32/x64), using pushes when possible instead of bumping the stack and then storing parameters generates much smaller code, and in some cases is faster (e.g. when a push of a memory location can implement a memory-to-memory copy and thus elide an intermediate load. On others (e.g. ARM), the benefit is smaller, where it's only possible to elide direct stack pointer adjustment in certain cases or combine multiple register stores into a single instruction in other limited situations. On yet other platforms (ARM64, MIPS), there are no push instructions, and this optimization isn't used at all. Ideally, this mechanism would be used for both tail calls and normal calls, but "normal" calls are currently pretty efficient, and tail calls are very inefficient, so this CL sets the bar low for building a new mechanism to handle parameter pushing that only needs to raise the bar on tail calls for now. The key aspect of this change is that adjustment to the stack pointer for tail calls (and perhaps later real calls) is an explicit step separate from instruction selection and gap resolution, but aware of both, making it possible to safely recognize gap moves that are actually pushes. Review-Url: https://codereview.chromium.org/2082263002 Cr-Commit-Position: refs/heads/master@{#37477}
-
- 15 Jun, 2016 1 commit
-
-
bbudge authored
Review-Url: https://codereview.chromium.org/2054343002 Cr-Commit-Position: refs/heads/master@{#37013}
-
- 10 May, 2016 1 commit
-
-
bbudge authored
Renames IsDouble* predicates to IsFP*. Adds specific IsFloat*, IsDouble*, and IsSimd128* predicates. Adds specific GetFloatRegister, GetDoubleRegister, and GetSimd128Register methods. This is mostly a mechanical renaming of IsDouble* to IsFP* methods. This shouldn't change code generation at all. All fp registers are still treated as double registers. LOG=N BUG=v8:4124 Review-Url: https://codereview.chromium.org/1959763002 Cr-Commit-Position: refs/heads/master@{#36146}
-
- 29 Feb, 2016 1 commit
-
-
mtrofin authored
BUG= Review URL: https://codereview.chromium.org/1738973002 Cr-Commit-Position: refs/heads/master@{#34363}
-
- 27 Oct, 2015 1 commit
-
-
danno authored
Up until now, if one wanted to specify an explicit stack location or register as an operand for an instruction, it had to also be explicitly associated with a virtual register as a so-called FixedRegister or FixedStackSlot. For the implementation of tail calls, the plan is to use the gap resolver needs to shuffle stack locations from the caller to the tail-called callee. In order to do this, it must be possible to explicitly address operand locations on the stack that are not associated with virtual registers. This CL introduces ExplictOperands, which can specify a specific register or stack location that is not associated with virtual register. This will allow tail calls to specify the target locations for the necessary stack moves in the gap for the tail call without the core register allocation having to know about the target of the stack moves at all. In the process this CL: * creates a new Operand kind, ExplicitOperand, with which instructions can specify register and stack slots without an associated virtual register. * creates a LocationOperand class from which AllocatedOperand and ExplicitOperand are derived and provides a common interface to get Register, DoubleRegister and spill slot information. * removes RegisterOperand, DoubleRegisterOperand, StackSlotOperand and DoubleStackSlotOperand, they are subsumed by LocationOperand. * addresses a cleanup TODO in AllocatedOperand to reduce the redundancy of AllocatedOperand::Kind by using machine_type() to determine if an operand corresponds to a general purpose or double register. BUG=v8:4076 LOG=n Review URL: https://codereview.chromium.org/1389373002 Cr-Commit-Position: refs/heads/master@{#31603}
-
- 20 May, 2015 1 commit
-
-
erikcorry authored
R=verwaest@chromium.org BUG= Review URL: https://codereview.chromium.org/1143133002 Cr-Commit-Position: refs/heads/master@{#28502}
-
- 29 Apr, 2015 3 commits
-
-
dcarney authored
- allows the optimization of emitted gap move code since the representation of the value in the register is known - necessary preparation for vector register allocation - prepare for slot sharing for any value of the same byte width TBR=jarin@chromium.org BUG= Review URL: https://codereview.chromium.org/1111323003 Cr-Commit-Position: refs/heads/master@{#28140}
-
machenbach authored
Revert of [turbofan] add MachineType to AllocatedOperand (patchset #17 id:310001 of https://codereview.chromium.org/1087793002/) Reason for revert: [Sheriff] Breaks compile on chromium asan and v8 msan: http://build.chromium.org/p/client.v8/builders/Linux%20ASAN%20Builder/builds/3446 http://build.chromium.org/p/client.v8/builders/V8%20Linux%20-%20arm64%20-%20sim%20-%20MSAN/builds/2085 Original issue's description: > [turbofan] add MachineType to AllocatedOperand > > - allows the optimization of emitted gap move code since the representation of the value in the register is known > - necessary preparation for vector register allocation > - prepare for slot sharing for any value of the same byte width > > BUG= > > Committed: https://crrev.com/3a025d1ab6437559f86a464767aa03d2d9789f6f > Cr-Commit-Position: refs/heads/master@{#28137} TBR=jarin@chromium.org,dcarney@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG= Review URL: https://codereview.chromium.org/1119483003 Cr-Commit-Position: refs/heads/master@{#28139}
-
dcarney authored
- allows the optimization of emitted gap move code since the representation of the value in the register is known - necessary preparation for vector register allocation - prepare for slot sharing for any value of the same byte width BUG= Review URL: https://codereview.chromium.org/1087793002 Cr-Commit-Position: refs/heads/master@{#28137}
-
- 15 Apr, 2015 1 commit
-
-
dcarney authored
- make ParallelMove into a ZoneVector, removing an annoying level of indirection - make MoveOperands hold InstructionOperands instead of pointers, so there's no more operand aliasing for moves - opens up possibility of storing MachineType in allocated operands R=bmeurer@chromium.org BUG= Review URL: https://codereview.chromium.org/1081373002 Cr-Commit-Position: refs/heads/master@{#27842}
-
- 09 Apr, 2015 1 commit
-
-
dcarney authored
- ConstantOperand was using a too-small field too store its virtual register - drop ConvertTo, replace it with simple copy - split AllocatedOperand off from Immediate and Constant to make assignment clearer, also paving the way for small Immediates - put zone first in *Operand::New - driveby: drop delayed ssa deconstruction experiment R=titzer@chromium.org BUG= Review URL: https://codereview.chromium.org/1050803002 Cr-Commit-Position: refs/heads/master@{#27692}
-
- 04 Aug, 2014 1 commit
-
-
bmeurer@chromium.org authored
This way we don't clash with the ASSERT* macros defined by GoogleTest, and we are one step closer to being able to replace our homegrown base/ with base/ from Chrome. R=jochen@chromium.org, svenpanne@chromium.org Review URL: https://codereview.chromium.org/430503007 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22812 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 31 Jul, 2014 1 commit
-
-
bmeurer@chromium.org authored
TBR=svenpanne@chromium.org Review URL: https://codereview.chromium.org/430123002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22743 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 30 Jul, 2014 1 commit
-
-
danno@chromium.org authored
R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/426233002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22709 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-