James Ko [Wed, 23 Nov 2016 23:25:28 +0000 (18:25 -0500)]
Add String.Join overloads accepting a char separator (dotnet/coreclr#7942)
* Add String.Join overloads that accept char separators
Commit migrated from https://github.com/dotnet/coreclr/commit/
3f59c073ccc8d27c80e8ae1509685a078e9f1415
Pat Gavlin [Wed, 23 Nov 2016 22:16:06 +0000 (14:16 -0800)]
Merge pull request dotnet/coreclr#8284 from pgavlin/gh8258
Increment lclVar refCounts in fgMorphBlockStmt.
Commit migrated from https://github.com/dotnet/coreclr/commit/
7c978202b482d634d10c6841c2f60e0a0d600a17
Sven Boemer [Wed, 23 Nov 2016 22:04:05 +0000 (14:04 -0800)]
Merge pull request dotnet/coreclr#8281 from sbomer/dasm_automation
Fix archiving for jitdiff windows build only jobs
Commit migrated from https://github.com/dotnet/coreclr/commit/
60a8b7399bf45c62062ef3ea1d049ebb2b6906cf
Carol Eidt [Wed, 23 Nov 2016 21:52:22 +0000 (13:52 -0800)]
Merge pull request dotnet/coreclr#7847 from CarolEidt/Fix278375
x86: not all fields of promoted struct need regs
Commit migrated from https://github.com/dotnet/coreclr/commit/
ffed6b25578ad5aa5a074c8a62321bd20a9bbd35
Pat Gavlin [Wed, 23 Nov 2016 21:51:50 +0000 (13:51 -0800)]
Format code.
Commit migrated from https://github.com/dotnet/coreclr/commit/
c07f2e1d7e111568b45389f07e9e5bd757a866a2
Pat Gavlin [Wed, 23 Nov 2016 21:39:10 +0000 (13:39 -0800)]
Merge pull request dotnet/coreclr#8259 from pgavlin/ByrefGcrefKillSet
Fix the byref/gcref kill set for ASSIGN_BYREF.
Commit migrated from https://github.com/dotnet/coreclr/commit/
5e296921f4190686142b5219a3018849deb0ee0a
Pat Gavlin [Wed, 23 Nov 2016 20:02:55 +0000 (12:02 -0800)]
Fix the no-GC kill set for ASSIGN_BYREF on x86.
This helper only kills ECX.
Commit migrated from https://github.com/dotnet/coreclr/commit/
695fe080d88135a305784f2b9c8f7c2ab7fd13d2
Pat Gavlin [Wed, 23 Nov 2016 19:41:04 +0000 (11:41 -0800)]
Increment lclVar refCounts in fgMorphBlockStmt.
`fgMorphTree` may introduce additional lclVar references. Call
`lvaRecursiveIncRefCounts` in `fgMorphBlockStmt` to ensure that ref
counts are conservatively correct.
Fixes dotnet/coreclr#8258.
Commit migrated from https://github.com/dotnet/coreclr/commit/
8176598a305ceddb632aa468e8e6d29d92c4d583
Dan Moseley [Wed, 23 Nov 2016 18:55:11 +0000 (10:55 -0800)]
Merge pull request dotnet/coreclr#8137 from jamesqo/array.fill
Add Array.Fill apis
Commit migrated from https://github.com/dotnet/coreclr/commit/
36535348424c17d4616dbfdf6c8d007b94a78d19
Sivarv [Wed, 23 Nov 2016 18:36:46 +0000 (10:36 -0800)]
Merge pull request dotnet/coreclr#8229 from mikedn/sse-eq
Change vector equality to use pmovmskb
Commit migrated from https://github.com/dotnet/coreclr/commit/
a8b6df020149787c82d832bb1ca817ec1ff57441
Ian Hays [Wed, 23 Nov 2016 17:46:22 +0000 (09:46 -0800)]
Merge pull request dotnet/coreclr#8282 from ianhays/api_lockfix
Fix Typo in Unix Lock/Unlock PAL
Commit migrated from https://github.com/dotnet/coreclr/commit/
42aaac5bd8992db64d94e031026a3b4f4aaa2057
Ian Hays [Wed, 23 Nov 2016 17:35:08 +0000 (09:35 -0800)]
Fix Typo in Unix Lock/Unlock PAL
Commit migrated from https://github.com/dotnet/coreclr/commit/
dc23e29d137a1c27b89c3953ba402c065cb88904
Carol Eidt [Wed, 23 Nov 2016 17:24:41 +0000 (09:24 -0800)]
Account for a reload of umod op2
Commit migrated from https://github.com/dotnet/coreclr/commit/
6c9d194008a05400062a0d2f150675d02ad45f91
Sven Boemer [Wed, 23 Nov 2016 17:14:03 +0000 (09:14 -0800)]
Fix archiving for jitdiff windows build only jobs
The dasm archiving was enabled for all jitdiff scenarios, including the
build set up for the ubuntu/osx flow jobs. The dasm artifacts don't
exist in build-only scenarios, and this was preventing archiving of
the build.
Commit migrated from https://github.com/dotnet/coreclr/commit/
b6d317740a2a7a1c02a5e628ab32d1ea77a53fe0
SaeHie Park [Wed, 23 Nov 2016 10:18:43 +0000 (19:18 +0900)]
[x86/linux] Fix redefined DISPATCHER_CONTEXT compile error (dotnet/coreclr#8246)
WIP, fix compile error for x86/Linux
- add directive WIN32 to current DISPATCHER_CONTEXT in clrnt.h
- add DISPATCHER_CONTEXT for x86 in palrt.h
Commit migrated from https://github.com/dotnet/coreclr/commit/
2c67c72643b8087924de1f931f47ae95f15dadb5
Andrey Kvochko [Wed, 23 Nov 2016 10:17:05 +0000 (13:17 +0300)]
[GDBJIT] Fix thunk symbol generation for ARM (dotnet/coreclr#8205)
* Fix thunk symbol generation for ARM
* Add PINSTRToPCODE macro to raise the THUMB bit on ARM
Commit migrated from https://github.com/dotnet/coreclr/commit/
2c6cbd6d9dee4ac4ca5fa4c04c8012262efe0b38
SaeHie Park [Wed, 23 Nov 2016 10:14:59 +0000 (19:14 +0900)]
[x86/Linux] Fix compile error with exception handling (dotnet/coreclr#8269)
Fix compile error for x86/Linux
- fix unknown type name 'EHWatsonBucketTracker'
- fix field has incomplete type 'EXCEPTION_REGISTRATION_RECORD'
- fix for FaultingExceptionFrame class
Commit migrated from https://github.com/dotnet/coreclr/commit/
61e80e47c8fbb3e852ed12962e1ed736f1acf03d
SaeHie Park [Wed, 23 Nov 2016 10:12:18 +0000 (19:12 +0900)]
[x86/Linux] Fix unknown type name 'ExInfo' (dotnet/coreclr#8274)
Fix compile error for x86/Linux
- need to undefine ELIMINATE_FEF by adding !defined(FEATURE_PAL)
Commit migrated from https://github.com/dotnet/coreclr/commit/
4d10630a7de0a7b3d02a910d37834e3534ce5605
SaeHie Park [Wed, 23 Nov 2016 10:10:24 +0000 (19:10 +0900)]
[x86/Linux] Fix comparison of two values with different enumeration types (dotnet/coreclr#8273)
Fix compile error for x86/Linux
- convert to int type for 'ReturnKind' and 'infoHdrAdjustConstants'
Commit migrated from https://github.com/dotnet/coreclr/commit/
f1f820681bb1c1e008aef85fb5354b8968266eb3
SaeHie Park [Wed, 23 Nov 2016 09:39:33 +0000 (18:39 +0900)]
[x86/Linux] Fix SEH '__try' is not supported on this target (dotnet/coreclr#8271)
Fix compile error for x86/Linux
- add check !FEATURE_PAL
Commit migrated from https://github.com/dotnet/coreclr/commit/
2f0f156c9ea8992376c08c6b4f5804ae9c4ba19d
SaeHie Park [Wed, 23 Nov 2016 09:38:26 +0000 (18:38 +0900)]
[x86/Linux] Fix no matching function for call to 'InternalCreateThread' (dotnet/coreclr#8265)
Fix compile error for x86/Linux
- fix calling convention by adding PALAPI to TerminationRequestHandlingRoutine
Commit migrated from https://github.com/dotnet/coreclr/commit/
c581947c307df9abcb6abe8bd64df940d6372d6a
Mike Danes [Mon, 21 Nov 2016 18:30:28 +0000 (20:30 +0200)]
Change vector equality to use pmovmskb
This change replaces the rather long shuffle based compare sequence with
pmovmskb which is available in SSE2 and AVX2. The following code is now
generated:
C4E16D76D1 vpcmpeqd ymm2, ymm1
C4E17DD7C2 vpmovmskbeax, ymm2
83F8FF cmp eax, -1
0F94C0 sete al
0FB6C0 movzx rax, al
Commit migrated from https://github.com/dotnet/coreclr/commit/
b1643d1efb331a85e832d94f8128c75c588b1003
Koundinya Veluri [Wed, 23 Nov 2016 03:14:13 +0000 (19:14 -0800)]
Fix ThreadPool.SetMaxThreads to not allow having zero available threads (dotnet/coreclr#8256)
There is an assertion checking for this, so allowing zero is probably not intentional.
Related to dotnet/coreclr#8236
Commit migrated from https://github.com/dotnet/coreclr/commit/
74015760d85127bdda68a520d2c0fe5f8bb667ed
SaeHie Park [Wed, 23 Nov 2016 02:04:39 +0000 (11:04 +0900)]
[x86/Linux] Fix compile error redifinition RUNTIME_FUNCTION (dotnet/coreclr#8249)
Add !FEATURE_PAL directive for x86 as RUNTIME_FUNCTION is defined in pal
Commit migrated from https://github.com/dotnet/coreclr/commit/
20f48eb1128261332a99503a22b86c3891fdb9cc
James Ko [Wed, 23 Nov 2016 01:57:09 +0000 (20:57 -0500)]
Change argument order.
Commit migrated from https://github.com/dotnet/coreclr/commit/
90acd4db0824f6d5c3e0739c450bfb429b6b8955
Carol Eidt [Thu, 27 Oct 2016 16:37:40 +0000 (09:37 -0700)]
x86: not all fields of promoted struct need regs
This fixes DevDiv bug 278375, and includes a test case. It also improves the code generation for the general case of promoted structs, though tuning is still needed.
The bug was a case where, after decomposing the long fields, we had 7 entries in the GT_FIELD_LIST, each of which was requesting a register.
Since Lowering won't know which fields may be in registers, it must be prepared to handle fields in memory. Also, if the fields are not register candidates, we should make them contained and push them directly, for which we may need a temporary register.
LSRA is changed to allow RegOptional spills that are used at the same location of the register being allocated. This exposed an issue with a spilled constant being treated as a contained constant (causing an assert because it is not encodable).
Change codegen to use push for promoted structs (they are generally small-ish, and pushes of lclVars and constants are cheaper than loading into a register).
This could be optimized for consecutive float or double fields.
In the process of running jitStressRegs, I found that a test was throwing an exception but reporting success. I fixed the issue causing the exception and also changed the test to report failure if an exception is thrown.
Also, on x86, GT_UMOD requires op2 to be in a register, so Lowering must not mark it as RegOptional.
Commit migrated from https://github.com/dotnet/coreclr/commit/
900445d95ee524b663e1eb859bca890e6d6eb517
SaeHie Park [Tue, 22 Nov 2016 23:24:20 +0000 (08:24 +0900)]
[x86/Linux] Fix stdcall calling convention ignored on variadic function (dotnet/coreclr#8252)
WIP, fix compile error for x86/Linux
- fix to use STDMETHODVCALLTYPE
Commit migrated from https://github.com/dotnet/coreclr/commit/
e8989c1a75588dede93fcd5e0db173044a850b74
Jeremy Kuhne [Tue, 22 Nov 2016 23:23:59 +0000 (15:23 -0800)]
Add missing Path methods to model.xml (dotnet/coreclr#8257)
Commit migrated from https://github.com/dotnet/coreclr/commit/
0ba3dfb8037e7e22aed977c90dd4d1dc42e372e6
Gaurav Khanna [Tue, 22 Nov 2016 23:04:50 +0000 (15:04 -0800)]
Merge pull request dotnet/coreclr#8244 from seanshpark/x86pal01
[x86/Linux] Fix compilation in pal and context header
Commit migrated from https://github.com/dotnet/coreclr/commit/
9395bf4842c1b0a9fe6db6b5de9de4e50ddea680
James Ko [Tue, 22 Nov 2016 22:20:46 +0000 (17:20 -0500)]
Respond to feedback
Commit migrated from https://github.com/dotnet/coreclr/commit/
21b2c8d9b5eaa19df16f3a8935b9ffe4436dc300
Pat Gavlin [Tue, 22 Nov 2016 19:42:53 +0000 (11:42 -0800)]
Merge pull request dotnet/coreclr#8254 from pgavlin/FixTestBuild
Fix the test build.
Commit migrated from https://github.com/dotnet/coreclr/commit/
965e50d7ee6f860fd71d40dd74af74b87dcc930b
Pat Gavlin [Tue, 22 Nov 2016 18:05:58 +0000 (10:05 -0800)]
Fix the test build.
PR dotnet/coreclr#8032 disabled the test build for all but one test. This change fixes
this oversight.
Commit migrated from https://github.com/dotnet/coreclr/commit/
c862c4743b41c1a2150aa4a33e87a56e164c7e65
Pat Gavlin [Tue, 22 Nov 2016 17:43:44 +0000 (09:43 -0800)]
Merge pull request dotnet/coreclr#8253 from JosephTremoulet/SwitchCopy
Remove bogus "fast path" in unroller branch update
Commit migrated from https://github.com/dotnet/coreclr/commit/
3c2d0a200bf3ca46d1642ceaa57daa37a19c6ee9
Pat Gavlin [Tue, 22 Nov 2016 17:36:08 +0000 (09:36 -0800)]
Merge pull request dotnet/coreclr#8210 from mikedn/warn-test
Fix warnings in native test code
Commit migrated from https://github.com/dotnet/coreclr/commit/
fccd99d030b711a2be557a1a361e87981bcc7a96
Pat Gavlin [Tue, 22 Nov 2016 17:35:13 +0000 (09:35 -0800)]
Merge pull request dotnet/coreclr#8242 from pgavlin/gh8232
Always nullcheck VSD tail calls on x86.
Commit migrated from https://github.com/dotnet/coreclr/commit/
7537e8f0282f3d64b7dcc2a1877dcde7cd334738
Joseph Tremoulet [Tue, 22 Nov 2016 16:59:29 +0000 (08:59 -0800)]
Remove bogus "fast path" in unroller branch update
BasicBlocks whose `bbJumpKind` doesn't make use of `bbJumpDest` may have
arbitrary garbage in their `bbJumpDest` field, so remove the code from
loop unrolling that was expecting such blocks to have null `bbJumpDest`s,
and instead always defer to the `optCopyBlkDest`/`optRedirectBlock`
helpers that check the jump kind before checking the jump dest.
Fixes dotnet/coreclr#8231.
Commit migrated from https://github.com/dotnet/coreclr/commit/
9130174cbef365c84b48002d6899f3ea9ec55df4
Ian Hays [Tue, 22 Nov 2016 16:38:12 +0000 (08:38 -0800)]
Merge pull request dotnet/coreclr#8233 from ianhays/api_lockunlock
Add Unix FileStream Lock/Unlock code.
Commit migrated from https://github.com/dotnet/coreclr/commit/
7faacd90b77514c4a07ba74fd221d0d968f89135
Carol Eidt [Tue, 22 Nov 2016 16:17:24 +0000 (08:17 -0800)]
Merge pull request dotnet/coreclr#8247 from CarolEidt/Fix288222
Set the size of SIMD this pointer
Commit migrated from https://github.com/dotnet/coreclr/commit/
ebfb39bc1b8f82e3c8ae5746af7ac51502f9a747
Pat Gavlin [Tue, 22 Nov 2016 16:12:17 +0000 (08:12 -0800)]
PR feedback.
Commit migrated from https://github.com/dotnet/coreclr/commit/
d50f349d80b7e05421233f9085422963b4b78ec2
Sven Boemer [Tue, 22 Nov 2016 15:32:33 +0000 (07:32 -0800)]
Merge pull request dotnet/coreclr#8032 from sbomer/dasm_automation
Jit-diff automation
Commit migrated from https://github.com/dotnet/coreclr/commit/
1df25fe82c2d82d8cd728dd457d305c767d6510f
SaeHie Park [Tue, 22 Nov 2016 12:55:26 +0000 (21:55 +0900)]
[x86/Linux] fix and add for x86 cmake configuration (dotnet/coreclr#8219)
This patch will add x86 part for cross build
- add x86 in build-rootfs and related cross files
- add x86 parts in CMakeLists.txt to pass configuration
- add required source files to pass configuration
Commit migrated from https://github.com/dotnet/coreclr/commit/
d4b1a7473dcaa7ed9ead85ce3ff0fb39e1d5059f
SaeHie Park [Tue, 22 Nov 2016 02:22:16 +0000 (11:22 +0900)]
[x86/Linux] Fix compilation in pal
WIP, fix compile error for x86/Linux
- add KNONVOLATILE_CONTEXT_POINTERS
- add _X86_ codes in pal/context.h
Commit migrated from https://github.com/dotnet/coreclr/commit/
99586d9d3f77914758a934d69988ed9756fa98fc
Carol Eidt [Tue, 22 Nov 2016 02:58:40 +0000 (18:58 -0800)]
Set the size of SIMD this pointer
When setting the SIMD type of a "this" pointer,
we need to capture the size of the SIMD type.
This was previously being set in a method in simd.cpp,
but when the SIMD type recognition was moved
earlier in the JIT, it was omitted.
This caused an assert in the case where a fixed-size
SIMD type is handled by `fgMorphCombineSIMDFieldAssignments()`.
Fixes bug 288222
Commit migrated from https://github.com/dotnet/coreclr/commit/
13d9b9f08cebb57567838b1ddf1c4f4477961e50
Pat Gavlin [Tue, 22 Nov 2016 00:53:59 +0000 (16:53 -0800)]
Merge pull request dotnet/coreclr#8213 from mikedn/assert-dup-produce
Detect duplicate calls to genProduceReg
Commit migrated from https://github.com/dotnet/coreclr/commit/
b78b71f220ccb28eb6a5f9ea903536bdb6cd3f3d
Pat Gavlin [Tue, 22 Nov 2016 00:48:04 +0000 (16:48 -0800)]
Merge pull request dotnet/coreclr#8206 from pgavlin/DivModLowerAndNewTempAssignIssues
Fix two bugs revealed during internal testing.
Commit migrated from https://github.com/dotnet/coreclr/commit/
387e33117b200ff79c075ae0dec94b4e4c16d2ab
Pat Gavlin [Tue, 22 Nov 2016 00:39:21 +0000 (16:39 -0800)]
Always nullcheck VSD tail calls on x86.
This is a requirement of the runtime ABI: failing to perform this check
causes the runtime to AV in the virtual dispatch stub and crash.
Commit migrated from https://github.com/dotnet/coreclr/commit/
59726b88a36be8017c61c98f8c900d3d0380b650
Pat Gavlin [Tue, 22 Nov 2016 00:23:37 +0000 (16:23 -0800)]
Merge pull request dotnet/coreclr#8235 from pgavlin/VSO280127
Do not treat certain calls as intrinsics for RyuJIT/x86.
Commit migrated from https://github.com/dotnet/coreclr/commit/
fcf8c0a4a646d874285db0c50d5e70122e568d7b
Joseph Tremoulet [Tue, 22 Nov 2016 00:09:22 +0000 (19:09 -0500)]
Merge pull request dotnet/coreclr#8185 from JosephTremoulet/ReturnAsplode
Curtail loop unroller epliog generation
Commit migrated from https://github.com/dotnet/coreclr/commit/
f67e79ae1c36c3dc4e6a4b13216e98fdeb0e16c3
Sasha Semennikov [Mon, 21 Nov 2016 23:46:08 +0000 (15:46 -0800)]
Merge pull request dotnet/coreclr#8122 from alsemenn/add_debuggertests_build
Add debuggertests build
Commit migrated from https://github.com/dotnet/coreclr/commit/
89a083b5b88f5388359294431ec9d7985ac2099f
Sven Boemer [Fri, 28 Oct 2016 19:55:57 +0000 (12:55 -0700)]
Enable jit disasm in test scripts
This change adds a section to the generated bash/cmd scripts for each
test that will run jit-dasm on the test dll when runtests is invoked
with the jitdasm flag.
Also begin updating netci.groovy to support jit-diff scenario.
Other minor fixes:
- Add corefxlab feed for System.CommandLine test dependency
Without this, restoring the test dependencies retrieved an obsolete
package of the same name from nuget.org.
- Skip jit-diff job generation for arm
This fixes an assert that was checking that we are in the default
scenario on arm.
- Fix an assert in netci.groovy
- Add branch that skips non-checked configurations for jitdiff scenario.
- Fix some dasm failures and a typo in dasm job name
- Some jit-dasm runs were failing because the dependencies in the
current directory wasn't included in the arguments.
- Escape argument to jit-dasm
- increase timeout for jit-diff job
- Put PR job under a trigger, and some temporary changes for testing
- Make PR trigger look for comment
- Update Newtonsoft.Json version for compatibility with cijobs
- Update cijobs version for retrieving job by commit
- Temporarily run only one test
- Archive raw dasm output instead of zip
- Remove pr-specific logic, enable framework dasm
- Remove windows System.Private.CoreLib.ni.dll from test overlay
The new test runtime dependencies were placing
System.Private.CoreLib.ni.dll in the core_root directory, which resulted
in the native image for windows being placed in the coreoverlay
directory. We already had similar logic handling this case for
mscorlib.ni.dll.
This change also fixes the framework dasm output directory to match the
test dasm output directory, and fixes some typos in the generated .sh
files for running dasm on linux.
- Add dasm archiving on non-windows jobs
- Use core_root in bash scripts
Commit migrated from https://github.com/dotnet/coreclr/commit/
37139ef1a7631e618ee587287b48d49dad04be94
Pat Gavlin [Mon, 21 Nov 2016 21:25:49 +0000 (13:25 -0800)]
Do not treat certain calls as intrinsics for RyuJIT/x86.
On x86 RyuJIT, importing intrinsics that are implemented as user calls
can cause incorrect calculation of the depth of the stack if these
intrinsics are used as arguments to another call. This causes bad code
generation for certain EH constructs. Instead of implementing these
intrinsics as intrinsics, simply import them as calls.
Commit migrated from https://github.com/dotnet/coreclr/commit/
2e210ce935a31268a02b52a10be69bc5e951071c
Russell C Hadley [Mon, 21 Nov 2016 20:54:46 +0000 (12:54 -0800)]
Merge pull request dotnet/coreclr#8106 from mikedn/magic-div
Move magic division optimization from morph to lowering
Commit migrated from https://github.com/dotnet/coreclr/commit/
d92a1ce6f6e76a431263b4acf1d152664d0d8703
Michelle McDaniel [Mon, 21 Nov 2016 18:48:05 +0000 (10:48 -0800)]
Merge pull request dotnet/coreclr#8208 from adiaaida/fixShiftDecomp
Fix ordering of operands on GT_RSZ
Commit migrated from https://github.com/dotnet/coreclr/commit/
2586931da13c1c30100f999905ae356d6fd6cfa1
Pat Gavlin [Mon, 21 Nov 2016 18:38:17 +0000 (10:38 -0800)]
Address PR feedback.
Commit migrated from https://github.com/dotnet/coreclr/commit/
415e771702a0891000acc1b2b38cf790ac254feb
Joseph Tremoulet [Thu, 17 Nov 2016 23:46:37 +0000 (15:46 -0800)]
Curtail loop unroller epliog generation
The Jit32 GC encoder puts a hard limit on the number of epilogs (at 4); in
this configuration, avoid unrolling any loops containing enough BBJ_RETURN
blocks to push us over that limit, the same way loop cloning is limited.
Also remove an unnecessary loop flag update to set DONT_UNROLL on some
unprofitable loops -- the loop unroller logic has been rearranged to avoid
reprocessing loops in the first place.
Fixes dotnet/coreclr#8179.
Commit migrated from https://github.com/dotnet/coreclr/commit/
3d93e41799ea6a1210d8c58ffdda1e148be2f54e
Joseph Tremoulet [Mon, 21 Nov 2016 16:15:14 +0000 (08:15 -0800)]
Use SET_EPILOGCNT_MAX named constant
Instead of a hard-coded "4".
Commit migrated from https://github.com/dotnet/coreclr/commit/
39ea8e96971db409c3b3484589754e87f25af33e
Joseph Tremoulet [Thu, 17 Nov 2016 23:18:35 +0000 (15:18 -0800)]
Fix overflow check in unroll cost calculation
Perform the subtraction on signed rather than unsigned ints; if the unroll
size is actually smaller than the fixed size estimate, unrolling is
profitable.
Commit migrated from https://github.com/dotnet/coreclr/commit/
40bdd215764788bf1e4442c14900210255915a34
Stephen Toub [Mon, 21 Nov 2016 16:09:16 +0000 (11:09 -0500)]
Merge pull request dotnet/coreclr#8216 from stephentoub/asynclocal_allocs
Improve AsyncLocal throughput and memory usage
Commit migrated from https://github.com/dotnet/coreclr/commit/
71f3a03cf9019b03d1c69438a034e3bfb426cb41
Jan Vorlicek [Mon, 21 Nov 2016 15:22:45 +0000 (16:22 +0100)]
Remove unsafe banned functions (dotnet/coreclr#8162)
This change removes _snwprintf, _snprintf and _vsnwprintf usage from CoreCLR and
their implementations from PAL.
PAL exposes their secure variants instead and CoreCLR now uses those instead.
I have also removed the StringCchPrintfA/W, StringCchVPrintfA/W, StringCbVPrintfA/W,
StringCbPrintfA/W, StringCbPrintfExA/W, StringCchVPrintfExA/W, StringCbVPrintfExA/W
and StringCchPrintfExA/W replaced their usage by the secure variants of the sprintf
functions, since they were used at only few places and implementing all of the variants
using the secure sprintf variants would be a hassle.
I also needed to fix a missing support for size modifiers for %p formatting character
and for wide characters / strings in the secure sprintf functions that was revealed
by the PAL tests.
I have also removed a bunch of PAL tests that were using %n formatting character which
was not implemented since it is considered unsafe and translated PAL tests that were using
the removed functions to use the safe variants of those.
Commit migrated from https://github.com/dotnet/coreclr/commit/
716cb7ea87e40abb4b106df55af7ff4666170296
Stephen Toub [Mon, 21 Nov 2016 12:36:15 +0000 (07:36 -0500)]
Address PR feedback
- Delete !FEATURE_CORECLR code from ExecutionContext
- Add support for downgrading between map types when values are set to null
- Change ManyElementAsyncLocalValueMap.Set to size the dictionary based on whether the key is in the existing map
Commit migrated from https://github.com/dotnet/coreclr/commit/
bc8d6117d76d6e359aaaecad99415c8d96576e3d
mikedn [Mon, 21 Nov 2016 02:08:45 +0000 (06:08 +0400)]
Fix "method has no body, 'ret' emitted" warning (dotnet/coreclr#8212)
Commit migrated from https://github.com/dotnet/coreclr/commit/
3c3ab1a269a48b81c2a57e55da76b7e5f0f24eb9
Carol Eidt [Mon, 21 Nov 2016 02:07:10 +0000 (18:07 -0800)]
Merge pull request dotnet/coreclr#8057 from CarolEidt/StructOpts2
Enable optimization of structs
Commit migrated from https://github.com/dotnet/coreclr/commit/
c51e3e7f4c0c4175906ecff3811a230f21f3d613
Stephen Toub [Sun, 20 Nov 2016 22:25:47 +0000 (17:25 -0500)]
Improve AsyncLocal throughput and memory usage
ExecutionContext stores an immutable dictionary used to hold the values of all AsyncLocal instances associated with that context. Reading an AsyncLocal.Value looks up a value in the dictionary, keyed by the AsyncLocal instance. Writing an AsyncLocal.Value creates a new dictionary with the contents of the old one and then sets the new pair into it. For small numbers of AsyncLocal instances, this adds a lot of overhead.
This commit adds a new internal IAsyncLocalValueMap interface that's used instead of Dictionary. It then provides several concrete implementations of that interface, for 1 pair, 2 pairs, 3 pairs, up to 16 pairs, and then up to any number of pairs. The first three implementations are optimized for those sizes, while the one for up to 16 uses an array, and the one for beyond that is just a Dictionary.
Commit migrated from https://github.com/dotnet/coreclr/commit/
29b13d32fc84d040e0771bd391a4d99503a0d7bc
Mike Danes [Sun, 20 Nov 2016 16:45:59 +0000 (18:45 +0200)]
Detect duplicate calls to genProduceReg
Commit migrated from https://github.com/dotnet/coreclr/commit/
1cbe5be8b8dd11c5d4be3ce0ca18ac80ce144fb7
Peter Marcu [Sun, 20 Nov 2016 07:37:51 +0000 (23:37 -0800)]
Fixing arm subsystem version (dotnet/coreclr#8211)
Commit migrated from https://github.com/dotnet/coreclr/commit/
fc3607f054a595e2c1a2ddea1171cbadb39b0a3a
Dan Moseley [Sat, 19 Nov 2016 18:24:21 +0000 (10:24 -0800)]
Generic Dictionary - add constructor that accepts IEnumerable
Generic Dictionary - add constructor that accepts IEnumerable
Commit migrated from https://github.com/dotnet/coreclr/commit/
198bdf53c0590bda08b9b8e1ede1270fc9a8afc1
Mike Danes [Sat, 19 Nov 2016 09:18:58 +0000 (11:18 +0200)]
Fix warnings in native test code
Commit migrated from https://github.com/dotnet/coreclr/commit/
c795cf5d3c03597f5c75b0cc08ff381cc414b039
Robert Matusewicz [Thu, 17 Nov 2016 09:37:43 +0000 (09:37 +0000)]
Add System.Collections.Generic.Dictionary constructor that accepts
IEnumerable<KeyValyePair<TKey, TValue>> to initialize dictionary
Commit migrated from https://github.com/dotnet/coreclr/commit/
e08c2d4bdaf5e211a31303f271a4f11b2223ad7a
Carol Eidt [Wed, 9 Nov 2016 17:09:49 +0000 (09:09 -0800)]
Reinstate the struct optimization changes:
Remove many of the restrictions on structs that were added to preserve behavior of the old IR form.
Change the init block representation to not require changing the parent when a copy block is changed to an init.
In addition, fix the bug that was causing the corefx ValueTuple tests to fail. This was a bug in assertion prop where it was not invaliding the assertions about the parent struct when a field is modified. Add a repro test case for that bug.
Incorporate the fix to dotnet/coreclr#7954, which was encountered after the earlier version of these changes. This was a case where we reused a struct temp, and then it wound up eventually getting assigned the value it originally contained, so we had V09 = V09. This hit the assert in liveness where it wasn't expecting to find a struct assignment with the same lclVar on the lhs and rhs. This assert should have been eliminated with the IR change to struct assignments, but when this situation arises we may run into issues if we call a helper that doesn't expect the lhs and rhs to be the same. So, change morph to eliminate such assignments.
Commit migrated from https://github.com/dotnet/coreclr/commit/
aa676e8b01b29942e82c58011b0e183f923ff2bc
Michelle McDaniel [Fri, 18 Nov 2016 22:12:30 +0000 (14:12 -0800)]
Fix ordering of operands on GT_RSZ
By removing hiOp1 and loOp1 from LIR and then putting them back in, we
inadvertantly reversed the order of operations for high and lo. This is an
issue when op1 is a long add or sub where the order of operations is
important.
Fixes 8171.
Commit migrated from https://github.com/dotnet/coreclr/commit/
781cfb16ea8dfddd77953cdc107cee9e7dd50d79
Pat Gavlin [Fri, 18 Nov 2016 21:30:24 +0000 (13:30 -0800)]
Fix two bugs revealed during internal testing.
- gtNewTempAssign was unnecessarily creating a new node to represent the
value being assigned to a temp if the value was a normalize-on-load
lclVar. This caused problems when using `gtNewTempAssign` as part of
`LIR::Use::ReplaceWithLclVar`, which assumes that `gtNewTempAssign`
only creates a single node (the new `st.lclVar` node). Instead of
creating a new lclVar node, simply change the type of the existing
node.
- LowerSignedDivOrMod contained an unnecessarily strong assertion. This
assertion has been removed.
Commit migrated from https://github.com/dotnet/coreclr/commit/
aab69a3bb42398384d60962f331158e1e3e908c1
Jarret Shook [Fri, 18 Nov 2016 21:28:31 +0000 (13:28 -0800)]
Merge pull request dotnet/coreclr#8180 from jashook/arm64_lst_update
Update the lst file to exclude failing tests.
Commit migrated from https://github.com/dotnet/coreclr/commit/
f4b527dfb2ed02e268e4f1d5318fa79053ede064
Pat Gavlin [Fri, 18 Nov 2016 21:19:29 +0000 (13:19 -0800)]
Merge pull request dotnet/coreclr#8097 from pgavlin/VSO279396
Do not fold (ind (addr (lclVar))) in certain cases.
Commit migrated from https://github.com/dotnet/coreclr/commit/
2c53985424e578b2f5b011d354f6ccb971e81c73
Jan Kotas [Fri, 18 Nov 2016 21:03:01 +0000 (13:03 -0800)]
Delete dead files (dotnet/coreclr#8202)
Commit migrated from https://github.com/dotnet/coreclr/commit/
13ee34fc2c5cdff0bf8effb04fe870ac82c46ff1
Sean Gillespie [Fri, 18 Nov 2016 20:57:38 +0000 (12:57 -0800)]
Add CI job and build.cmd command for building with FEATURE_STANDALONE_GC (dotnet/coreclr#8183)
* Add CI job and build.cmd command for building with FEATURE_STANDALONE_GC
* Add missed case
* Correct a condition
* Accidental fallthrough in switch
* Only run on x64
Commit migrated from https://github.com/dotnet/coreclr/commit/
ecc468cf683513a2c3e1635f7abcdb06101eec38
jashook [Thu, 17 Nov 2016 18:18:24 +0000 (10:18 -0800)]
Update the lst file to exclude failing tests.
These are new regressions that were introduced during CI downtime.
Commit migrated from https://github.com/dotnet/coreclr/commit/
aaead2060f01165a29c92b1f5d30e7ead2d05cd6
José Rivero [Fri, 18 Nov 2016 19:24:07 +0000 (11:24 -0800)]
Organizing the perflab tests under a common namespace. (dotnet/coreclr#8184)
- These changes adds a hierarchy to the perflab tests under BenchView.
Commit migrated from https://github.com/dotnet/coreclr/commit/
c48d0320f6bccc9da93b5aefb576f0ac2692c446
Ian Hays [Fri, 18 Nov 2016 18:50:17 +0000 (10:50 -0800)]
Update with corefx PR changes
Commit migrated from https://github.com/dotnet/coreclr/commit/
cbe5f4b7cbbd4d04e9903afbd46981e105973e53
Pat Gavlin [Fri, 18 Nov 2016 18:46:46 +0000 (10:46 -0800)]
Merge pull request dotnet/coreclr#8198 from pgavlin/GH8170
Fix codegen for `(umod (gt_long) (const int))`.
Commit migrated from https://github.com/dotnet/coreclr/commit/
4807a27422964b3ae7fca2deca2afb3d1b383594
Pat Gavlin [Fri, 18 Nov 2016 06:37:17 +0000 (22:37 -0800)]
Fix codegen for `(umod (gt_long) (const int))`.
When targeting x86, we opt not to use a helper call to implement the
64-bit unsigned modulus operator if we have a tree of either of the
following forms:
- `(umod ulong (x ulong) (cast ulong (const int const_val)))`
- `(umod ulong (x ulong) (const ulong const_val))`
where `const_val` falls in the range `[2, 0x3fffffff]`.
We eventually decompose this into `(umod uint (gt_long lo hi) (const int const_val))`.
This was then emitted as:
mov eax, lo
mov edx, hi
mov reg, const_val
div edx:eax reg
Unfortunately, this generated code does not take into account the fact
that the result of the modulus may not fit into 32 bits. This can cause
an overflow exception at runtime despite the fact that the modulus
originally produced a 64-bit result.
This change fixes the code generation to check for overflow before
performing the modulus and perform a 64-bit division if the result would
overflow. This results in generated code like the following:
mov eax, lo
mov edx, hi
mov reg, const_val
cmp edx, reg
jb noOverflow
mov temp, eax
mov edx, eax
xor edx, edx
div edx:eax, const_val
mov eax, temp
noOverflow:
div edx:eax, const_val
Which is identical to the code produced by JIT32 and the legacy backend.
Commit migrated from https://github.com/dotnet/coreclr/commit/
7e00ee6be9590670d060117fd3932808bd7a86e6
Pat Gavlin [Fri, 18 Nov 2016 16:02:12 +0000 (08:02 -0800)]
Merge pull request dotnet/coreclr#8194 from AndyAyersMS/FixMismatchTests
Revise mismatch tests so they don't rely on undefined behavior
Commit migrated from https://github.com/dotnet/coreclr/commit/
4f8ba1e05e53e40a52fd66d7660efa8a992da9a9
mikedn [Fri, 18 Nov 2016 14:19:12 +0000 (18:19 +0400)]
Add missing Arg_BadDecimal resource string (dotnet/coreclr#8197)
Commit migrated from https://github.com/dotnet/coreclr/commit/
85b73ed0ea01d487b9458548082ae613c95f7ddd
Russ Keldorph [Fri, 18 Nov 2016 11:11:09 +0000 (03:11 -0800)]
Merge pull request dotnet/coreclr#8178 from adiaaida/excludeHeapVerify
Exclude tests that timeout with HeapVerify
Commit migrated from https://github.com/dotnet/coreclr/commit/
c173ac0bbb0d7c3518541334d72ecd42619915a9
Pat Gavlin [Fri, 18 Nov 2016 04:37:50 +0000 (20:37 -0800)]
Merge pull request dotnet/coreclr#8187 from pgavlin/gh8150
Fix the transformation of `(call ARRADDR_ST x, y, null)`.
Commit migrated from https://github.com/dotnet/coreclr/commit/
f261bb509b615a80215f59d26277ed50b877c8fc
Dan Moseley [Fri, 18 Nov 2016 03:39:43 +0000 (19:39 -0800)]
Type sigs (dotnet/coreclr#8191)
Commit migrated from https://github.com/dotnet/coreclr/commit/
51ccb89389d0fd314e9090ec1d9108670041494a
Sivarv [Fri, 18 Nov 2016 03:24:12 +0000 (19:24 -0800)]
Merge pull request dotnet/coreclr#8182 from mikedn/x86-cmp-long-linqmax
Fix x86 long compares that produce a result
Commit migrated from https://github.com/dotnet/coreclr/commit/
eb4920aeb75f40ee5029c5ad1c30545a02006ee3
Pat Gavlin [Fri, 18 Nov 2016 02:58:06 +0000 (18:58 -0800)]
Format code.
Commit migrated from https://github.com/dotnet/coreclr/commit/
2ae5c001a1c3bd99e7c81796da1e63f76d4163cd
Andy Ayers [Fri, 18 Nov 2016 00:06:46 +0000 (16:06 -0800)]
Revise mismatch tests so they don't rely on undefined behavior
The mismatch32 and mismatch64 tests ensure that the jit will avoid
inlining in cases where there are bad type mismatches at call sites.
This change modifies the tests so that by default the call with the
bad type mismatch is not hit at runtime, since execution of this code
exposes undefined behavior that can be arch or jit specific (eg failing
on x86 and passing on other architectures).
The problematic call can still be hit at runtime by passing at least one
command line argument.
Remove the associated test exclusions for x86.
Fixes dotnet/coreclr#8152.
Commit migrated from https://github.com/dotnet/coreclr/commit/
021f775b3a7aae7557304dae80496519bb50fb55
Pat Gavlin [Thu, 17 Nov 2016 23:49:49 +0000 (15:49 -0800)]
Fix the transformation of `(call ARRADDR_ST x, y, null)`.
`fgMorphCall` transforms `(call ARRADDR_ST x, y, null)` into
`(assign (arrindex x y) null)`. The transformation was not taking into
account the fact that the operands to the call might have been spilled
to temps, and was therefore silently dropping code in the case that they
had been.
This change collects all argument setup nodes in `gtCallArgs` in a
sequence of comma nodes if any exist and attaches the assignment
expression as the ultimate LHS of the comma tree.
Fixes dotnet/coreclr#8150.
Commit migrated from https://github.com/dotnet/coreclr/commit/
f997866be19aa7086e75def295392cc69a76fd4d
Ian Hays [Thu, 17 Nov 2016 23:36:31 +0000 (15:36 -0800)]
Add Unix FileStream Lock/Unlock
Implements FileStream Lock/Unlock by calling the SystemNative functions for fcntl F_SETLK
Commit migrated from https://github.com/dotnet/coreclr/commit/
233c58ca964e15e6ce1e756940ec59819d797edf
Michelle McDaniel [Thu, 17 Nov 2016 17:16:28 +0000 (09:16 -0800)]
Exclude tests that timeout with HeapVerify
Commit migrated from https://github.com/dotnet/coreclr/commit/
4193615add8777e351893ae81e321af93dee2035
Jeremy Kuhne [Thu, 17 Nov 2016 21:51:43 +0000 (13:51 -0800)]
Use CoreFX Path code (dotnet/coreclr#8132)
* Use CoreFX Path code
This is to address consistency and perf issues by moving the Path
code down to CoreCLR. It is more of an issue with Windows as
normalization requires complicated logic and costly platform calls.
* Delete unused files and avoid Unix crypto lib
* Address feedback, fix bug
Remove Unix crypto files and ifdef out usages completely.
Fix issue with static initialization of PathInternal.
* Use TriState to initialize case sensitivity
Commit migrated from https://github.com/dotnet/coreclr/commit/
204f6e8859e3676114c85f49b8d2c311458ac715
Mike Danes [Thu, 17 Nov 2016 21:15:26 +0000 (23:15 +0200)]
Fix x86 long compares that produce a result
Remove the duplicate genProduceReg call. Also remove an unnecessary movzx.
Commit migrated from https://github.com/dotnet/coreclr/commit/
fca7e09e50bd20ed1917fd88dff390ad8c8acafc
Andy Ayers [Thu, 17 Nov 2016 18:52:06 +0000 (10:52 -0800)]
Inliner: updates to RandomPolicy (dotnet/coreclr#8128)
Fix issues with RandomPolicy setup in release builds with -DINLINE_DATA.
Reparent RandomPolicy on top of DiscretionaryPolicy to enable inline
data dumps from random inline runs. Remove some now-unneeded overrides.
Add a full dump mode to JitInlineDumpData that reports the inliner-visible
data for all inlines, as opposed to inliner-visible and post-inline
data for just the most recent inline. Small mods to the dumper code to
adjust comma placement for this new mode.
Have the RandomPolicy make the full set of profitability observations
for each accepted inline so they can be dumped.
Commit migrated from https://github.com/dotnet/coreclr/commit/
db81622ed195624591e2151c4f2a009ddffef29e
Sivarv [Thu, 17 Nov 2016 18:19:11 +0000 (10:19 -0800)]
Merge pull request dotnet/coreclr#8138 from sivarv/rmwFix
Do not generate "inc/dec [mem]" when asked to generate debuggable code.
Commit migrated from https://github.com/dotnet/coreclr/commit/
ae29fa880afb6a0043941800c2b29b2a1024d137
Dan Moseley [Thu, 17 Nov 2016 17:27:09 +0000 (09:27 -0800)]
Tweak params of Console
This isn't the implementation of Console we ship, apparently it's only here for CLR tests, or maybe shouldn't be at all. Just tweaking the param names to match what we ship so it doesn't show up in the diffs.
Commit migrated from https://github.com/dotnet/coreclr/commit/
d6e198c266d68dce6296572e51a20289f8164c84
Pat Gavlin [Thu, 17 Nov 2016 16:47:27 +0000 (08:47 -0800)]
Address PR feedback.
Commit migrated from https://github.com/dotnet/coreclr/commit/
c30cd2b84608cc855cf0603c268fb126665b42a4
Michelle McDaniel [Thu, 17 Nov 2016 16:36:21 +0000 (08:36 -0800)]
Merge pull request dotnet/coreclr#8151 from adiaaida/enableTests
Remove test exclusions for tests that now pass
Commit migrated from https://github.com/dotnet/coreclr/commit/
13f1598437a42a2abec1be6bc4e0776ef4d00147
Dan Moseley [Thu, 17 Nov 2016 04:21:12 +0000 (20:21 -0800)]
Add RuntimeHelpers.Equals
Fix dotnet/corefxdotnet/coreclr#13692
We added this to the ref in 19fa781 but it was not present in the impl. The tools didn't flag this perhaps because Equals is available on Object, although since this is a new it really ought to know it wasn't referring to the Object one.
Commit migrated from https://github.com/dotnet/coreclr/commit/
24ff0527361b6aa5026e6b7f8d4a189d3f595c65
danmosemsft [Thu, 17 Nov 2016 01:36:03 +0000 (17:36 -0800)]
Add RuntimeHelpers.Equals
Commit migrated from https://github.com/dotnet/coreclr/commit/
42e882cf4fcf2cf2689b142cccf5b91bdb95502e