JIT: Fix switch peeling flags propagation (#79748)
authorJakob Botsch Nielsen <Jakob.botsch.nielsen@gmail.com>
Sat, 17 Dec 2022 09:10:20 +0000 (10:10 +0100)
committerGitHub <noreply@github.com>
Sat, 17 Dec 2022 09:10:20 +0000 (10:10 +0100)
Otherwise we could propagate overlapping flags that change meaning.
Extracted from early liveness PR.

src/coreclr/jit/fgopt.cpp

index 50bc965..16eb52c 100644 (file)
@@ -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.