Prerequisite work item for the CSE of GT_CNS_INT for ARM64 work item (#39021)
authorBrian Sullivan <briansul@microsoft.com>
Fri, 10 Jul 2020 15:33:25 +0000 (08:33 -0700)
committerGitHub <noreply@github.com>
Fri, 10 Jul 2020 15:33:25 +0000 (08:33 -0700)
commit389c9810929b8a08a81c03759bcf4fe2fd868551
treefade1a2b874e8ed8700e441037e7299848a52de9
parenteda20d006dddb6e6e38c1b1139893472321b9d25
Prerequisite work item for the CSE of GT_CNS_INT for ARM64 work item  (#39021)

* Prerequisite work item for the CSE of GT_CNS_INT work item  (zero code diffs in the framework libraries)

Mark nodes that use the division by constant optimization with GTF_DIV_BY_CNS_OPT
Don't perform const prop on expressions marked with GTF_DONT_CSE, as this would undo a constant CSE
Fix for bug in AssertionProp where we assign the wrong value number when folding a conditional
When dumping the BasicBlocks print hascall when the block is marked with BBF_HAS_CALL
Call CheckDivideByConstOptimized when early prop inserts a constant node
added methods: UsesDivideByConstOptimized, CheckDivideByConstOptimized and MarkDivideByConstant
Propagate any side effect flags in the gtCallAddr field of an indirect call node
Call CheckDivideByConstOptimized when morphing a divide or remainder nodes
Don't allow changing a floating point GT_DIV into a GT_MUL in fgMorph after the global morph phase
In loop hoisting, set BBF_HAS_CALL if we hoist a tree that contains a call
When hoisting something that requires a physical register, clear that requirement in the hoisted copy

* Code review feedback

* Remove two asserts in lower because it will always make an optimization for UDIV and UMOD with a power of two divisor.
src/coreclr/src/jit/assertionprop.cpp
src/coreclr/src/jit/block.cpp
src/coreclr/src/jit/earlyprop.cpp
src/coreclr/src/jit/gentree.cpp
src/coreclr/src/jit/gentree.h
src/coreclr/src/jit/lower.cpp
src/coreclr/src/jit/morph.cpp
src/coreclr/src/jit/optimizer.cpp