platform/upstream/coreclr.git
7 years agoFix CrossGen error reporting when input is missing (#7287)
John Chen [Wed, 21 Sep 2016 13:50:03 +0000 (06:50 -0700)]
Fix CrossGen error reporting when input is missing (#7287)

Currently, running "crossgen foo.dll" when foo.dll does not exist produces
a misleading error message "The image being compiled is not a .NET assembly".
The reason is CrossGen ignores the actual error code reported during
initial asssembly load and verification, and always reports the error as
NGEN_E_FILE_NOT_ASSEMBLY. This change removes that logic, since the original
error code is much more likely to be useful.

7 years agoIf out some dead code in System.Array for FEATURE_CORECLR (#7288)
Hugh Bellamy [Wed, 21 Sep 2016 13:48:08 +0000 (14:48 +0100)]
If out some dead code in System.Array for FEATURE_CORECLR (#7288)

7 years agoClean up GenTree node size dumping code. (#7278)
Peter Kukol [Wed, 21 Sep 2016 01:59:34 +0000 (18:59 -0700)]
Clean up GenTree node size dumping code. (#7278)

Clean up GenTreeXxxx struct size dump; fix 32-bit build when MEASURE_NODE_SIZE is enabled.

7 years agoMerge pull request #7280 from JosephTremoulet/BoundsCheckDisable
Joseph Tremoulet [Wed, 21 Sep 2016 00:49:23 +0000 (20:49 -0400)]
Merge pull request #7280 from JosephTremoulet/BoundsCheckDisable

Respect JitNoRangeChks flag in RyuJit

7 years agoMerge pull request #7252 from CarolEidt/x86GtObj
Carol Eidt [Tue, 20 Sep 2016 23:41:35 +0000 (16:41 -0700)]
Merge pull request #7252 from CarolEidt/x86GtObj

Support GT_OBJ for x86

7 years agoFix launch timing issue in dbgshim found in VS. (#7279)
Mike McLaughlin [Tue, 20 Sep 2016 22:22:33 +0000 (15:22 -0700)]
Fix launch timing issue in dbgshim found in VS. (#7279)

Issue #7274.

7 years agoRespect JitNoRangeChks flag in RyuJit
Joseph Tremoulet [Tue, 20 Sep 2016 20:09:32 +0000 (16:09 -0400)]
Respect JitNoRangeChks flag in RyuJit

Honor this config flag by having assertion prop treat all bounds check
nodes as redundant when it is set.

Also change the flag's lookup options to `REGUTIL_default` to match the
rest of the jit-focused flags.

Note that support for this flag is conditional on having the preprocessor
flag `FEATURE_ENABLE_NO_RANGE_CHECKS` defined, which requires a custom
build with line 199 of inc/switches.h un-commented (or with compile flags
altered to include `-DFEATURE_ENABLE_NO_RANGE_CHECKS`) -- the purpose of
the flag is to facilitate experiments to estimate the cumulative cost of
bounds checking in various workloads.

7 years agoSupport GT_OBJ for x86
Carol Eidt [Sat, 10 Sep 2016 15:24:51 +0000 (08:24 -0700)]
Support GT_OBJ for x86

Add support for GT_OBJ for x86, and allow them to be transformed into a list
of fields (in morph) if it is a promoted struct. Add a new list type for
this (GT_FIELD_LIST) with the type and offset, and use it for the multireg
arg passing as well for consistency.
Also refactor fgMorphArgs so that there is a positive check for reMorphing,
rather than relying on gtCallLateArgs, which can be null if there are no
register args.
In codegenxarch, modify the struct passing (genPutStructArgStk) to work for
both the x64/ux and x86 case, including the option of pushing fields onto
the stack.
Eliminate the redundant INS_movs_ptr, and replace with the pre-existing
INS_movsp.

7 years agoUpgrade CLI, buildtools for RTM shared framework. (#7045)
Davis Goodin [Tue, 20 Sep 2016 18:03:36 +0000 (13:03 -0500)]
Upgrade CLI, buildtools for RTM shared framework. (#7045)

7 years agomute EH failures exposed by LTO (#7267)
kchoi [Tue, 20 Sep 2016 15:23:11 +0000 (08:23 -0700)]
mute EH failures exposed by LTO (#7267)

It does this by using a no-inline, no-opt function that takes in
the volatile pointer and performing operation that generates h/w
exception. The function has a runtime check on the volatile pointer to
pretend to throw (but never does), which fools the C++ runtime into
handling the h/w exception.

7 years agoMerge pull request #7268 from vancem/master
Vance Morrison [Tue, 20 Sep 2016 15:10:56 +0000 (08:10 -0700)]
Merge pull request #7268 from vancem/master

Fix Bad NGEN Pdbs for ReadyToRun images

7 years agoMerge pull request #7181 from ramarag/CompilerServices
Rama krishnan Raghupathy [Tue, 20 Sep 2016 05:35:49 +0000 (22:35 -0700)]
Merge pull request #7181 from ramarag/CompilerServices

Adding Compiler services APIs

7 years agoCreate long-named DAC and SOS DLLs for Windows. (#7265)
Mike McLaughlin [Tue, 20 Sep 2016 01:47:25 +0000 (18:47 -0700)]
Create long-named DAC and SOS DLLs for Windows. (#7265)

Issue #5869

7 years agoFix GC Stress testing on non windows platforms
Rama Krishnan Raghupathy [Thu, 15 Sep 2016 20:45:04 +0000 (13:45 -0700)]
Fix GC Stress testing on non windows platforms

7 years agotest FixedAddressValueType and RuntimeWrappedException
Rama Krishnan Raghupathy [Thu, 15 Sep 2016 00:03:11 +0000 (17:03 -0700)]
test FixedAddressValueType and RuntimeWrappedException

7 years agoFixBadReadyToRunPdb.9-19-16
Vance Morrison [Mon, 19 Sep 2016 23:18:38 +0000 (16:18 -0700)]
FixBadReadyToRunPdb.9-19-16

7 years agoMerge pull request #7232 from pgavlin/gh4186
Pat Gavlin [Mon, 19 Sep 2016 23:14:04 +0000 (16:14 -0700)]
Merge pull request #7232 from pgavlin/gh4186

Implement indirect VSD calls for x86.

7 years agoAdd option for showing GT_xxx operator counts. (#7262)
Peter Kukol [Mon, 19 Sep 2016 22:44:22 +0000 (16:44 -0600)]
Add option for showing GT_xxx operator counts. (#7262)

7 years agoFix a bug in LIR::Use::ReplaceWith.
Pat Gavlin [Mon, 19 Sep 2016 20:56:30 +0000 (13:56 -0700)]
Fix a bug in LIR::Use::ReplaceWith.

7 years agoExpose missing public field on Debugger (#7258)
Dan Moseley [Mon, 19 Sep 2016 20:56:59 +0000 (13:56 -0700)]
Expose missing public field on Debugger (#7258)

7 years agoFill out SecurityException with stubs (#7250)
Dan Moseley [Mon, 19 Sep 2016 18:16:37 +0000 (11:16 -0700)]
Fill out SecurityException with stubs (#7250)

7 years agoMerge pull request #7237 from swaroop-sridhar/gc86legacy
Swaroop Sridhar [Mon, 19 Sep 2016 16:02:42 +0000 (09:02 -0700)]
Merge pull request #7237 from swaroop-sridhar/gc86legacy

X86 GcEncode: Support V1 and V2 encodings

7 years agoMark GT_IND nodes that represent VSD targets.
Pat Gavlin [Sat, 17 Sep 2016 01:35:38 +0000 (18:35 -0700)]
Mark GT_IND nodes that represent VSD targets.

The operand to such a node must be materialized into a register on
certain platforms. This change defines a new IND-specific flag,
GTF_IND_VSD_TGT, and uses that flag to indicate that a particular
GT_IND node represents a VSD target. This flag is then observed by
lowering on the necessary platforms in order to short circuit the
logic that attempts to make the GT_IND's operand contained.

7 years agoX86 GcEncode: Support V1 and V2 encodings
Swaroop Sridhar [Fri, 16 Sep 2016 21:32:06 +0000 (14:32 -0700)]
X86 GcEncode: Support V1 and V2 encodings

The RYU+LegacyBackend Desktop JIT for X86 is still on V1.
So, permit both V1 and V2 encodings in gcencode.cpp.

7 years agoExposing Type.GetTypeFromHandleUnsafe from model.xml (#7249)
Bart J.F. De Smet [Mon, 19 Sep 2016 01:11:37 +0000 (18:11 -0700)]
Exposing Type.GetTypeFromHandleUnsafe from model.xml (#7249)

Exposing Type.GetTypeFromHandleUnsafe from model.xml

7 years agoVersion: Make fields readonly and delete duplicate code (#7246)
Justin Van Patten [Sun, 18 Sep 2016 22:36:33 +0000 (15:36 -0700)]
Version: Make fields readonly and delete duplicate code (#7246)

Change `Version`'s fields to `readonly` to better guarantee its
immutability, and remove duplicate code.

7 years agoPrevent source line info from being released (#7222)
kvochko [Sun, 18 Sep 2016 06:04:18 +0000 (10:04 +0400)]
Prevent source line info from being released (#7222)

7 years agoExposing IUnknownConstantAttribute
Rama Krishnan Raghupathy [Thu, 15 Sep 2016 02:55:54 +0000 (19:55 -0700)]
Exposing IUnknownConstantAttribute

7 years agoExposing Remaining CompilerServices Apis in mscorlib
Rama Krishnan Raghupathy [Wed, 14 Sep 2016 02:21:58 +0000 (19:21 -0700)]
Exposing Remaining CompilerServices Apis in mscorlib

7 years agoExposing ExecuteCodeWithGuaranteedCleanup in mscorlib
Rama Krishnan Raghupathy [Wed, 14 Sep 2016 00:46:07 +0000 (17:46 -0700)]
Exposing ExecuteCodeWithGuaranteedCleanup in mscorlib

7 years agoExposing RunModuleConstructor in mscorlib
Rama Krishnan Raghupathy [Tue, 13 Sep 2016 23:34:56 +0000 (16:34 -0700)]
Exposing RunModuleConstructor in mscorlib

7 years agoMerge pull request #7238 from dotnet/mellinoe-patch-1
Eric Mellino [Sat, 17 Sep 2016 00:05:43 +0000 (17:05 -0700)]
Merge pull request #7238 from dotnet/mellinoe-patch-1

Add an Ubuntu 16.10 badge to README.md

7 years agoAddress PR feedback.
Pat Gavlin [Fri, 16 Sep 2016 22:44:47 +0000 (15:44 -0700)]
Address PR feedback.

7 years agoMerge pull request #7169 from adiaaida/shiftCnsInt
Michelle McDaniel [Fri, 16 Sep 2016 22:23:28 +0000 (15:23 -0700)]
Merge pull request #7169 from adiaaida/shiftCnsInt

Add optimization for shift by CNS_INT

7 years agoAdd an Ubuntu 16.10 badge to README.md
Eric Mellino [Fri, 16 Sep 2016 21:54:50 +0000 (14:54 -0700)]
Add an Ubuntu 16.10 badge to README.md

7 years agoMerge pull request #7233 from mellinoe/ubuntu1610-ci
Eric Mellino [Fri, 16 Sep 2016 21:38:12 +0000 (14:38 -0700)]
Merge pull request #7233 from mellinoe/ubuntu1610-ci

Add Ubuntu 16.10 to CI

7 years agoAdd few System.Reflection APIs (#7193)
Sepideh Khoshnood [Fri, 16 Sep 2016 20:12:56 +0000 (13:12 -0700)]
Add few System.Reflection APIs (#7193)

* Add few remaining exposable System.Reflection APIs

7 years agoAdd optimization for shift by CNS_INT
Michelle McDaniel [Fri, 9 Sep 2016 17:44:03 +0000 (10:44 -0700)]
Add optimization for shift by CNS_INT

This change adds support for shifting by a GT_CNS_INT without going
through a helper. If the shiftOp is a GT_CNS_INT we do several
transformations based on the shift amount:

If the shift amount is 0, the shift is a nop, so we just put together the
hi and lo ops as a GT_LONG.

If the shift amount is < 32, we generate a shl/shld pattern, a shr/shrd
pattern or a sar/shrd pattern, depending on the oper. The first operand of
the shrd/shld is a GT_LONG, which we crack in codegen, using it
essentially as two int operands, rather than creating a tri op GenTree
node (essentially so that we can have 3 operands, instead of the normal
two).

If the shift amount is 32, it differs between shifting left and shifting
right. For GT_LSH, we move the loOp into the hiResult and set the loResult
to 0. For GT_RSZ, we move the hiOp into the loResult, and set the hiResult
to 0. For GT_RSH, we move the hiOp into the loResult, and set the hiResult
to a 31 bit signed shift of the hiOp to sign extend.

If the shift amount is less than 64, but larger than 32: for GT_LSH, the
hiResult is a shift of the loOp by shift amount - 32 (the move from lo into hi is
the 32 bit shift). We set the loResult to 0. For GT_RSH and GT_RSZ, the
loResult is a right shift (signed for GT_RSH) of the hiOp by shift amount
- 32. The hiResult is 0 for GT_RSZ, and a 31 bit signed shift of hiOp1 for
GT_RSH.

If the shift amount is >= 64, we set both hiResult and loResult to 0 for
GT_LSH and GT_RSZ, and do a sign extend shift to set hiResult and loResult
to the sign of the original hiOp for GT_RSH.

7 years agoAdd Ubuntu 16.10 to CI
Eric Mellino [Fri, 16 Sep 2016 19:11:29 +0000 (12:11 -0700)]
Add Ubuntu 16.10 to CI

7 years agoImplement indirect VSD calls for x86.
Pat Gavlin [Mon, 12 Sep 2016 21:23:29 +0000 (14:23 -0700)]
Implement indirect VSD calls for x86.

Indirect VSD calls on x86 require not only that the address of the
VSD indirection cell is passed to the stub in EAX, but also that the
call instruction is
a) preceeded by a 3-byte NOP, and
b) exactly `call [eax]`.

On x64, these types of calls only require that the indirection cell
address is passed in R11 (i.e. they do not require the generation of
a specific call instruction encoding). The RyuJIT IR is therefore
able to represent such calls succinctly as something like:

    t72 =    lclVar    ref    V04 loc1         u:3 (last use) $240

           /--*  t72    ref
    t295 = *  putarg_reg ref

    t202 =    lclVar    long   V09 tmp4         u:4 $382

           /--*  t202   long
    t296 = *  putarg_reg long

    t106 =    lclVar    long   V09 tmp4         u:4 (last use) $382

           /--*  t106   long
    t297 = *  indir     long

           /--*  t295   ref    this in rcx
           +--*  t296   long   arg1 in r11
           +--*  t297   long   calli tgt
    t107 = *  call ind stub ref    $24a

In this form, the address of the indirection cell is in the lclVar
`tmp4`, which is then used by both a `putarg_reg` to move the
argument into R11 and by the indirection that generates the call
target. Because there are a relatively large number of registers on
x64, this works out nicely: the address of the indirection cell is
frequently allocated to R11, few extraneous copies are required,
and the code generator produces `call [r11]` for the call instruction.

Unfortunately, the situation is not so straightforward on x86: not
only must code generator must both pass the address of the indirection
cell in EAX and produce the specific call form mentioned earlier,
but there are also far fewer available registers. As a result, the
address of the indirection cell is infrequently allocated to EAX and
(barring an implicit understanding in the code generator that a
previous putarg_reg has placed the address of the indirection cell
into EAX) requires a redundant `mov eax, ...` before the call.

Ideally, we would be able to store the address of the indirection cell
to a local with a very short lifetime and pre-allocate that local to
EAX, but the IR does not have that capability, and adding it now
seems to be prohibitively expensive. Instead, this change omits the
`putarg_reg` used to put the the indirection cell address into the
required register on other platforms and simply uses the `calli tgt`
operand to the call to represent both the non-standard argument and
the call target:

    t40 =    lclVar    ref    V04 loc1         u:3 $1c0

           /--*  t40    ref
    t280 = *  putarg_reg ref

    t70 =    lclVar    int    V06 loc3         u:4 (last use) $2c1

           /--*  t70    int
    t281 = *  indir     int

           /--*  t280   ref    this in ecx
           +--*  t281   int    calli tgt
    t71 = *  call ind stub ref    $1c6

Lowering then marks the indirection as contained and sets the
destination candidates for its operand to EAX.

7 years agoEnable Building Libraries for ilproj
Rama Krishnan Raghupathy [Wed, 14 Sep 2016 22:57:36 +0000 (15:57 -0700)]
Enable Building Libraries for ilproj

7 years agoOption for reporting GenTree operator bashing stats (#7152)
Peter Kukol [Fri, 16 Sep 2016 05:59:05 +0000 (23:59 -0600)]
Option for reporting GenTree operator bashing stats (#7152)

* Add option (off by default) to report GenTree operator bashing stats.

7 years agoMerge pull request #7212 from joperezr/FixmscorlibRef
Wes Haggard [Fri, 16 Sep 2016 03:16:01 +0000 (20:16 -0700)]
Merge pull request #7212 from joperezr/FixmscorlibRef

Remove unwanted String.Split methods from Reference assembly

7 years agoMerge pull request #7170 from pgavlin/gh7144
Pat Gavlin [Fri, 16 Sep 2016 02:11:30 +0000 (19:11 -0700)]
Merge pull request #7170 from pgavlin/gh7144

Refactor call arg table updates.

7 years agoMerge pull request #7194 from sivarv/jitstressregs1or8Fix
Sivarv [Fri, 16 Sep 2016 00:55:43 +0000 (17:55 -0700)]
Merge pull request #7194 from sivarv/jitstressregs1or8Fix

Fix to issues #7167, 7094 and 7143

7 years agoMinor fix in GC section of BOTR
Aditya Mandaleeka [Thu, 15 Sep 2016 23:56:26 +0000 (16:56 -0700)]
Minor fix in GC section of BOTR

7 years agoRefactor call arg table updates.
Pat Gavlin [Tue, 13 Sep 2016 20:42:14 +0000 (13:42 -0700)]
Refactor call arg table updates.

When a call argument is replaced by a new node, the corresponding entry
in the call's argument table must be replaced. Managing this replacement
was a bit ad-hoc: there were a (small) number of places throughout the
compiler that needed to do so, and each determined whether or not to
call the udpate method (`fgFixupArgTabEntryPtr`) independently. The
update method has been removed and its functionality replaced with a
new method, `GenTree::ReplaceOperand`, which will update the call
argument table iff the replaced node is a call argument.

7 years agoAdding new Split members with defaults
Jose Perez Rodriguez [Thu, 15 Sep 2016 23:19:50 +0000 (16:19 -0700)]
Adding new Split members with defaults

7 years agoFix LSRA stress modes not to constrain candidates to below the
sivarv [Thu, 15 Sep 2016 18:30:48 +0000 (11:30 -0700)]
Fix LSRA stress modes not to constrain candidates to below the
required limit.

7 years agoMerge pull request #7213 from dotnet/revert-7123-WinArm32CI
Gaurav Khanna [Thu, 15 Sep 2016 22:40:27 +0000 (15:40 -0700)]
Merge pull request #7213 from dotnet/revert-7123-WinArm32CI

Revert "Enable Win32Arm CI support"

7 years agoRevert "Enable Win32Arm CI support"
Gaurav Khanna [Thu, 15 Sep 2016 22:30:32 +0000 (15:30 -0700)]
Revert "Enable Win32Arm CI support"

7 years agoRemove unwanted String.Split methods from Reference assembly
Jose Perez Rodriguez [Thu, 15 Sep 2016 21:49:47 +0000 (14:49 -0700)]
Remove unwanted String.Split methods from Reference assembly

7 years agoMerge pull request #7159 from JosephTremoulet/HelperHoist
Joseph Tremoulet [Thu, 15 Sep 2016 20:32:13 +0000 (16:32 -0400)]
Merge pull request #7159 from JosephTremoulet/HelperHoist

Recognize mod-free helper calls in loop hoisting

7 years agoUpdate the GC from CoreRT (#7207)
Sean Gillespie [Thu, 15 Sep 2016 20:05:03 +0000 (13:05 -0700)]
Update the GC from CoreRT (#7207)

7 years agoMerge pull request #7123 from gkhanna79/WinArm32CI
Gaurav Khanna [Thu, 15 Sep 2016 18:08:27 +0000 (11:08 -0700)]
Merge pull request #7123 from gkhanna79/WinArm32CI

Enable Win32Arm CI support

7 years agoRecognize mod-free helper calls in loop hoisting
Joseph Tremoulet [Thu, 25 Aug 2016 17:45:20 +0000 (13:45 -0400)]
Recognize mod-free helper calls in loop hoisting

Update the code in `optHoistLoopExprsForTree` that identifies exprs with
memory side-effects to recognize helper calls that don't mutate the heap;
this allows hoisting invariant exprs past such helper calls.

Fixes #6901.

7 years agoMerge pull request #7162 from JosephTremoulet/VolatileTest
Joseph Tremoulet [Thu, 15 Sep 2016 17:48:20 +0000 (13:48 -0400)]
Merge pull request #7162 from JosephTremoulet/VolatileTest

Add missing volatile annotation to test

7 years agoHarden test against JIT optimizations
Joseph Tremoulet [Tue, 13 Sep 2016 17:01:15 +0000 (13:01 -0400)]
Harden test against JIT optimizations

Declare static field `finalizerCompletedOnce` volatile -- this test has a
side-effect-free busy-loop which checks that static variable for a change it
expects a finalizer to make to it; this static field must be volatile to
ensure the jit doesn't hoist the load from the loop.

Call GC.KeepAlive on the objects constructed in the various allocation
loops in this test, to make sure that the entire allocation isn't
optimized away.

7 years agoMerge pull request #7201 from JosephTremoulet/MscVer
Joseph Tremoulet [Thu, 15 Sep 2016 15:37:43 +0000 (11:37 -0400)]
Merge pull request #7201 from JosephTremoulet/MscVer

Update _MSC_FULL_VER check for constexpr handling

7 years agoMerge pull request #7179 from dotnet-bot/master-UpdateDependencies
Gaurav Khanna [Thu, 15 Sep 2016 14:36:06 +0000 (07:36 -0700)]
Merge pull request #7179 from dotnet-bot/master-UpdateDependencies

Update CoreClr, CoreFx, External to beta-24515-02, beta-24514-06, beta-24514-00, respectively (master)

7 years agoUpdate _MSC_FULL_VER check for constexpr handling
Joseph Tremoulet [Thu, 15 Sep 2016 01:08:04 +0000 (21:08 -0400)]
Update _MSC_FULL_VER check for constexpr handling

Previously the code was comparing against 190024210 (VS2015 Update 3).
Update it to instead compare against 190024315, the last pre-release build
before C++14 constexpr support got added; this fixes compilation using
pre-release MSVC compilers between 24210 and 24315.

Fixes #6642.

7 years agoOverride CopyTo in MemoryStream (#7131)
James Ko [Thu, 15 Sep 2016 11:37:41 +0000 (07:37 -0400)]
Override CopyTo in MemoryStream (#7131)

* Cache some virtual method calls in Stream.ValidateCopyToArguments
* Add override of Stream.CopyTo to MemoryStream

7 years agoUpdate CoreClr, CoreFx, External to beta-24515-02, beta-24514-06, beta-24514-00,...
dotnet-bot [Thu, 15 Sep 2016 08:13:44 +0000 (08:13 +0000)]
Update CoreClr, CoreFx, External to beta-24515-02, beta-24514-06, beta-24514-00, respectively

7 years agoMinor String.Split cleanup to align more closely with CoreRT (#7185)
Justin Van Patten [Thu, 15 Sep 2016 00:48:51 +0000 (17:48 -0700)]
Minor String.Split cleanup to align more closely with CoreRT (#7185)

7 years agoMerge pull request #7189 from pgavlin/x86-cmp-long
Pat Gavlin [Wed, 14 Sep 2016 23:40:41 +0000 (16:40 -0700)]
Merge pull request #7189 from pgavlin/x86-cmp-long

Implement long compare lowering for x86.

7 years agoMerge pull request #7188 from CarolEidt/Fix7160
Carol Eidt [Wed, 14 Sep 2016 23:37:33 +0000 (16:37 -0700)]
Merge pull request #7188 from CarolEidt/Fix7160

Allow GT_OBJ for Arm64

7 years agoMerge pull request #6892 from jamesqo/list-optimizations
Vance Morrison [Wed, 14 Sep 2016 22:45:58 +0000 (15:45 -0700)]
Merge pull request #6892 from jamesqo/list-optimizations

Copy directly to the internal buffer in List.InsertRange

7 years agoAddress more PR feedback.
Pat Gavlin [Wed, 14 Sep 2016 21:22:52 +0000 (14:22 -0700)]
Address more PR feedback.

7 years agoAddress PR feedback.
Pat Gavlin [Wed, 14 Sep 2016 20:18:06 +0000 (13:18 -0700)]
Address PR feedback.

7 years agoMerge pull request #6974 from swaroop-sridhar/gc86
Swaroop Sridhar [Wed, 14 Sep 2016 19:26:20 +0000 (12:26 -0700)]
Merge pull request #6974 from swaroop-sridhar/gc86

Implement GcInfo v2 for X86

7 years agoMerge pull request #7187 from adiaaida/rotate
Michelle McDaniel [Wed, 14 Sep 2016 18:20:01 +0000 (11:20 -0700)]
Merge pull request #7187 from adiaaida/rotate

Remove NYI for x86 long rotate

7 years agoARM/Linux: Add codename xenial (#7158)
SaeHie Park [Wed, 14 Sep 2016 18:00:54 +0000 (03:00 +0900)]
ARM/Linux: Add codename xenial (#7158)

Add Ubuntu 16.04 code name Xenial to cross rootfs option

7 years agoIntroduce GT_JCC.
Pat Gavlin [Wed, 14 Sep 2016 02:32:57 +0000 (19:32 -0700)]
Introduce GT_JCC.

This node represents a jump that is conditional upon the value stored in
the target's condition code register. It is only valid in the backend.
No formal modeling of the CCR is performed, so its use must be
constrained such that instructions that def the CCR are not inserted
between the JCC node and the node that it expected to def the CCR.

This is currently only used when lowering compares of long-typed
values for x86.

7 years agoImplement long compare lowering for x86.
Mike Danes [Thu, 8 Sep 2016 11:54:14 +0000 (14:54 +0300)]
Implement long compare lowering for x86.

Comparisons between long-typed values on x86 require at least two and
at most three separate branches: one or two to compare the high 32
bits and one to compare the low 32 bits. In essence, each long
compare introduces two additional basic blocks into the flow graph,
but these blocks were not reified until code generation. Furthermore,
code generation of a long comparison used by a JTRUE was deferred
until the JTRUE itself without marking the inputs to the compare as
live at the JTRUE. Taken together, these representational issues
caused bugs like the one seen in the the following assembly:

       33DB         xor      ebx, ebx
       BE03000000   mov      esi, 3
       33FF         xor      edi, edi
       8B75F0       mov      esi, dword ptr [ebp-10H] ; these 2 are reloads inserted by LSRA
       8B7DEC       mov      edi, dword ptr [ebp-14H] ; between the compare and the branch
       3BDF         cmp      ebx, edi
       72D6         jb       SHORT G_M51005_IG03
       7704         ja       SHORT G_M51005_IG04
       3BC6         cmp      eax, esi
       72D0         jb       SHORT G_M51005_IG03

The reloads that LSRA has inserted have killed the registers assigned
to the inputs to the compare, thus causing the compare instructions
to read unexpected values (GH #7038).

Although a number of alternatives were discussed, the best solution
seems to be to expose the control flow via the flow graph rather than
leaving it until code generation; this commit implements that approach.

7 years agoImplement GcInfo v2 for X86
Swaroop Sridhar [Mon, 22 Aug 2016 22:06:44 +0000 (15:06 -0700)]
Implement GcInfo v2 for X86

This commit includes the following changes:
1) Thread GcInfo version through X86 specific APIs
2) Add ReturnKind and ReversePinvokeOffset fields to InfoHdr structure
   GcInfo v1 and v2 use the same InfoHdr structures, because:
   InfoHdrSmall: ReturnKind is encoded within previously unused bits.
   InfoHdr: revPInvokeOffset will never be written to the image,
            since ReversePinvokeOffset==INVALID_REV_PINVOKE_OFFSET for V1.
3) Update the Pre-computed header table to include bits for the above
   [The default setting of ReturnKind=RT_Scalar is used for all entries in the table.
    Optimizing this table based in most frequent usage scenarios is to be done separately]
4) Change the GC encoder/decoder to handle the above two fields
5) Use the ReturnKind in the GCInfo from thread-suspension code.

GcInfo version is changed for CoreCLR X86 only, not for Desktop JIT
Fixes #4379

7 years agoRemove NYI for x86 long rotate
Michelle McDaniel [Wed, 14 Sep 2016 16:39:16 +0000 (09:39 -0700)]
Remove NYI for x86 long rotate

For x86 rotate a long by a variable amount, we will just default to what
legacy backend does, which ultimately will generate two helper calls. In
the future, we may want to write a helper function for rotate for these
cases to eliminate one of the helper calls.

7 years agoFix Unix issue with string address below 64kB (#7183)
Jan Vorlicek [Wed, 14 Sep 2016 14:59:28 +0000 (16:59 +0200)]
Fix Unix issue with string address below 64kB (#7183)

This change fixes a problem that has started to occur in the ARM32 Linux CI
tests. A string located below 64KB in the address space is passed to the
StringObject::StringInitCharHelper and the code throws an exception since
on Windows, values below 64kB represent atoms and not strings.
This check should not be done for FEATURE_PAL though.

7 years agoMerge pull request #7012 from kyulee1/fix6844
Kyungwoo Lee [Wed, 14 Sep 2016 14:54:59 +0000 (08:54 -0600)]
Merge pull request #7012 from kyulee1/fix6844

X86: Fix inline assertion

7 years agoUpdate new String.Split methods to use optional params (#7175)
Justin Van Patten [Wed, 14 Sep 2016 13:55:39 +0000 (06:55 -0700)]
Update new String.Split methods to use optional params (#7175)

The new `Split(string)` overload broke source compat with uses of
`Split(null)`, which is documented to split based on white space,
because it makes the call ambiguous between `Split(char[])` and
`Split(string)`.

To maintain source compatibilty, `Split(string)` has been removed,
leaving just the overloads with `StringSplitOptions` parameters, which
are now optional. Making `StringSplitOptions` optional allows calls
to `Split(string)` while maintaining source compat with calls to
`Split(null)` which still binds to `Split(char[])` in C#, VB, and F#.

The new `Split(char)` overloads get the same changes for consistency
with `Split(string)`.

7 years agoUse the correct HijackHelper for X86 FP (#7182)
Swaroop Sridhar [Wed, 14 Sep 2016 08:06:08 +0000 (01:06 -0700)]
Use the correct HijackHelper for X86 FP (#7182)

On X86, the helper OnHijackFPTripThread must be used for hijacking
methods returning a float value.

7 years agoAllow GT_OBJ for Arm64
Carol Eidt [Tue, 13 Sep 2016 23:56:41 +0000 (16:56 -0700)]
Allow GT_OBJ for Arm64

GT_OBJ is used on Arm64 for struct passing, but was inadvertently flagged
as an illegal node in Lowering.
Fix #7160

7 years agoMerge pull request #7177 from smile21prc/coreclr-perf
smile21prc [Tue, 13 Sep 2016 23:47:15 +0000 (16:47 -0700)]
Merge pull request #7177 from smile21prc/coreclr-perf

Extend the coreclr Windows perf run result lifetime

7 years agoFor perf, we need to keep the run results longer for analysis.
Smile Wei [Tue, 13 Sep 2016 23:21:13 +0000 (16:21 -0700)]
For perf, we need to keep the run results longer for analysis.

7 years agoUpdate CoreClr, CoreFx, External to beta-24513-04, beta-24513-02, beta-24513-00,...
dotnet bot [Tue, 13 Sep 2016 22:33:31 +0000 (15:33 -0700)]
Update CoreClr, CoreFx, External to beta-24513-04, beta-24513-02, beta-24513-00, respectively (#7006)

7 years agoX86: Fix inline assertion
Kyungwoo Lee [Wed, 31 Aug 2016 21:18:31 +0000 (14:18 -0700)]
X86: Fix inline assertion

Inline assertion occurred since we didn't bail out the inline fail case
early.
During the test, I got another assertion about debug flag where #7173 is
filed with x86 legacy back-end.
With x86 ryujit back-end, there is an infinite loop from #7038.

Fixes #6844

7 years agoMerge pull request #7164 from BruceForstall/FixTestExclusions
Bruce Forstall [Tue, 13 Sep 2016 21:18:12 +0000 (14:18 -0700)]
Merge pull request #7164 from BruceForstall/FixTestExclusions

Add issue comments to excluded tests

7 years agoMerge pull request #7172 from smile21prc/coreclr-perf
smile21prc [Tue, 13 Sep 2016 21:14:12 +0000 (14:14 -0700)]
Merge pull request #7172 from smile21prc/coreclr-perf

Enable archive for coreclr perf Linux runs, and fix a few bugs.

7 years agoList all generated perf .xml files.
Smile Wei [Thu, 8 Sep 2016 19:25:54 +0000 (12:25 -0700)]
List all generated perf .xml files.

7 years agoMerge pull request #7166 from adiaaida/removeNYIs
Michelle McDaniel [Tue, 13 Sep 2016 20:36:51 +0000 (13:36 -0700)]
Merge pull request #7166 from adiaaida/removeNYIs

Remove unnecessary NYIs in Decompose

7 years agoRemove unnecessary NYIs in Decompose
Michelle McDaniel [Tue, 13 Sep 2016 18:21:37 +0000 (11:21 -0700)]
Remove unnecessary NYIs in Decompose

GT_DIV, GT_MOD, GT_UDIV, GT_ROL, GT_ROR, and GT_MULHI will never make it
to decompose, so remove the case statements for those operations. They
will fall through to the default case, which noway_asserts that we haven't
gotten to decompose with an oper that we don't recognize.

7 years agoMerge pull request #7145 from sivarv/JitStressRegs8Fix
Sivarv [Tue, 13 Sep 2016 17:55:51 +0000 (10:55 -0700)]
Merge pull request #7145 from sivarv/JitStressRegs8Fix

Fix to #7091 - Assert failure 'currentInterval && (currentInterval->isLocalVar || currentRefPosition->isFixedRegRef || currentInterval->hasConflictingDefUse)'

7 years agoAdd issue comments to excluded tests
Bruce Forstall [Tue, 13 Sep 2016 17:34:46 +0000 (10:34 -0700)]
Add issue comments to excluded tests

7 years agoAdd Array.Reverse<T> (#7132)
Justin Van Patten [Tue, 13 Sep 2016 17:25:13 +0000 (10:25 -0700)]
Add Array.Reverse<T> (#7132)

* Add Array.Reverse<T>

Add generic `Reverse<T>` methods to `Array`.

* Change List<T>.Reverse to use Array.Reverse<T>

Implement `List<T>.Reverse` using `Array.Reverse<T>`.

7 years agoRemove a field from the CopyToAsync async state machine (#7157)
Stephen Toub [Tue, 13 Sep 2016 16:36:44 +0000 (12:36 -0400)]
Remove a field from the CopyToAsync async state machine (#7157)

The compiler is lifting the local ```bytesRead``` into a field on the async state machine, even though its value need not be preserved across any await.

7 years agoEnable Debian Jessie for ARM rootfs build (#7140)
Dmitri-Botcharnikov [Tue, 13 Sep 2016 16:25:33 +0000 (20:25 +0400)]
Enable Debian Jessie for ARM rootfs build (#7140)

7 years agoReplace % inside loop of Random ctor (#7156)
chrisaut [Tue, 13 Sep 2016 14:58:06 +0000 (21:58 +0700)]
Replace % inside loop of Random ctor (#7156)

7 years agoFix funceval for enregistered value types arguments. (#7149)
Mike McLaughlin [Tue, 13 Sep 2016 12:48:27 +0000 (05:48 -0700)]
Fix funceval for enregistered value types arguments. (#7149)

Issue #7115.

MethodDescCallSide.CallTargetWorker used by funceval needed to deal with
enregistered 16 byte value types arguments not just return values.

7 years agoMerge pull request #7153 from dotnet-bot/from-tfs
Jan Kotas [Tue, 13 Sep 2016 10:42:29 +0000 (03:42 -0700)]
Merge pull request #7153 from dotnet-bot/from-tfs

Merge changes from TFS

7 years agoFix uninitialized local build break
Bruce Forstall [Tue, 13 Sep 2016 05:47:50 +0000 (22:47 -0700)]
Fix uninitialized local build break

[tfs-changeset: 1626936]

7 years agoMerge pull request #7130 from BruceForstall/Fix7086
Bruce Forstall [Tue, 13 Sep 2016 05:26:47 +0000 (22:26 -0700)]
Merge pull request #7130 from BruceForstall/Fix7086

RyuJIT x86: Implement GS cookie check for functions with tailcall