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.
Commit migrated from https://github.com/dotnet/coreclr/commit/
8ebb1d54583d0ebc03235e78e51f3026fbb7e4d3
Gaurav Khanna [Thu, 15 Sep 2016 18:08:27 +0000 (11:08 -0700)]
Merge pull request dotnet/coreclr#7123 from gkhanna79/WinArm32CI
Enable Win32Arm CI support
Commit migrated from https://github.com/dotnet/coreclr/commit/
eebf26a9889cb03b6a6b77e705e394b59cd36364
Joseph Tremoulet [Thu, 15 Sep 2016 17:48:20 +0000 (13:48 -0400)]
Merge pull request dotnet/coreclr#7162 from JosephTremoulet/VolatileTest
Add missing volatile annotation to test
Commit migrated from https://github.com/dotnet/coreclr/commit/
25e7be4af3eadaa65951e7ceeb34323ca76574cf
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.
Commit migrated from https://github.com/dotnet/coreclr/commit/
f6b070c69585761996778fa5228b07d0be26be57
Joseph Tremoulet [Thu, 15 Sep 2016 15:37:43 +0000 (11:37 -0400)]
Merge pull request dotnet/coreclr#7201 from JosephTremoulet/MscVer
Update _MSC_FULL_VER check for constexpr handling
Commit migrated from https://github.com/dotnet/coreclr/commit/
a4bdd3b33762d07be30f207eb66be934ccd2ffb4
Gaurav Khanna [Thu, 15 Sep 2016 14:36:06 +0000 (07:36 -0700)]
Merge pull request dotnet/coreclr#7179 from dotnet-bot/master-UpdateDependencies
Update CoreClr, CoreFx, External to beta-24515-02, beta-24514-06, beta-24514-00, respectively (master)
Commit migrated from https://github.com/dotnet/coreclr/commit/
90642a97e81cc8a3d0617c3819fd4a55539d501a
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 dotnet/coreclr#6642.
Commit migrated from https://github.com/dotnet/coreclr/commit/
f2d55c602fb386172a8dcc62d1eaf9654bb0a0f8
James Ko [Thu, 15 Sep 2016 11:37:41 +0000 (07:37 -0400)]
Override CopyTo in MemoryStream (dotnet/coreclr#7131)
* Cache some virtual method calls in Stream.ValidateCopyToArguments
* Add override of Stream.CopyTo to MemoryStream
Commit migrated from https://github.com/dotnet/coreclr/commit/
a62af3e824095dc11263f040705623f2e216165c
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
Commit migrated from https://github.com/dotnet/coreclr/commit/
d8a58699a327da7b1a93d92cf7a7ed16f987272f
Justin Van Patten [Thu, 15 Sep 2016 00:48:51 +0000 (17:48 -0700)]
Minor String.Split cleanup to align more closely with CoreRT (dotnet/coreclr#7185)
Commit migrated from https://github.com/dotnet/coreclr/commit/
73b8112865f9b4a0aa7576cb5bf2747a08cfb652
Pat Gavlin [Wed, 14 Sep 2016 23:40:41 +0000 (16:40 -0700)]
Merge pull request dotnet/coreclr#7189 from pgavlin/x86-cmp-long
Implement long compare lowering for x86.
Commit migrated from https://github.com/dotnet/coreclr/commit/
c929358d7d46997f7e5e14042f88c03ddc4e53b7
Carol Eidt [Wed, 14 Sep 2016 23:37:33 +0000 (16:37 -0700)]
Merge pull request dotnet/coreclr#7188 from CarolEidt/Fix7160
Allow GT_OBJ for Arm64
Commit migrated from https://github.com/dotnet/coreclr/commit/
7fbc418b6cc41bed70f749bac47f18d6d82fd187
Vance Morrison [Wed, 14 Sep 2016 22:45:58 +0000 (15:45 -0700)]
Merge pull request dotnet/coreclr#6892 from jamesqo/list-optimizations
Copy directly to the internal buffer in List.InsertRange
Commit migrated from https://github.com/dotnet/coreclr/commit/
abfc08fb2d3b282202472e2a5d5dad42984a226a
Pat Gavlin [Wed, 14 Sep 2016 21:22:52 +0000 (14:22 -0700)]
Address more PR feedback.
Commit migrated from https://github.com/dotnet/coreclr/commit/
9667abeeabc847914933915a8a153ef27d49ec7c
Pat Gavlin [Wed, 14 Sep 2016 20:18:06 +0000 (13:18 -0700)]
Address PR feedback.
Commit migrated from https://github.com/dotnet/coreclr/commit/
1288ca5b05d84dee01b1612d93cb1a04ecc2c727
Swaroop Sridhar [Wed, 14 Sep 2016 19:26:20 +0000 (12:26 -0700)]
Merge pull request dotnet/coreclr#6974 from swaroop-sridhar/gc86
Implement GcInfo v2 for X86
Commit migrated from https://github.com/dotnet/coreclr/commit/
f4b86dd41399be6c6863a49aff4086557a20ef2a
Michelle McDaniel [Wed, 14 Sep 2016 18:20:01 +0000 (11:20 -0700)]
Merge pull request dotnet/coreclr#7187 from adiaaida/rotate
Remove NYI for x86 long rotate
Commit migrated from https://github.com/dotnet/coreclr/commit/
fb4574cfd73af5eb123c0f8f06ba1f7bb54130cc
SaeHie Park [Wed, 14 Sep 2016 18:00:54 +0000 (03:00 +0900)]
ARM/Linux: Add codename xenial (dotnet/coreclr#7158)
Add Ubuntu 16.04 code name Xenial to cross rootfs option
Commit migrated from https://github.com/dotnet/coreclr/commit/
d5acaa816698ce80cc8f234b88a4b13199b2296e
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.
Commit migrated from https://github.com/dotnet/coreclr/commit/
4351a27c18a88c50c0e701975d9a58f5ade57e78
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 dotnet/coreclr#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.
Commit migrated from https://github.com/dotnet/coreclr/commit/
4dc7c44f3e466067b73f7f28c0b69a7878b4ca20
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 dotnet/coreclr#4379
Commit migrated from https://github.com/dotnet/coreclr/commit/
4871121dbb7d1ee3282f9beb950cd73fb4f8a95b
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.
Commit migrated from https://github.com/dotnet/coreclr/commit/
48c853d0e2ba23e5ceb34b4081697dc80cbfd579
Jan Vorlicek [Wed, 14 Sep 2016 14:59:28 +0000 (16:59 +0200)]
Fix Unix issue with string address below 64kB (dotnet/coreclr#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.
Commit migrated from https://github.com/dotnet/coreclr/commit/
4436701ea538c5ce15861eed3ee9ed57528ce032
Kyungwoo Lee [Wed, 14 Sep 2016 14:54:59 +0000 (08:54 -0600)]
Merge pull request dotnet/coreclr#7012 from kyulee1/fix6844
X86: Fix inline assertion
Commit migrated from https://github.com/dotnet/coreclr/commit/
f627ae79cf4828dadbb7ad3a99061e9721934fc9
Justin Van Patten [Wed, 14 Sep 2016 13:55:39 +0000 (06:55 -0700)]
Update new String.Split methods to use optional params (dotnet/coreclr#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)`.
Commit migrated from https://github.com/dotnet/coreclr/commit/
28a41c5bbfa9889f080f75d18af463135264d76f
Swaroop Sridhar [Wed, 14 Sep 2016 08:06:08 +0000 (01:06 -0700)]
Use the correct HijackHelper for X86 FP (dotnet/coreclr#7182)
On X86, the helper OnHijackFPTripThread must be used for hijacking
methods returning a float value.
Commit migrated from https://github.com/dotnet/coreclr/commit/
e8824a7956801154cbadf167be2f2e55f833670f
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 dotnet/coreclr#7160
Commit migrated from https://github.com/dotnet/coreclr/commit/
1accf7ebbe677adc0558fdbd78c356454c14dcee
smile21prc [Tue, 13 Sep 2016 23:47:15 +0000 (16:47 -0700)]
Merge pull request dotnet/coreclr#7177 from smile21prc/coreclr-perf
Extend the coreclr Windows perf run result lifetime
Commit migrated from https://github.com/dotnet/coreclr/commit/
d2ffcb58c64c9c5ff2cd21740349799c0c43b370
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.
Commit migrated from https://github.com/dotnet/coreclr/commit/
8a681fb6659e7e7e32afebe39df690e77d95e1be
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 (dotnet/coreclr#7006)
Commit migrated from https://github.com/dotnet/coreclr/commit/
26aa35e2e8fc640ccb399592e50fefd20a06e073
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 dotnet/coreclr#7173 is
filed with x86 legacy back-end.
With x86 ryujit back-end, there is an infinite loop from dotnet/coreclr#7038.
Fixes dotnet/coreclr#6844
Commit migrated from https://github.com/dotnet/coreclr/commit/
f47f831dda9d309b7451035a6d40aac4cb044dc2
Bruce Forstall [Tue, 13 Sep 2016 21:18:12 +0000 (14:18 -0700)]
Merge pull request dotnet/coreclr#7164 from BruceForstall/FixTestExclusions
Add issue comments to excluded tests
Commit migrated from https://github.com/dotnet/coreclr/commit/
52b9596fe6c6523ff2adb70ddb0c782e2581508b
smile21prc [Tue, 13 Sep 2016 21:14:12 +0000 (14:14 -0700)]
Merge pull request dotnet/coreclr#7172 from smile21prc/coreclr-perf
Enable archive for coreclr perf Linux runs, and fix a few bugs.
Commit migrated from https://github.com/dotnet/coreclr/commit/
5585afe45c170de53c9a261979926c992544b0e9
Smile Wei [Thu, 8 Sep 2016 19:25:54 +0000 (12:25 -0700)]
List all generated perf .xml files.
Commit migrated from https://github.com/dotnet/coreclr/commit/
626c27756429923fa96ca49e05ca2a1862acef37
Michelle McDaniel [Tue, 13 Sep 2016 20:36:51 +0000 (13:36 -0700)]
Merge pull request dotnet/coreclr#7166 from adiaaida/removeNYIs
Remove unnecessary NYIs in Decompose
Commit migrated from https://github.com/dotnet/coreclr/commit/
2ba19ec8b4c14c1e12bf1e3b8d8077029358a494
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.
Commit migrated from https://github.com/dotnet/coreclr/commit/
c1ec8c648d305217d45eb29ff0d1d64cf9e34d0c
Sivarv [Tue, 13 Sep 2016 17:55:51 +0000 (10:55 -0700)]
Merge pull request dotnet/coreclr#7145 from sivarv/JitStressRegs8Fix
Fix to dotnet/coreclr#7091 - Assert failure 'currentInterval && (currentInterval->isLocalVar || currentRefPosition->isFixedRegRef || currentInterval->hasConflictingDefUse)'
Commit migrated from https://github.com/dotnet/coreclr/commit/
5cd7154f1f7cf5cdbf918c5923ffc70a1ecf4bb3
Bruce Forstall [Tue, 13 Sep 2016 17:34:46 +0000 (10:34 -0700)]
Add issue comments to excluded tests
Commit migrated from https://github.com/dotnet/coreclr/commit/
3f8b7e60cee89f71605e2648c8ec761cf5ee7d2c
Justin Van Patten [Tue, 13 Sep 2016 17:25:13 +0000 (10:25 -0700)]
Add Array.Reverse<T> (dotnet/coreclr#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>`.
Commit migrated from https://github.com/dotnet/coreclr/commit/
b33e7563569135c5040958fd97b74b96607db3d6
Stephen Toub [Tue, 13 Sep 2016 16:36:44 +0000 (12:36 -0400)]
Remove a field from the CopyToAsync async state machine (dotnet/coreclr#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.
Commit migrated from https://github.com/dotnet/coreclr/commit/
6f399b187eb286b2b682fe9efaad531495770638
Dmitri-Botcharnikov [Tue, 13 Sep 2016 16:25:33 +0000 (20:25 +0400)]
Enable Debian Jessie for ARM rootfs build (dotnet/coreclr#7140)
Commit migrated from https://github.com/dotnet/coreclr/commit/
143198ec2e0735320a4bfedf391c2f647b586725
chrisaut [Tue, 13 Sep 2016 14:58:06 +0000 (21:58 +0700)]
Replace % inside loop of Random ctor (dotnet/coreclr#7156)
Commit migrated from https://github.com/dotnet/coreclr/commit/
73ce68fd483595410e0d04d5a134e74998acc3b9
Mike McLaughlin [Tue, 13 Sep 2016 12:48:27 +0000 (05:48 -0700)]
Fix funceval for enregistered value types arguments. (dotnet/coreclr#7149)
Issue dotnet/coreclr#7115.
MethodDescCallSide.CallTargetWorker used by funceval needed to deal with
enregistered 16 byte value types arguments not just return values.
Commit migrated from https://github.com/dotnet/coreclr/commit/
c3a7ed0dcc7a58eaaaee2fa5d5900bb0efb4694a
Jan Kotas [Tue, 13 Sep 2016 10:42:29 +0000 (03:42 -0700)]
Merge pull request dotnet/coreclr#7153 from dotnet-bot/from-tfs
Merge changes from TFS
Commit migrated from https://github.com/dotnet/coreclr/commit/
849da1bdf828256624dac634eefe8590e48f0c26
Bruce Forstall [Tue, 13 Sep 2016 05:47:50 +0000 (22:47 -0700)]
Fix uninitialized local build break
[tfs-changeset: 1626936]
Commit migrated from https://github.com/dotnet/coreclr/commit/
4f3fdcf297ffc9e3db2f8ff60528fef0a1339a95
Bruce Forstall [Tue, 13 Sep 2016 05:26:47 +0000 (22:26 -0700)]
Merge pull request dotnet/coreclr#7130 from BruceForstall/Fix7086
RyuJIT x86: Implement GS cookie check for functions with tailcall
Commit migrated from https://github.com/dotnet/coreclr/commit/
d2f01b80155c18e9559456c5d3d06f9d53144da9
Peter Kukol [Tue, 13 Sep 2016 04:35:54 +0000 (22:35 -0600)]
Clean up COMPlus_JitMemStats / MEASURE_MEM_ALLOC (dotnet/coreclr#7119)
Clean up COMPlus_JitMemStats / MEASURE_MEM_ALLOC (all of it is off by default for non-DEBUG builds).
Commit migrated from https://github.com/dotnet/coreclr/commit/
f718e6ac78184a2ac3c0d89ba10c99bd50390a32
Michelle McDaniel [Tue, 13 Sep 2016 04:18:59 +0000 (21:18 -0700)]
Merge pull request dotnet/coreclr#7105 from adiaaida/umodLong
Implement DecomposeUMod
Commit migrated from https://github.com/dotnet/coreclr/commit/
e0522e44fb771ca901811e7854da8a73aa52ad54
Michelle McDaniel [Thu, 8 Sep 2016 15:52:37 +0000 (08:52 -0700)]
Implement DecomposeUMod
This change implements DecomposeUMod for x86 RyuJIT. The only GT_UMOD
nodes that make it to decompose are ones where op2 is a cast from a
constant int to long. Because op2 is an int, we can guarantee that the
result will be an int. Therefore, in decompose, we change the type of the
GT_UMOD to be TYP_INT, and replace op2 with its lo part. We set the high
part of the GT_LONG to be 0, since the divisor < 0x3fffffff. In lower, we need
to make sure that loOp1 is in RAX and hiOp1 is in RDX, which is where
idiv expects them to be. We also increase the number of sources since
there are now three sources. In codegen, we need to make sure that the hi
and lo parts of the dividend are in the correct registers for idiv, then
we can just use the normal logic for GT_UMOD.
Commit migrated from https://github.com/dotnet/coreclr/commit/
ed2c249fc79a8129a01056c6a3bbde8ccad63715
Pat Gavlin [Tue, 13 Sep 2016 00:34:49 +0000 (17:34 -0700)]
Merge pull request dotnet/coreclr#7126 from mikedn/x86-cast-long-int-overflow
Implement long to int casts with overflow for x86
Commit migrated from https://github.com/dotnet/coreclr/commit/
08de00f373d1ff509ba00769bb911db346489d79
Bruce Forstall [Sat, 10 Sep 2016 00:07:30 +0000 (17:07 -0700)]
RyuJIT x86: Implement GS cookie check for functions with tailcall
Fixes dotnet/coreclr#7086, one of the most common asserts in stress runs.
I moved some helper code from the legacy codegen to codegencommon
so it could be used. I also added the code to generate the GS
cookie check for tailcall via helper code (on x64, we never
generate GS cookie checks when there are tailcalls).
Commit migrated from https://github.com/dotnet/coreclr/commit/
186cec1bdfa77f8366b1f07ff6ab3bde7082b781
Bruce Forstall [Mon, 12 Sep 2016 22:36:29 +0000 (15:36 -0700)]
Merge pull request dotnet/coreclr#7148 from BruceForstall/Fix7127
Restrict x86 legacy JIT struct promotion
Commit migrated from https://github.com/dotnet/coreclr/commit/
21e4eb9cd224c6fa257c810d270e3ff45b12a63e
Pat Gavlin [Mon, 12 Sep 2016 22:28:26 +0000 (15:28 -0700)]
Merge pull request dotnet/coreclr#7133 from mikedn/x86-cast-long-float
Implement long to float cast for x86
Commit migrated from https://github.com/dotnet/coreclr/commit/
52931c20b0e98fd0ad3145a43b8e2c4dbd9114c3
Vance Morrison [Mon, 12 Sep 2016 22:16:59 +0000 (15:16 -0700)]
Merge pull request dotnet/coreclr#7102 from vancem/ETWGCDumpFix.9-7-16
Fix Issue dumping GC heap with ETW more than once
Commit migrated from https://github.com/dotnet/coreclr/commit/
7d5bc8321058c6fce4a511e96ff4059171124ff3
Bruce Forstall [Mon, 12 Sep 2016 21:19:12 +0000 (14:19 -0700)]
Restrict x86 legacy JIT struct promotion
Don't allow struct promotion for custom layout structs. RyuJIT started
supporting this, but the legacy x86 JIT doesn't properly push such promoted
structs as arguments for calls.
Fixes the assert in dotnet/coreclr#7127, but the test fails with a crash in a later test case.
Commit migrated from https://github.com/dotnet/coreclr/commit/
095910a2b119d25bbafe90593c40bf93bf53f85c
Jan Kotas [Mon, 12 Sep 2016 20:39:11 +0000 (13:39 -0700)]
Merge pull request dotnet/coreclr#7136 from benaadams/enviro
Updated formatted GetResourceString code reduction
Commit migrated from https://github.com/dotnet/coreclr/commit/
762833dae43d312a3693b6a767771200e476fed9
Jose Perez Rodriguez [Mon, 12 Sep 2016 18:42:46 +0000 (11:42 -0700)]
Merge pull request dotnet/coreclr#7142 from joperezr/FillOutMissingStringMembers
Adding missing String members to coreclr
Commit migrated from https://github.com/dotnet/coreclr/commit/
cbd1f37b7b74647644686a9143d05fbdd15162c8
sivarv [Mon, 12 Sep 2016 18:29:53 +0000 (11:29 -0700)]
Fix to dotnet/coreclr#7091.
Commit migrated from https://github.com/dotnet/coreclr/commit/
1cbab8dad393ec971e2d954a1f58e8ee7c62c65b
Davis Goodin [Mon, 12 Sep 2016 18:15:48 +0000 (13:15 -0500)]
Merge pull request dotnet/coreclr#6791 from dagood/upgrade-xunit-runner
Upgrade xunit runner to 2.2.0-beta2-build3300
Commit migrated from https://github.com/dotnet/coreclr/commit/
2508d5e3100039558941284651fc3181e0ff7ee3
Jose Perez Rodriguez [Mon, 12 Sep 2016 17:10:22 +0000 (10:10 -0700)]
Removing one String member to avoid depending on ArgIterator
Commit migrated from https://github.com/dotnet/coreclr/commit/
9e408b7d1539c184ea65f50411670069fa5e77f7
Jose Perez Rodriguez [Mon, 12 Sep 2016 16:44:39 +0000 (09:44 -0700)]
Adding missing String members to coreclr
Commit migrated from https://github.com/dotnet/coreclr/commit/
8d363be3973019a451a220aa8b49d3a3317dc357
Mike Danes [Sun, 11 Sep 2016 12:49:12 +0000 (15:49 +0300)]
Implement long to float cast for x86
Convert long to float/double casts to helper calls. Despite the call this version is 2x faster than JIT32's FILD implementation which suffers a significant store forwarding stall penalty.
Commit migrated from https://github.com/dotnet/coreclr/commit/
398317d18b0845681671ba449b8d8d9ca2cd505c
Ben Adams [Sun, 11 Sep 2016 21:26:19 +0000 (22:26 +0100)]
Fix Environment no-inlining for mscorlib
Commit migrated from https://github.com/dotnet/coreclr/commit/
85f22161364a122ba047175e82d97ec96038e8c6
James Ko [Wed, 31 Aug 2016 15:12:13 +0000 (11:12 -0400)]
Reduce code bloat around formatted GetResourceString calls
Commit migrated from https://github.com/dotnet/coreclr/commit/
b28dc79e88dbd6a94d1a7eec23ed97cde1409174
Peter Kukol [Sat, 10 Sep 2016 00:27:19 +0000 (18:27 -0600)]
Merge pull request dotnet/coreclr#7067 from pkukol/timing_bit_rot
Fix some timing code bit rot, plus minor cleanup.
Commit migrated from https://github.com/dotnet/coreclr/commit/
0df8ca52b6ccbceeb73798318681ff8ed2842b1f
Pat Gavlin [Fri, 9 Sep 2016 23:22:07 +0000 (16:22 -0700)]
Merge pull request dotnet/coreclr#7125 from pgavlin/ModelAssignByRefKillSet
Model the kill set for ASSIGN_BYREF and stop generating movsq on x86.
Commit migrated from https://github.com/dotnet/coreclr/commit/
0e17ee468095df609921271e4c6513dac815f068
Bruce Forstall [Fri, 9 Sep 2016 22:02:29 +0000 (15:02 -0700)]
Merge pull request dotnet/coreclr#7122 from BruceForstall/Fix7092
Fix dotnet/coreclr#7092
Commit migrated from https://github.com/dotnet/coreclr/commit/
f5defca1cfbbe2b127ec251b911175f6ada626ec
Bruce Forstall [Fri, 9 Sep 2016 21:59:09 +0000 (14:59 -0700)]
Merge pull request dotnet/coreclr#7120 from BruceForstall/Fix7093
Fix dotnet/coreclr#7093
Commit migrated from https://github.com/dotnet/coreclr/commit/
cf251889bb85b807b8661311980dd1be462dbe73
Bruce Forstall [Fri, 9 Sep 2016 21:58:08 +0000 (14:58 -0700)]
Merge pull request dotnet/coreclr#7114 from BruceForstall/Fix7100
Fix dotnet/coreclr#7100
Commit migrated from https://github.com/dotnet/coreclr/commit/
ff53de3231bcd43e077f6a446c01520c2ed1bbea
Mike Danes [Fri, 9 Sep 2016 20:44:29 +0000 (23:44 +0300)]
Implement long to int casts with overflow for x86
Commit migrated from https://github.com/dotnet/coreclr/commit/
6942f3d49b1d2659cfc228b2c9168849fa0dbdf5
Bruce Forstall [Fri, 9 Sep 2016 17:47:45 +0000 (10:47 -0700)]
Fix dotnet/coreclr#7092
The problem is genCodeForInitBlkUnroll() is trying to generate:
```
mov byte ptr [edi], si
```
which is not legal: ebp/esi/edi/esp don't have byte register versions on x86.
This change requires the source register to be an x86 byteable register in
this case.
Note that legacy JIT generates stosb for this test.
Commit migrated from https://github.com/dotnet/coreclr/commit/
76d6e0f2f2c0707ff7a47bf0673fcfcf698f179b
Pat Gavlin [Fri, 9 Sep 2016 19:26:44 +0000 (12:26 -0700)]
Do not use movsq on x86.
This instruction is only available when targeting amd64.
Commit migrated from https://github.com/dotnet/coreclr/commit/
7dc24537a059284db2ba55f77458e6e4c78c7f43
Pat Gavlin [Fri, 9 Sep 2016 18:04:19 +0000 (11:04 -0700)]
Model the kill set for ASSIGN_BYREF on x86.
This helper kills esi, edi, and ecx.
Commit migrated from https://github.com/dotnet/coreclr/commit/
0224d864af72cc2fa414bf7daedeb6d559cb1140
Gaurav Khanna [Fri, 9 Sep 2016 17:56:15 +0000 (10:56 -0700)]
Enable Win32Arm CI support
Commit migrated from https://github.com/dotnet/coreclr/commit/
8bffd5159d09cd83586402c75e0ae82ca5b4197e
Sivarv [Fri, 9 Sep 2016 17:16:16 +0000 (10:16 -0700)]
Merge pull request dotnet/coreclr#7111 from sivarv/jitstressregs2Fix
Fix to dotnet/coreclr#7087 - x86 RyuJIT JitstressRegs=2 assert failure
Commit migrated from https://github.com/dotnet/coreclr/commit/
4033fe5af8469d3e0c81d99cd2fa842c5baea57c
Kyungwoo Lee [Fri, 9 Sep 2016 16:32:39 +0000 (10:32 -0600)]
Merge pull request dotnet/coreclr#7108 from kyulee1/igmeta
ILDAMS: Ignore Metadata flag for CoreCLR
Commit migrated from https://github.com/dotnet/coreclr/commit/
e3924fd0e3c65b2cae1d7c9d844d7840115916fb
Sean Gillespie [Fri, 9 Sep 2016 16:32:24 +0000 (09:32 -0700)]
Merge pull request dotnet/coreclr#7121 from swgillespie/request-build-break
Only reference IGCHeap::gcHeapType when FEATURE_SVR_GC is defined
Commit migrated from https://github.com/dotnet/coreclr/commit/
bd2b72b3516b36a10d5e51fd255df1f2efbb665c
Sean Gillespie [Fri, 9 Sep 2016 13:53:48 +0000 (06:53 -0700)]
Only reference IGCHeap::gcHeapType when FEATURE_SVR_GC is defined
Commit migrated from https://github.com/dotnet/coreclr/commit/
c4d22a210bc28923906b205b219e8bf5c8e58926
Jan Vorlicek [Fri, 9 Sep 2016 08:57:45 +0000 (10:57 +0200)]
Fix enregistered max size constants on Unix AMD64 (dotnet/coreclr#7117)
This change fixes ENREGISTERED_PARAMTYPE_MAXSIZE and ENREGISTERED_RETURNTYPE_INTEGER_MAXSIZE
constants that were not updated properly for the Unix AMD64 ABI. The values are used
for Unix/AMD64 for marshalling and typedbyref parameters and our tests probably don't
execute those code paths with structs larger than 8 bytes.
Commit migrated from https://github.com/dotnet/coreclr/commit/
23c166d03a673e515131c2bb8777de308c0637ce
Jan Kotas [Fri, 9 Sep 2016 02:35:16 +0000 (19:35 -0700)]
Merge pull request dotnet/coreclr#7118 from dotnet/revert-6889-StaticField
Revert "Fix IMGREL32 static field addr value-num blindspot"
Commit migrated from https://github.com/dotnet/coreclr/commit/
14628f3218c4678817dedbb41f396ac62d139b8d
Bruce Forstall [Fri, 9 Sep 2016 01:09:34 +0000 (18:09 -0700)]
Fix dotnet/coreclr#7093
This is an assert due to how STRESS_64RSLT_MUL is implemented. This
stress mode converts:
```
/--* lclVar int V01 loc0
* * int
\--* lclVar int V01 loc0
```
to:
```
* cast int <- long
| /--* cast long <- int
| | \--* lclVar int V01 loc0
\--* * long
\--* cast long <- long
\--* nop long
\--* lclVar int V01 loc0
```
Thus, the long 'nop' node is above an 'int' operand node. This led to an assert
in genCodeForTreeLng() that the lclVar was type long, which is isn't.
I added yet another cast under the 'nop' to fix this typing problem:
```
* cast int <- long
| /--* cast long <- int
| | \--* lclVar int V01 loc0
\--* * long
\--* cast long <- long
\--* nop long
\--* cast long <- int
\--* lclVar int V01 loc0
```
Commit migrated from https://github.com/dotnet/coreclr/commit/
c16b6bc96c1aa1edd9a3085a12f12a9df4169da5
Jan Kotas [Fri, 9 Sep 2016 00:58:55 +0000 (17:58 -0700)]
Revert "Fix IMGREL32 static field addr value-num blindspot"
Commit migrated from https://github.com/dotnet/coreclr/commit/
9f7eabe48460518fb7215de1fabefdc4a6800af1
Sean Gillespie [Fri, 9 Sep 2016 00:45:58 +0000 (17:45 -0700)]
Merge pull request dotnet/coreclr#7116 from dotnet-bot/from-tfs
Merge changes from TFS
Commit migrated from https://github.com/dotnet/coreclr/commit/
193c5816dff234aa7504826eb559360607748563
dotnet-bot [Fri, 9 Sep 2016 00:24:16 +0000 (17:24 -0700)]
Fix a build break introduced by GHdotnet/coreclr#6764
[tfs-changeset: 1626397]
Commit migrated from https://github.com/dotnet/coreclr/commit/
1d90f2cbb3e52323e14354e6873c90b20fb63081
Bruce Forstall [Thu, 8 Sep 2016 23:42:22 +0000 (16:42 -0700)]
Fix dotnet/coreclr#7100
This issue is the following assert:
```
Assert failure '!emitComp->opts.compReloc || memBase->IsIconHandle()'
```
while ngen'ing mscorlib on desktop.
We're trying to generate
```
cmp ebx, dword ptr [0000H]
```
(due to inlining). But, emitInsBinary() doesn't expect a zero address that
is not a relocatable handle.
Simply change the assert to allow this. The code then generates the correct
zero base address.
Commit migrated from https://github.com/dotnet/coreclr/commit/
08f3ae19c6e07e6772ace96706012ed87e4e6f2e
Rahul Kumar [Thu, 8 Sep 2016 23:27:42 +0000 (16:27 -0700)]
Merge pull request dotnet/coreclr#7112 from rahku/appdomain
Add AppContext.UnhandledException to ref file
Commit migrated from https://github.com/dotnet/coreclr/commit/
01b87afda3e9b9f21af51c334eb7fb5854070c4d
Rahul Kumar [Thu, 8 Sep 2016 23:17:06 +0000 (16:17 -0700)]
Add AppContext.UnhandledException to ref file
Commit migrated from https://github.com/dotnet/coreclr/commit/
587840091d335f14ded4b6bec514487b8ac5e5e4
sivarv [Thu, 8 Sep 2016 22:39:08 +0000 (15:39 -0700)]
Fix to dotnet/coreclr#7087
Commit migrated from https://github.com/dotnet/coreclr/commit/
c526b321b89bd50b0da5858b9f5853f58b6b849f
Eugene Rozenfeld [Thu, 8 Sep 2016 22:28:47 +0000 (15:28 -0700)]
Merge pull request dotnet/coreclr#7071 from erozenfeld/StackOverflow
Make GT_LIST processing non-recursive to avoid StackOverflow.
Commit migrated from https://github.com/dotnet/coreclr/commit/
871bb909502f205bad8cf47036a37615fbd1ba7a
Kyungwoo Lee [Thu, 8 Sep 2016 19:59:39 +0000 (12:59 -0700)]
ILDASM: Ignore Metadata flag for CoreCLR
Full metadata emission is disabled under coreclr.
So is ILDASM instead of failing during the run.
Commit migrated from https://github.com/dotnet/coreclr/commit/
f2e28ea518e4ff42345b99eea2d11e95b58a7dc0
Peter Kukol [Wed, 7 Sep 2016 15:58:44 +0000 (08:58 -0700)]
Fix the fixes.
Commit migrated from https://github.com/dotnet/coreclr/commit/
b529eb4a7377b9430d4da86f82e56949d68b087f
Peter Kukol [Tue, 6 Sep 2016 18:28:30 +0000 (11:28 -0700)]
Fix some timing code bit rot, plus minor cleanup.
Commit migrated from https://github.com/dotnet/coreclr/commit/
af6b1ce7d730a7c58c64cb63f3c44265484c5bd2
Pat Gavlin [Thu, 8 Sep 2016 20:24:00 +0000 (13:24 -0700)]
Merge pull request dotnet/coreclr#7107 from pgavlin/gh7089
Fix dotnet/coreclr#7089.
Commit migrated from https://github.com/dotnet/coreclr/commit/
d54da68a2ba1c1b6345bf66931621b17e1d97f9e
Sean Gillespie [Thu, 8 Sep 2016 20:06:21 +0000 (13:06 -0700)]
Merge pull request dotnet/coreclr#6764 from swgillespie/gc-interface-3
Move the GC behind an interface and use that interface in the VM
Commit migrated from https://github.com/dotnet/coreclr/commit/
1c43df95410e57f0d40e6ee55012ef65bdac2487
Sean Gillespie [Thu, 8 Sep 2016 18:27:24 +0000 (11:27 -0700)]
Introduce an interface separating the GC and the VM,
modifying the VM to utilize this interface.
Introduce an interface separating the GC and the rest of the VM
Remove static members of both IGCHeap and IGCHeapInternal and move the management of the singular GC heap to the VM.
Rename uses of IGCHeap in the VM to GCHeapHolder, as well as other misc. renames throughout the VM and GC.
Split each interface function into categories, document them, use consistent formatting across the interface
Undo some accidental find/replace collateral damage
Remove all ifdefs from the GC interface
Deduplicate function declarations between IGCHeap and IGCHeapInternal, expose AllocAlign8 through the interface and the reference to alloc_context to repair the ARM build
Paper cut: false -> nullptr
Repair the ARM and x86 builds
Rename GCHeapHolder -> GCHeapUtilities and address documentation feedback
Rebase against master
Rename gcholder.h/cpp -> gcheaputilities.h/cpp
Fix an uninitialized field on alloc_context causing test failures on clang
Rename the include guard for gcheaputilities.h
Un-breaks SOS by making the following changes:
1) Instructs the DAC to look for IGCHeap::gcHeapType by name,
instead of assuming that it exists near g_pGCHeap,
2) Eliminate all virtual calls on IGCHeap in the DAC, since we cannot
dispatch on an object in another process,
3) Because of 2, expose the number of generations past the GC interface
using a static variable on IGCHeap that the DAC can read directly.
repair the Windows build
Commit migrated from https://github.com/dotnet/coreclr/commit/
6519911fbccbec049f9592484f69c213b4b78264
Pat Gavlin [Thu, 8 Sep 2016 17:52:21 +0000 (10:52 -0700)]
Merge pull request dotnet/coreclr#7106 from pgavlin/DecompTP
Improve decomp throughput.
Commit migrated from https://github.com/dotnet/coreclr/commit/
65c2ff78e0e88f5052751747f6686084caab3d4c
Pat Gavlin [Thu, 8 Sep 2016 16:36:20 +0000 (09:36 -0700)]
Return false from isRegPairType for RyuJIT.
The RyuJIT backend does not use regpair types, so this method should
simply return false when that backend is in use. In the future we
should consider removing this method (and other regpair-related code).
Fixes dotnet/coreclr#7089.
Commit migrated from https://github.com/dotnet/coreclr/commit/
57d6887745844ea882b3dde4c54155e4f57f41ff
Rahul Kumar [Thu, 8 Sep 2016 16:44:01 +0000 (09:44 -0700)]
Merge pull request dotnet/coreclr#6995 from rahku/appdomain
Exposes runtime functionality to Appdomain implementation in corefx
Commit migrated from https://github.com/dotnet/coreclr/commit/
70fe825e7245a97c32d9af4212d668e6c1f1e3c5
Pat Gavlin [Thu, 8 Sep 2016 16:31:08 +0000 (09:31 -0700)]
Merge pull request dotnet/coreclr#4986 from mikedn/x86-cast-int-long
Implement integer to long/ulong casts for x86
Commit migrated from https://github.com/dotnet/coreclr/commit/
a04c2e30fc3a07640bb94d43d97976975a3676bc
Pat Gavlin [Thu, 8 Sep 2016 14:27:36 +0000 (07:27 -0700)]
Improve decomp throughput.
Don't find uses unless necessary. This saves about 50 milliseconds while
crossgen'ing mscorlib.
Commit migrated from https://github.com/dotnet/coreclr/commit/
db2281ccbcc610ca255d174a3d3e5cf287776089