From 4e2c3a9068e2df407e3193fe148d1492a0db5653 Mon Sep 17 00:00:00 2001 From: Eli White Date: Wed, 5 Feb 2025 16:45:39 -0800 Subject: [PATCH] Only set alternate/consequent if terminal is goto --- .../src/HIR/Environment.ts | 2 +- .../src/Optimization/ConstantPropagation.ts | 16 ++++++++++++++-- .../AlignReactiveScopesToBlockScopesHIR.ts | 2 +- .../constant-propagation-ternary-unary.js | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts b/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts index bfd2608739..ec50d85856 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts @@ -632,7 +632,7 @@ const EnvironmentConfigSchema = z.object({ * // output * const x = b; */ - enableTernaryConstantPropagation: z.boolean().default(false), + enableTernaryConstantPropagation: z.boolean().default(true), }); export type EnvironmentConfig = z.infer; diff --git a/compiler/packages/babel-plugin-react-compiler/src/Optimization/ConstantPropagation.ts b/compiler/packages/babel-plugin-react-compiler/src/Optimization/ConstantPropagation.ts index 273039643a..47bcddb0d4 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/Optimization/ConstantPropagation.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/Optimization/ConstantPropagation.ts @@ -190,8 +190,20 @@ function applyConstantPropagation( loc: terminal.loc, }; - fn.body.blocks.get(branchBlock.terminal.consequent)!.kind = 'block'; - fn.body.blocks.get(branchBlock.terminal.alternate)!.kind = 'block'; + block.kind = 'block'; + + const consequent = fn.body.blocks.get( + branchBlock.terminal.consequent, + )!; + const alternate = fn.body.blocks.get(branchBlock.terminal.alternate)!; + + if (consequent.terminal.kind === 'goto') { + consequent.kind = 'block'; + } + + if (alternate.terminal.kind === 'goto') { + alternate.kind = 'block'; + } } break; diff --git a/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/AlignReactiveScopesToBlockScopesHIR.ts b/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/AlignReactiveScopesToBlockScopesHIR.ts index 2b4e890a40..e96ff83dd6 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/AlignReactiveScopesToBlockScopesHIR.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/AlignReactiveScopesToBlockScopesHIR.ts @@ -216,7 +216,7 @@ export function alignReactiveScopesToBlockScopesHIR(fn: HIRFunction): void { if (node == null) { // Transition from block->value block, derive the outer block range CompilerError.invariant(fallthrough !== null, { - reason: `Expected a fallthrough for value block`, + reason: `Expected a fallthrough for value block ${terminal.id}`, loc: terminal.loc, }); const fallthroughBlock = fn.body.blocks.get(fallthrough)!; diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-ternary-unary.js b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-ternary-unary.js index 7dda1f6960..f74185e36a 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-ternary-unary.js +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-ternary-unary.js @@ -4,7 +4,7 @@ import {Stringify} from 'shared-runtime'; function foo() { let _b; const b = true; - _b = !b ? 'bar' : 'baz'; + _b = !b ? 'bar' : false ? 'foo' : 'baz'; return (