projects
/
platform
/
upstream
/
coreclr.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
73b3ec3
)
Port the fix for Issue 17969 to Rel/2.1
author
Carol Eidt
<carol.eidt@microsoft.com>
Mon, 2 Jul 2018 21:48:10 +0000
(14:48 -0700)
committer
Carol Eidt
<carol.eidt@microsoft.com>
Mon, 2 Jul 2018 21:51:24 +0000
(14:51 -0700)
src/jit/morph.cpp
patch
|
blob
|
history
diff --git
a/src/jit/morph.cpp
b/src/jit/morph.cpp
index
2c3c280
..
bd07098
100644
(file)
--- a/
src/jit/morph.cpp
+++ b/
src/jit/morph.cpp
@@
-10714,6
+10714,17
@@
GenTree* Compiler::fgMorphCopyBlock(GenTree* tree)
}
}
}
}
+ // Check to see if we are doing a copy to/from the same local block.
+ // If so, morph it to a nop.
+ if ((destLclVar != nullptr) && (srcLclVar == destLclVar) && (destFldSeq == srcFldSeq) &&
+ destFldSeq != FieldSeqStore::NotAField())
+ {
+ JITDUMP("Self-copy; replaced with a NOP.\n");
+ GenTree* nop = gtNewNothingNode();
+ INDEBUG(nop->gtDebugFlags |= GTF_DEBUG_NODE_MORPHED);
+ return nop;
+ }
+
// Check to see if we are required to do a copy block because the struct contains holes
// and either the src or dest is externally visible
//
// Check to see if we are required to do a copy block because the struct contains holes
// and either the src or dest is externally visible
//
@@
-10721,14
+10732,6
@@
GenTree* Compiler::fgMorphCopyBlock(GenTree* tree)
bool srcSingleLclVarAsg = false;
bool destSingleLclVarAsg = false;
bool srcSingleLclVarAsg = false;
bool destSingleLclVarAsg = false;
- if ((destLclVar != nullptr) && (srcLclVar == destLclVar) && (destFldSeq == srcFldSeq))
- {
- // Self-assign; no effect.
- GenTree* nop = gtNewNothingNode();
- INDEBUG(nop->gtDebugFlags |= GTF_DEBUG_NODE_MORPHED);
- return nop;
- }
-
// If either src or dest is a reg-sized non-field-addressed struct, keep the copyBlock.
if ((destLclVar != nullptr && destLclVar->lvRegStruct) || (srcLclVar != nullptr && srcLclVar->lvRegStruct))
{
// If either src or dest is a reg-sized non-field-addressed struct, keep the copyBlock.
if ((destLclVar != nullptr && destLclVar->lvRegStruct) || (srcLclVar != nullptr && srcLclVar->lvRegStruct))
{