David Mason [Thu, 28 Jul 2016 23:05:18 +0000 (16:05 -0700)]
Merge pull request #6480 from davmason/master
Merge changes with .net native.
The fix for DisposeOnShutdown is already in here, these are the changes that exist in ProjectN that are not in CoreCLR yet.
Jan Kotas [Thu, 28 Jul 2016 19:55:26 +0000 (12:55 -0700)]
Skip dummy null argument for string constructors under CoreRT ABI (#6498)
Russell C Hadley [Thu, 28 Jul 2016 13:13:31 +0000 (06:13 -0700)]
Merge pull request #6502 from russellhadley/errnoFix
Add errno.h to resolve (internal) build break
noahfalk [Thu, 28 Jul 2016 07:15:54 +0000 (00:15 -0700)]
Merge pull request #6278 from Dmitri-Botcharnikov/feature-gdbjit
[Linux] GDB JIT support for source line debug information.
Aditya Mandaleeka [Thu, 28 Jul 2016 04:29:36 +0000 (21:29 -0700)]
Fix a couple of paths related to exception codes. (#6497)
rhadley [Thu, 28 Jul 2016 00:34:51 +0000 (17:34 -0700)]
Add errno.h
Stephen Toub [Thu, 28 Jul 2016 00:32:15 +0000 (20:32 -0400)]
Merge pull request #6490 from KrzysztofCwalina/ConvertAll
Exposed List<T>.ConvertAll
Carol Eidt [Wed, 27 Jul 2016 22:43:43 +0000 (15:43 -0700)]
Merge pull request #6484 from CarolEidt/AssertionPropAsserts
Do not propagate bad assertions from unreachable blocks
KrzysztofCwalina [Wed, 27 Jul 2016 22:25:18 +0000 (15:25 -0700)]
Exposed List<T>.ConvertAll
John Chen [Wed, 27 Jul 2016 21:20:10 +0000 (14:20 -0700)]
Merge pull request #6489 from JohnChen0/master
Update CrossGen doc for "Unable to load Jit" error
Jan Kotas [Wed, 27 Jul 2016 21:16:02 +0000 (14:16 -0700)]
GC update from CoreRT (#6487)
https://github.com/dotnet/corert/tree/master/src/Native/gc
35d3eefeb4d14193433a103411526fa869321a82
David Mason [Tue, 26 Jul 2016 20:27:10 +0000 (13:27 -0700)]
porting changes from .net native to CoreCLR
Stephen Toub [Wed, 27 Jul 2016 19:51:59 +0000 (15:51 -0400)]
Merge pull request #6488 from stephentoub/add_objref_mscorlib
Add IObjectReference to mscorlib ref assembly
John Chen [Wed, 27 Jul 2016 19:30:58 +0000 (12:30 -0700)]
Update CrossGen doc for "Unable to load Jit" error
Carol Eidt [Fri, 22 Jul 2016 20:56:24 +0000 (13:56 -0700)]
Do not propagate bad assertions from unreachable blocks
Also ensure only valid assertions are utilized.
Stephen Toub [Wed, 27 Jul 2016 18:14:36 +0000 (14:14 -0400)]
Add IObjectReference to mscorlib ref assembly
Evgeny Pavlov [Wed, 27 Jul 2016 17:12:59 +0000 (21:12 +0400)]
[SOS][ARM/Linux] Enable clru SOS command (#6477)
* Enable clru SOS command on ARM/Linux
* Set thumb bit on ARM/Linux
James Ko [Wed, 27 Jul 2016 17:00:18 +0000 (13:00 -0400)]
Optimize the generic string.Join for length 1 collections (#6463)
* Optimize the generic string.Join for length 1 collections
* Keep the call order consistent: MoveNext-Current-ToString
* Convert to do..while loop to reduce code duplication
Stephen Toub [Wed, 27 Jul 2016 16:05:15 +0000 (12:05 -0400)]
Merge pull request #6486 from stephentoub/expose_updatevalue
Expose SerializationInfo.UpdateValue for corefx
Stephen Toub [Wed, 27 Jul 2016 14:24:06 +0000 (10:24 -0400)]
Expose SerializationInfo.UpdateValue for corefx
ObjectManager in corefx needs to access to SerializationInfo.UpdateValue, which is currently internal. We don't need to expose UpdateValue in a public contract (which would necessitate adding it to desktop), but by making it public we can give corefx the functionality it needs without needing to move a whole bunch more down from corefx into the runtime.
Evgeny Pavlov [Wed, 27 Jul 2016 13:27:17 +0000 (16:27 +0300)]
Add flag to check re-entrancy of JIT notification
Stephen Toub [Wed, 27 Jul 2016 13:05:17 +0000 (09:05 -0400)]
Merge pull request #6485 from stephentoub/iobjref_model
Add IObjectReference to model.xml
Stephen Toub [Wed, 27 Jul 2016 11:12:47 +0000 (07:12 -0400)]
Add IObjectReference to model.xml
And expose a couple of missing properties on SerializationInfo in the mscorlib facade.
Brian Sullivan [Wed, 27 Jul 2016 00:54:04 +0000 (17:54 -0700)]
Merge pull request #6467 from briansull/multireg-return2
Enable multireg returns on Arm64
Andy Ayers [Wed, 27 Jul 2016 00:42:37 +0000 (17:42 -0700)]
Merge pull request #6401 from AndyAyersMS/PropagateOptMethodFlags
Jit: fix issues with optMethodFlags
Rahul Kumar [Tue, 26 Jul 2016 23:49:30 +0000 (16:49 -0700)]
Merge pull request #6418 from rahku/crossgen
Do not insert gcstress interrupt instruction at call to JIT_RareDisab…
Brian Sullivan [Tue, 12 Jul 2016 20:52:20 +0000 (13:52 -0700)]
Enable multireg returns on Arm64
Added method IsMultiRegPassedType and updated IsMultiRegReturnType
Switched these methods to using getArgTypeForStruct and getReturnTypeForStruct
Removed IsRegisterPassable and used IsMultiRegReturned instead.
Converted lvIsMultiregStruct to use getArgTypeForStruct
Renamed varDsc->lvIsMultiregStruct() to compiler->lvaIsMultiregStruct(varDsc)
Skip calling getPrimitiveTypeForStruct when we have a struct larger than 8 bytes
Refactored ReturnTypeDesc::InitializeReturnType
Fixed missing SPK_ByReference case in InitializeReturnType
Fixes for RyiJIt x86 TYP_LONG return types and additional ARM64 work for full multireg support
Added ARM64 guard the uses of MAX_RET_MULTIREG_BYTES with FEATURE_MULTIREG_RET
Fixes for multireg returns in Arm64 Codegen
Added dumping of lvIsMultiRegArg and lvIsMultiRegRet in the assembly output
Added check and set of compFloatingPointUsed to InitializeStructReturnType
Fixes to handle JIT helper calls that say they return a TYP_STRUCT with no class handle available
Placed all of the second GC return reg under MULTIREG_HAS_SECOND_GC_RET ifdefs
Added the Arm64 VM changes from Rahul's PR 5175
Update getArgTypeForStruct for x86/arm32 so that it returns TYP_STRUCT for all pass by value cases
Fixes for the passing of 3,5,6 or 7 byte sized structs
Fix issue on ARM64 where we would back fill into x7 after passing a 16-byte struct on the stack
Implemented register shuffling for multi reg Call returns on Arm64
Fixed regression on Arm32 for struct args that are not multi regs
Updated Tests.Lst with 23 additional passing tests
Changes from codereview feedback
Stephen Toub [Tue, 26 Jul 2016 22:58:03 +0000 (18:58 -0400)]
Merge pull request #6481 from stephentoub/add_serialization_facade
Add serialization primitives to mscorlib facade
David Mason [Tue, 26 Jul 2016 20:10:20 +0000 (13:10 -0700)]
Use the correct call to get properties, DeclaredProperties does not return properties for a base class
Andy Ayers [Tue, 26 Jul 2016 21:19:20 +0000 (14:19 -0700)]
Rewrite gtIsVtableAccess to avoid assert
Calling `HasIndex` from `gtIsVtableAccess` can leads to asserts as the
underly code checks to see if the addressing sub-expressions are
contained. But earlyProp runs early enough that it is not concerned with
containment. The code just needs to verify that there is a ref type base
and no index. Rework the code to do the checks directly.
Stephen Toub [Tue, 26 Jul 2016 21:11:39 +0000 (17:11 -0400)]
Add serialization primitives to mscorlib facade
Russell C Hadley [Tue, 26 Jul 2016 19:38:40 +0000 (12:38 -0700)]
Merge pull request #6464 from russellhadley/HardenJitStartup
Harden stdout at startup
rhadley [Mon, 25 Jul 2016 17:40:27 +0000 (10:40 -0700)]
Harden stdout at startup
Check the results of the dup call to ensure that we're working with
a valid file handle. In the case where we aren't we leave the jitstdout
set to nullptr.
Jan Kotas [Tue, 26 Jul 2016 13:16:04 +0000 (06:16 -0700)]
Merge pull request #6473 from dotnet-bot/from-tfs
Merge changes from TFS
Gaurav Khanna [Tue, 26 Jul 2016 13:08:58 +0000 (06:08 -0700)]
Merge pull request #6472 from dotnet-bot/UpdateDependencies20160726051912
Updating External dependencies to beta-24326-00
Rama Krishnan Raghupathy [Tue, 26 Jul 2016 06:30:07 +0000 (23:30 -0700)]
Addressing arm64 build break due to old compiler
[tfs-changeset:
1619335]
dotnet-bot [Tue, 26 Jul 2016 05:19:12 +0000 (05:19 +0000)]
Updating External dependencies to beta-24326-00
Sung-Jae Lee [Tue, 26 Jul 2016 04:09:36 +0000 (13:09 +0900)]
Fix copy check condition for native interop test library. (#6468)
Geunsik Lim [Tue, 26 Jul 2016 03:59:47 +0000 (12:59 +0900)]
Linux/ARM: Fix +3000 bus errors of unit-test in case of O2/O3 levels (#6379)
**PROBLEM**
This patch is to resolve +3000 bus errors that are generated whenever we use
the aggressive optimization levels of clang (issue #5844 ).
When we enable the -O3 optimization level of the clang version(from clang 3.5
to clang 3.9(snapshot)), we have always got the lots of bus errors from the
coreCLR's unit tests. Actually, we can easily monitor SIGBUS signals (e.g.,
"misaligned memory access") with /proc/cpu/alignment facility in kernel space.
Using "echo 2 > /proc/cpu/alignment" makes Linux kernel fixes the problems
but the performance of the application will be degraded.
.source: http://lxr.free-electrons.com/source/Documentation/arm/mem_alignment
**VERSION 4**
. Use 'GET_UNALIGNED_VALXXX' macros in the CoreClr infra-structure without
any need for ifdefs.
**VERSION 3**
.Apply this PR on only Linux/ARM for different system environment (Windows).
Here is .NET CI Report on Windows: Compile Error
error C2146: syntax error: missing ';' before identifier '__unaligned_int32'
(compiling source file D:\j\workspace\checked_windo---
f6dc6fe4\src\jit\alloc.cpp)
[D:\j\workspace\checked_windo---
f6dc6fe4\bin\obj\Windows_NT.x64.Checked\src\jit\
crossgen\clrjit_crossgen.vcxproj] Indication 1
**VERSION 2**
.Add UNALIGNED_ARM macro for handling ARM core specific optimization levels.
.Add RISC-based ARM core handling into the existing infra-structure of the
platform adaptation layer (PAL) for aggressive optimization cases on Linux/ARM.
**VERSION 1**
Basically, RISC-based ARM architecture requires aligned access with 4byte reads.
In order to support aggressive optimization levels such as O2/O3, let's use
attribute keyword of aligned(1) instead of using memcpy(2) in into
a properly aligned buffer or the packing attribute.
**BACKGROUND**
According to ARM information center(infocenter.arm.com), By default,
the ARM compiler expects normal C and C++ pointers to point
to an aligned word in memory. A type qualifier __packed is provided to
enable unaligned pointer access. If you want to define a pointer to a word
that can be at any address (that is, that can be at a non-natural alignment),
you must specify this using the __packed qualifier when defining the pointer:
__packed int *pi; // pointer to unaligned int
However, clang/llvm does not support the __packed qualifier such as
__attribute__((packed)) or __attribute__((packed, aligned(4)))
In -O0 (debug build) the innermost block is emitted as the following assembly,
which works properly:
ldr r1, [r0, #24]
ldr r2, [r0, #20]
In -O3 (release build) however the compiler realizes these fields are adjacent
and generates this assembly:
ldrdeq r2, r3, [r0, #20]
Unfortunately, vldr/ldrdb instructions always generate an alignment fault
(in practice). It seems that clang uses ldrb instruction although GCC uses
ldr instruction because armv7 supports unaligned ldr instruction.
Note: If some arm architectures (e.g., Linux/ARM Emulator) does not support
unaligned ldr, this issue is not generated with aggressive optimization
levels (e.g., -O2 and -O3).
* Case study: How does the ARM Compiler support unaligned accesses?
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka15414.html
* Case study: Indicating unaligned access to Clang for ARM compatibility
http://stackoverflow.com/questions/
9185811/indicating-unaligned-access-to-clang-for-arm-compatibility
* Case study: Chromium source for UnalignedLoad32() on ARM
https://github.com/nwjs/chromium.src/blob/nw15/third_party/cld/base/basictypes.h#L302
Signed-off-by: Geunsik Lim <geunsik.lim@samsung.com>
Rama krishnan Raghupathy [Tue, 26 Jul 2016 03:36:53 +0000 (20:36 -0700)]
Merge pull request #6328 from ramarag/arm64debugger
Implementing Arm64 Debugger Requirements
Rahul Kumar [Fri, 22 Jul 2016 19:48:55 +0000 (12:48 -0700)]
Do not insert gcstress interrupt instruction at call to JIT_RareDisableHelper
Rama Krishnan Raghupathy [Tue, 19 Jul 2016 02:40:05 +0000 (19:40 -0700)]
Arm64: Debugger
Instruction emulation for Break Points
Debugger::FuncEvalSetup
NativeWalker
ExceptionHijack
Exception intercept
Managed Return Value
Vance Morrison [Mon, 25 Jul 2016 22:06:45 +0000 (15:06 -0700)]
Merge pull request #6156 from justinvp/activitytracker_tostring
Avoid string concat array allocation in ActivityTracker
Vance Morrison [Mon, 25 Jul 2016 22:00:29 +0000 (15:00 -0700)]
Merge pull request #6158 from justinvp/tracing_stringcomparison
Specify StringComparison.Ordinal in System.Diagnostics.Tracing
Stephen Toub [Mon, 25 Jul 2016 19:49:17 +0000 (15:49 -0400)]
Merge pull request #6461 from stephentoub/update_buildtools
Update BuildTools to 1.0.26-prerelease-00625-01
Stephen Toub [Mon, 25 Jul 2016 16:16:01 +0000 (12:16 -0400)]
Update BuildTools to 1.0.26-prerelease-00625-01
Gaurav Khanna [Mon, 25 Jul 2016 13:23:59 +0000 (06:23 -0700)]
Merge pull request #6456 from dotnet-bot/UpdateDependencies20160725083514
Updating CoreClr dependencies to beta-24325-02
Gaurav Khanna [Mon, 25 Jul 2016 13:23:29 +0000 (06:23 -0700)]
Merge pull request #6453 from dotnet-bot/UpdateDependencies20160725061810
Updating External dependencies to beta-24325-00
Shahid Khan [Mon, 25 Jul 2016 13:07:15 +0000 (18:07 +0500)]
[Documentation] Projects Use licences (#6442)
address feedback
Evgeny Pavlov [Mon, 25 Jul 2016 12:48:25 +0000 (15:48 +0300)]
Fix inlining of '__jit_debug_register_code' on ARM32 release build
dotnet-bot [Mon, 25 Jul 2016 08:35:13 +0000 (08:35 +0000)]
Updating CoreClr dependencies to beta-24325-02
dotnet-bot [Mon, 25 Jul 2016 06:18:10 +0000 (06:18 +0000)]
Updating External dependencies to beta-24325-00
Gaurav Khanna [Mon, 25 Jul 2016 04:19:33 +0000 (21:19 -0700)]
Merge pull request #6449 from dotnet-bot/UpdateDependencies20160725123214
Updating CoreClr dependencies to beta-24325-01
Bruce Forstall [Mon, 25 Jul 2016 04:13:19 +0000 (21:13 -0700)]
Merge pull request #6342 from BruceForstall/tailcall
RyuJIT/x86: implement tailcall via helper
dotnet-bot [Mon, 25 Jul 2016 00:32:14 +0000 (00:32 +0000)]
Updating CoreClr dependencies to beta-24325-01
Gaurav Khanna [Sun, 24 Jul 2016 21:39:06 +0000 (14:39 -0700)]
Merge pull request #6445 from dotnet-bot/UpdateDependencies20160724042519
Updating CoreClr dependencies to beta-24324-03
dotnet-bot [Sun, 24 Jul 2016 16:25:19 +0000 (16:25 +0000)]
Updating CoreClr dependencies to beta-24324-03
Gaurav Khanna [Sun, 24 Jul 2016 13:49:17 +0000 (06:49 -0700)]
Merge pull request #6443 from dotnet-bot/UpdateDependencies20160724082829
Updating CoreClr dependencies to beta-24324-02
Oleg Demchenko [Sun, 24 Jul 2016 12:08:51 +0000 (09:08 -0300)]
Fix up for grabs issues link in contributing workflow doc (#6437)
Current link to up for grabs issues for CoreCLR repository leads
to the empty list because there's not such label as "up for grabs"
(existing label name is "up-for-grabs"). Ideally both CoreCLR
and CoreFX repos should use exactly the same label for public
issues to avoid possible mistakes.
dotnet-bot [Sun, 24 Jul 2016 08:28:29 +0000 (08:28 +0000)]
Updating CoreClr dependencies to beta-24324-02
Bruce Forstall [Thu, 14 Jul 2016 15:06:25 +0000 (08:06 -0700)]
RyuJIT/x86: implement tailcall via helper
Fixes #4185
Also: (1) added a class to simplify non-standard arg handling in fgMorphArgs(),
(2) fixed minor tree output alignment bug.
Stephen Toub [Sat, 23 Jul 2016 20:49:42 +0000 (13:49 -0700)]
Merge pull request #6425 from weshaggard/UpdateMscorlibFacadeToUseRewrittenCoreLib
Update mscorlib facade to use the rewritten S.P.CoreLib
Martin Woodward [Sat, 23 Jul 2016 16:39:34 +0000 (09:39 -0700)]
Fix #6125 (#6432)
Add reference for Bit Twiddling Hacks
Jan Kotas [Sat, 23 Jul 2016 14:23:21 +0000 (07:23 -0700)]
GC update from CoreRT (#6429)
https://github.com/dotnet/corert/tree/master/src/Native/gc
91d7a9c8e2b393314422b6106adedec683c0ae51
Jan Kotas [Sat, 23 Jul 2016 14:13:22 +0000 (07:13 -0700)]
Add link to https://graphics.stanford.edu/~seander/bithacks.html#ZeroInWord (#6430)
Gaurav Khanna [Sat, 23 Jul 2016 13:17:11 +0000 (06:17 -0700)]
Merge pull request #6428 from dotnet-bot/UpdateDependencies20160723082720
Updating CoreClr dependencies to beta-24323-02
vinnyrom [Sat, 23 Jul 2016 11:46:50 +0000 (04:46 -0700)]
The call to printf expects a string argument, but the actual argument was of class type 'PathString'. (#6422)
dotnet-bot [Sat, 23 Jul 2016 08:27:20 +0000 (08:27 +0000)]
Updating CoreClr dependencies to beta-24323-02
Wes Haggard [Sat, 23 Jul 2016 05:38:43 +0000 (22:38 -0700)]
Update mscorlib facade to use the rewritten S.P.CoreLib
Indirectly we were building the mscorlib facade against the
pre-rewritten S.P.CoreLib which had more types in it that weren't
present after we rewrote the assembly. This change forces the
TargetPath to be the final output for S.P.CoreLib so the ProjectReference
pulls in the correct assembly and will give errors if there are
missing types when generating the facade.
ICloneable and and ResolveEventHandler were missing so including
those in the model.xml file.
Stephen Toub [Sat, 23 Jul 2016 02:20:07 +0000 (19:20 -0700)]
Merge pull request #6415 from joperezr/ExposeISerializableDatetime
Exposing ISerializable implementation in System.DateTime
Gaurav Khanna [Sat, 23 Jul 2016 01:23:34 +0000 (18:23 -0700)]
Merge pull request #6414 from dotnet-bot/UpdateDependencies20160722044814
Updating CoreClr dependencies to beta-24322-04
Swaroop Sridhar [Fri, 22 Jul 2016 23:09:56 +0000 (16:09 -0700)]
Merge pull request #6417 from swaroop-sridhar/contract
GetGcInfo(): Add a missing contract declaration
Swaroop Sridhar [Fri, 22 Jul 2016 20:34:08 +0000 (13:34 -0700)]
GetGcInfo(): Add a missing contract declaration
dotnet-bot [Fri, 22 Jul 2016 16:48:14 +0000 (16:48 +0000)]
Updating CoreClr dependencies to beta-24322-04
Jose Perez Rodriguez [Fri, 22 Jul 2016 16:48:10 +0000 (09:48 -0700)]
Exposing ISerializable implementation in System.DateTime
Rich Lander [Fri, 22 Jul 2016 15:29:25 +0000 (08:29 -0700)]
Create CONTRIBUTING.md (#6386)
This file exists in corefx and is an obvious file to look for. Making the two repos the same.
Evgeny Pavlov [Fri, 22 Jul 2016 12:54:17 +0000 (15:54 +0300)]
Set hr to S_OK instead of returning S_OK
Sujin Kim [Fri, 22 Jul 2016 10:04:55 +0000 (19:04 +0900)]
ARM-CI : Check a device is already mounted while mounting a device. (#6377)
Now ARM-CI makes building failure frequently with below messages.(#6329)
http://dotnet-ci.cloudapp.net/job/dotnet_coreclr/job/master/job/arm_emulator_cross_debug_ubuntu_prtest/559/console
00:01:27.252 + sudo umount /opt/linux-arm-emulator-root/dev
00:01:27.260 umount: /opt/linux-arm-emulator-root/dev: device is busy.
00:01:27.260 (In some cases useful info about processes that use
00:01:27.260 the device is found by lsof(8) or fuser(1))
00:01:27.265 Build step 'Execute shell' marked build as failure
I think ARM CI jobs have tried to unmount the same rootfs by an 'arm32_ci_script.sh' at the same time. (At this time, other jobs still are on running...)
So I suggest though the script is exited by any cases, the script would not run un-mounting.
But whenever CI is running and mounting a device, It will check the device is already mounted.
Evgeny Pavlov [Fri, 22 Jul 2016 09:42:21 +0000 (12:42 +0300)]
Fix ildasm fail due missing GetInfoForMethod managed method
Evgeny Pavlov [Fri, 22 Jul 2016 08:48:51 +0000 (11:48 +0300)]
Use LLVM headers for generation ELF and Dwarf files
Evgeny Pavlov [Wed, 20 Jul 2016 07:28:08 +0000 (10:28 +0300)]
Change 'Extract' -> 'GetValue' to prevent memory leaks
Evgeny Pavlov [Tue, 19 Jul 2016 12:08:55 +0000 (15:08 +0300)]
Use NewArrayHolder instead of raw pointers
Evgeny Pavlov [Tue, 19 Jul 2016 09:40:03 +0000 (12:40 +0300)]
Fix indentation in cmake file
Evgeny Pavlov [Tue, 19 Jul 2016 08:55:27 +0000 (11:55 +0300)]
Fix after review:
* Remove unneeded whitespace changes
* Extract code related with managed delegate to separate header
* Remove unneded files and defines from cmake files
Evgeny Pavlov [Mon, 18 Jul 2016 12:19:26 +0000 (15:19 +0300)]
Create coreclr delegate inside coreclr_initialize
Dmitri Botcharnikov [Thu, 14 Jul 2016 16:23:23 +0000 (19:23 +0300)]
Add GDB JIT support for source line debug information.
Stephen Toub [Fri, 22 Jul 2016 00:46:36 +0000 (17:46 -0700)]
Merge pull request #6399 from stephentoub/fix_typos
Fix build break when FEATURE_SERIALIZATION defined
Stephen Toub [Fri, 22 Jul 2016 00:25:08 +0000 (17:25 -0700)]
Fix build break when FEATURE_SERIALIZATION defined
Egor Chesakov [Thu, 21 Jul 2016 23:51:50 +0000 (16:51 -0700)]
Merge pull request #6367 from echesakov/StackAllocation
Fix bug: inlinee did not copy inlinee bbFlags to caller bbFlags.
Andy Ayers [Thu, 21 Jul 2016 07:34:25 +0000 (00:34 -0700)]
Jit: fix issues with optMethodFlags
Closes #6368.
optMethodFlags is a member field of the Compiler object. It is used
during importation to flag IR that might benefit from earlyProp, and
used in earlyProp to skip execution if nothing is flagged. However,
there were a number of issues with the implementation.
First, the value was never initialized. So in CHK/DBG builds, it would
get set to 0xFFFFFFFF by the default allocator fill. In RELEASE builds
the value would be randomly set. This randomness could easily lead to
nondeterministic codegen in RELEASE. More on this subsequently.
Second, the value was not propagated during inlining. So if interesting
constructs only entered the root method via inlines, they potentially
might not trigger earlyProp.
Third, not all interesting constructs were flagged.
The JIT ORs flag values into optMethodFlags as it imports constructs
that should trigger earlyProp. It also re-uses the same compiler instance
in most cases. So, relatively quickly, even in release, all the relevant
flags end up set and earlyProp will always be run. Hence the window
for observing the nondeterministic is was limited to the first few
methods jitted by each compiler instance.
So to sum up: in DBG/CHK, early prop always runs, regardless of need.
In RELEASE, it runs unpredictably for the first few methods, then always
runs, regardless of need.
To see the nondeterminism in RELEASE, early methods would have to be free
of interesting constructs but pull them in via inlining (or contain
interesting constructs not currently flagged as such during importation).
This set of circumstances is evidently rare enough that the nondeterminism
has not been noted. Also, it is quite unlikely to lead to bad codegen,
just missed opportunities.
We might have caught this if we had reliable RELEASE/CHK diffing ready;
see for instance #5063.
The fix is to initialize optMethodFlags to zero in compInit, and merge in
the inlinee's copy during fgInsertInlineeBlocks. Logging tracks when the
inlinee's copy causes a flag update.
This was tricky to test for diffs because in CHK all that should happen is
that we run earlyProp less often. So any diff in CHK is a missed case of
flagging during importation. I found once such case via SPMI where the array
index is a constant, and added constant indices to the flagging set.
Because I also set the block flag, this both caused earlyProp to run
and also look at that block; the latter has triggered a fair number of
diffs, almost all of them beneficial (0.42% improvement in SPMI), winners
outnumber losers by about 50:1.
A typical example of a diff is that the null check below is removed.
```asm
mov rcx, qword ptr [(reloc)]
mov edx, 4
call CORINFO_HELP_NEWARR_1_VC
** mov edx, dword ptr [rax+8]
mov byte ptr [rax+16], 255
mov byte ptr [rax+17], 254
```
With this change in place, earlyProp how runs selectively based on need in
all configurations. We're still running earlyProp in all the cases where it
can make a difference, and finding more improvements when it does run, but
we're not running it in cases where it can't.
Aditya Mandaleeka [Thu, 21 Jul 2016 23:24:32 +0000 (16:24 -0700)]
Merge pull request #6395 from adityamandaleeka/fix_shell_scripts
Fix lexicographical compares of numeric values in a couple of scripts.
Sejong Oh [Thu, 21 Jul 2016 22:22:06 +0000 (15:22 -0700)]
Merge pull request #6300 from sejongoh/decompose_gt_ind
Decompose GT_IND for x86
Aditya Mandaleeka [Thu, 21 Jul 2016 21:12:14 +0000 (14:12 -0700)]
Merge pull request #6396 from adityamandaleeka/runtest_help_fix
Fix minor error in runtest help
Aditya Mandaleeka [Thu, 21 Jul 2016 21:04:31 +0000 (14:04 -0700)]
Fix minor error in runtest help.
Aditya Mandaleeka [Thu, 21 Jul 2016 20:55:29 +0000 (13:55 -0700)]
Fix lexicographical compares of numeric values.
Evgeny Pavlov [Thu, 21 Jul 2016 18:18:46 +0000 (22:18 +0400)]
Change verbatim ELF.h and Dwarf.h LLVM headers to be able to build in CoreCLR + add license header (#6389)
Kyungwoo Lee [Thu, 21 Jul 2016 17:17:18 +0000 (10:17 -0700)]
Merge pull request #6277 from kyulee1/frageh
ARM64: Enable Function Fragment
Stephen Toub [Thu, 21 Jul 2016 17:02:40 +0000 (10:02 -0700)]
Merge pull request #6375 from stephentoub/serialization_modelxml
Expose serialization primitives from System.Private.Corelib
Evgeny Pavlov [Thu, 21 Jul 2016 16:52:10 +0000 (20:52 +0400)]
[SOS][Linux] Fix incorrect processing 'setclrpath' command with portable PDB reader (#6358)
* Fix incorrect processing 'setclrpath' command in lldb libsosplugin.so with portable PDB reader
* Replace 'fprintf' and 'perror' to 'ExtErr'
Jan Vorlicek [Thu, 21 Jul 2016 16:42:40 +0000 (18:42 +0200)]
Refactor GC background thread creation (#6384)
This change modifies the GCToEEInterface::CreateBackgroundThread so that it returns
a fully initialized and running thread.