JIT: Set GTF_ORDER_SIDEEFF for some nodes with invisible dependencies (#78698)
authorJakob Botsch Nielsen <Jakob.botsch.nielsen@gmail.com>
Mon, 28 Nov 2022 13:52:59 +0000 (14:52 +0100)
committerGitHub <noreply@github.com>
Mon, 28 Nov 2022 13:52:59 +0000 (14:52 +0100)
commitf35444a98a0dfc8767ef960a5c9cfca7109ce519
tree7d8c3f47db50c354d20ff1968e64a6d6c61c3f6a
parentceb6a53e71a715f7b3ccd7663648280802d916b9
JIT: Set GTF_ORDER_SIDEEFF for some nodes with invisible dependencies (#78698)

We have a few places where we create the pattern "COMMA(some check, some value)". In some of these cases there may not be any visible dependency (e.g. use of a defined value) which makes the dependency invisible to the JIT.

If the value is safe to compute only because of the check (for example, a bounds check + indexing operation), and if the value otherwise has no side effects, then nothing prevented the backend or optimizations from reordering these nodes.

A particular problem we may have is around array indexing and bounds checks. Creating an arbitrary illegal byref is not allowed, but to the JIT this node is just a normal node that is completely free of any side effects. Before this change nothing was preventing us from reordering the bounds checks with the computation of the array element.

Fix #78554

Co-authored-by: Alan Hayward <alan.hayward@arm.com>
src/coreclr/jit/importer.cpp
src/coreclr/jit/importercalls.cpp
src/coreclr/jit/morph.cpp
src/coreclr/jit/optimizer.cpp
src/tests/JIT/Regression/JitBlue/Runtime_78554/Runtime_78554.cs [new file with mode: 0644]
src/tests/JIT/Regression/JitBlue/Runtime_78554/Runtime_78554.csproj [new file with mode: 0644]