From 0cbf06541ac0c95056337a79029559194bfea722 Mon Sep 17 00:00:00 2001 From: Jakob Botsch Nielsen Date: Fri, 16 Dec 2022 13:09:54 +0100 Subject: [PATCH] JIT: Fix switch peeling flags propagation Otherwise we could propagate overlapping flags that change meaning. Extracted from early liveness PR. --- src/coreclr/jit/fgopt.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/coreclr/jit/fgopt.cpp b/src/coreclr/jit/fgopt.cpp index 50bc965a68d0d2..16eb52cf3823e3 100644 --- a/src/coreclr/jit/fgopt.cpp +++ b/src/coreclr/jit/fgopt.cpp @@ -4321,9 +4321,9 @@ bool Compiler::fgOptimizeSwitchJumps() // Update flags // - switchTree->gtFlags = switchTree->AsOp()->gtOp1->gtFlags; - dominantCaseCompare->gtFlags |= dominantCaseCompare->AsOp()->gtOp1->gtFlags; - jmpTree->gtFlags |= dominantCaseCompare->gtFlags; + switchTree->gtFlags = switchTree->AsOp()->gtOp1->gtFlags & GTF_ALL_EFFECT; + dominantCaseCompare->gtFlags |= dominantCaseCompare->AsOp()->gtOp1->gtFlags & GTF_ALL_EFFECT; + jmpTree->gtFlags |= dominantCaseCompare->gtFlags & GTF_ALL_EFFECT; dominantCaseCompare->gtFlags |= GTF_RELOP_JMP_USED | GTF_DONT_CSE; // Wire up the new control flow.