summaryrefslogtreecommitdiff
path: root/src/jit
AgeCommit message (Collapse)AuthorFilesLines
2016-09-12Merge pull request #7133 from mikedn/x86-cast-long-floatPat Gavlin2-1/+11
Implement long to float cast for x86
2016-09-12Implement long to float cast for x86Mike Danes2-1/+11
Convert long to float/double casts to helper calls. Despite the call this version is 2x faster than JIT32's FILD implementation which suffers a significant store forwarding stall penalty.
2016-09-09Merge pull request #7067 from pkukol/timing_bit_rotPeter Kukol5-39/+67
Fix some timing code bit rot, plus minor cleanup.
2016-09-09Merge pull request #7125 from pgavlin/ModelAssignByRefKillSetPat Gavlin4-26/+40
Model the kill set for ASSIGN_BYREF and stop generating movsq on x86.
2016-09-09Merge pull request #7122 from BruceForstall/Fix7092Bruce Forstall1-0/+11
Fix #7092
2016-09-09Merge pull request #7120 from BruceForstall/Fix7093Bruce Forstall1-3/+20
Fix #7093
2016-09-09Merge pull request #7114 from BruceForstall/Fix7100Bruce Forstall1-2/+3
Fix #7100
2016-09-09Fix #7092Bruce Forstall1-0/+11
The problem is genCodeForInitBlkUnroll() is trying to generate: ``` mov byte ptr [edi], si ``` which is not legal: ebp/esi/edi/esp don't have byte register versions on x86. This change requires the source register to be an x86 byteable register in this case. Note that legacy JIT generates stosb for this test.
2016-09-09Do not use movsq on x86.Pat Gavlin3-26/+38
This instruction is only available when targeting amd64.
2016-09-09Model the kill set for ASSIGN_BYREF on x86.Pat Gavlin1-0/+2
This helper kills esi, edi, and ecx.
2016-09-09Merge pull request #7111 from sivarv/jitstressregs2FixSivarv1-1/+30
Fix to #7087 - x86 RyuJIT JitstressRegs=2 assert failure
2016-09-08Fix #7093Bruce Forstall1-3/+20
This is an assert due to how STRESS_64RSLT_MUL is implemented. This stress mode converts: ``` /--* lclVar int V01 loc0 * * int \--* lclVar int V01 loc0 ``` to: ``` * cast int <- long | /--* cast long <- int | | \--* lclVar int V01 loc0 \--* * long \--* cast long <- long \--* nop long \--* lclVar int V01 loc0 ``` Thus, the long 'nop' node is above an 'int' operand node. This led to an assert in genCodeForTreeLng() that the lclVar was type long, which is isn't. I added yet another cast under the 'nop' to fix this typing problem: ``` * cast int <- long | /--* cast long <- int | | \--* lclVar int V01 loc0 \--* * long \--* cast long <- long \--* nop long \--* cast long <- int \--* lclVar int V01 loc0 ```
2016-09-08Revert "Fix IMGREL32 static field addr value-num blindspot"Jan Kotas1-15/+11
2016-09-08Fix #7100Bruce Forstall1-2/+3
This issue is the following assert: ``` Assert failure '!emitComp->opts.compReloc || memBase->IsIconHandle()' ``` while ngen'ing mscorlib on desktop. We're trying to generate ``` cmp ebx, dword ptr [0000H] ``` (due to inlining). But, emitInsBinary() doesn't expect a zero address that is not a relocatable handle. Simply change the assert to allow this. The code then generates the correct zero base address.
2016-09-08Fix to #7087sivarv1-1/+30
2016-09-08Merge pull request #7071 from erozenfeld/StackOverflowEugene Rozenfeld3-158/+283
Make GT_LIST processing non-recursive to avoid StackOverflow.
2016-09-08Fix the fixes.Peter Kukol1-19/+22
2016-09-08Fix some timing code bit rot, plus minor cleanup.Peter Kukol5-24/+49
2016-09-08Merge pull request #7107 from pgavlin/gh7089Pat Gavlin1-0/+4
Fix #7089.
2016-09-08Merge pull request #7106 from pgavlin/DecompTPPat Gavlin2-16/+9
Improve decomp throughput.
2016-09-08Return false from isRegPairType for RyuJIT.Pat Gavlin1-0/+4
The RyuJIT backend does not use regpair types, so this method should simply return false when that backend is in use. In the future we should consider removing this method (and other regpair-related code). Fixes #7089.
2016-09-08Merge pull request #4986 from mikedn/x86-cast-int-longPat Gavlin2-15/+88
Implement integer to long/ulong casts for x86
2016-09-08Improve decomp throughput.Pat Gavlin2-16/+9
Don't find uses unless necessary. This saves about 50 milliseconds while crossgen'ing mscorlib.
2016-09-08Merge pull request #7011 from svick/earlyprop-unused-varPat Gavlin1-1/+5
Fix BBF_HAS_NULLCHECK test
2016-09-08Add a NYI for a long compare codegen issueMike Danes1-0/+5
Tracked by #7038
2016-09-08Implement integer to long/ulong casts for x86Mike Danes1-15/+83
2016-09-08Merge pull request #6889 from JosephTremoulet/StaticFieldJoseph Tremoulet1-11/+15
Fix IMGREL32 static field addr value-num blindspot
2016-09-08Merge pull request #6754 from hseok-oh/castd2ulJoseph Tremoulet1-40/+11
disable gtFoldExprConst for conversion from negative double to unsigned long
2016-09-07Link #7097 to the relevant code in ::IsTargetIntrinsic.Pat Gavlin1-0/+7
2016-09-07Stop treating sine/cosine/round as target intrinsics on x86.Pat Gavlin1-1/+1
These intrinsics were supported by JIT32 using the corresponding x87 instructions. There are a few downsides to doing the same in RyuJIT, however, because it uses SSE for all other floating-point math: - The mix of precisions used by the combination of SSE + x87 instructions matches neither the JIT32 nor the RyuJIT/x64 behavior. - Using the x87 instructions is more expensive, as the result of the instruction may need to be moved via memory to an SSE register. - The RA would need to be udpated in order to better understand that each x87 instruction may require a spill temp in order to retrieve the result. Issue #7097 tracks investigating a custom calling convention for the appropriate helper calls if necessasry.
2016-09-07Make GT_LIST processing non-recursive to avoid StackOverflow.Eugene Rozenfeld3-157/+282
We had some internal cases where crossgen failed with StackOverflow exception when compiling huge methods. In particular, the methods had GT_PHI nodes with huge number of arguments. StackOverflow was happening in multiple places. Recent LIR changes eliminated two of those places, these changes eliminate two more: gtSetEvalOrder and fgDebugCheckFlags (debug only). We already had gtSetListOrder but it was only used for call arg lists. I made gtSetListOrder non-recursive and also generalized to handle other GT_LIST nodes. With that with these changes the huge repros can now be crossgen'd. I verified no assembly diffs in SuperPMI. I'm verifying overall throughput effect.
2016-09-07Merge pull request #7065 from adiaaida/multiplyLongMul_HiMichelle McDaniel9-56/+178
Enable long multiply
2016-09-07Merge pull request #7068 from CarolEidt/FixArm64Carol Eidt4-8/+22
Fix Arm64 build breaks
2016-09-07Enable long multiplyMichelle McDaniel9-56/+178
Most long multiplies are converted in morph to helper calls. However, GT_MULs of the form long = (long)int * (long)int are passed through to be handled in codegen. In decompose, we convert these multiplies to GT_MUL_HIs to be handled in a similar manner at GT_MULHI. Since mul and imul take two ints and return a long in edx:eax, we can handle them similarly to GT_CALLs, where we save them to lclvars if they aren't already saved. In codegen, we generate a mul (or imul for signed multiply), which produces the output in edx:eax, and then we store those locations when we handle the storelclvar.
2016-09-07modify commentHyeongseok Oh1-2/+3
2016-09-07add commentHyeongseok Oh1-0/+3
2016-09-06Merge pull request #7064 from JosephTremoulet/MakeCseJoseph Tremoulet2-3/+3
Fix GTF_ flag collision
2016-09-06Fix Arm64 build breaksCarol Eidt4-8/+22
The `GT_STORE_OBJ` case in codegen was missing a break. `getStructHandleIfPresent` wasn't correctly handling `GT_ASG'. The `srcCount` was not being set correctly for block ops with a constant size. And I lost some code in `fgMakeTmpArgNode` with a merge. Also, I had introduced a dumping issue in gentree.cpp when I made `GT_OBJ` a `GTK_UNOP` as a result of some PR comments.
2016-09-06Move genIncRegBy() to codegenclassic.h (#7063)Hyung-Kyu Choi2-2/+1
We don't have to keep genIncRegBy() in codegen.h anymore, since genIncRegBy() is defined in codegenlegacy.cpp and only used in LEGACY_BACKEND code. Signed-off-by: Hyung-Kyu Choi <hk0110.choi@samsung.com>
2016-09-06[ARM] Remove ARM_HAZARD_AVOIDANCE (#7019)Hanjoung Lee6-221/+0
remove `ARM_HAZARD_AVOIDANCE` as it is a rare case. For #7003
2016-09-06Enable FEATURE_JIT_METHOD_PERF always (even when FEATURE_CORECLR is on). (#7028)Peter Kukol2-3/+4
2016-09-06Fix GTF_ flag collisionJoseph Tremoulet2-3/+3
Define flag `GTF_IS_IN_CSE` (which is used only to communicate in a call to `gtNodeHasSideEffects` that the caller wants to disregard the side-effect of running a .cctor) as `GTF_BOOLEAN` rather than `GTF_MAKE_CSE` -- as the comment at the definition of `GTF_IS_IN_CSE` indicates, the only requirement on its value is that it not conflict with one of the side-effect flags, but `gtNodeHasSideEffects` does in fact check for `GTF_MAKE_CSE`, so the current value conflicts. Also update the code in `gtNodeHasSideEffects` that is dictated by `GTF_IS_IN_CSE` to check just for that bit, instead of checking that the caller passed in exactly `GTF_PERSISTENT_SIDE_EFFECTS_IN_CSE` -- no need to entangle conceptually independent parameters. Fixes #7042.
2016-09-06fix helpers' flag: ULDiv, ULMod can throw Div-by-zero exception (#7052)Hyeongseok Oh1-2/+3
2016-09-04Merge pull request #7027 from CarolEidt/1stClassStructBlkOpsCarol Eidt28-2380/+4020
1st Class Struct Block Assignments
2016-09-02More PR commentsCarol Eidt8-67/+162
2016-09-02Merge pull request #6976 from kvochko/prof_elt_callbacksRahul Kumar1-1/+1
Enable FunctionEnter/FunctionLeave callbacks on ARM
2016-09-02Restore the change to gtNewBlkOpNodeCarol Eidt1-0/+4
2016-09-02Enabled FunctionEnter/FunctionLeave hooks on ARM (#6939)Andrey Kvochko1-1/+1
2016-09-01More PR FeedbackCarol Eidt10-31457/+31451
2016-09-01Address PR FeedbackCarol Eidt9-31511/+31470