[ 
https://issues.apache.org/jira/browse/GROOVY-12065?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18086614#comment-18086614
 ] 

ASF GitHub Bot commented on GROOVY-12065:
-----------------------------------------

testlens-app[bot] commented on PR #2591:
URL: https://github.com/apache/groovy/pull/2591#issuecomment-4639688743

   ## 🚨 TestLens detected 1 failed test 🚨
   
   Here is what you can do:
   
   1) Inspect the test failures carefully.
   2) If you are convinced that some of the tests are flaky, you can mute them 
below.
   3) Finally, trigger a rerun by checking the rerun checkbox.
   
   ### Test Summary
   
   | Check | Project/Task | Test | Runs |
   |---|---|---|---|
   | [Build and test / lts \(17, windows-latest, 
1\)](https://github.com/apache/groovy/actions/runs/27067179914/job/79889976995?pr=2591)
 | :test | GenericsSTCTest > testMockito\(\) | ❌ |
   
   🏷️ Commit: d4cb73bf05d4edb8ba18f4d815876bb5d45ae3b0
   ▶️ Tests:  176508 executed
   🟡 Checks: 40/56 completed
   
   ### Test Failures
   
   <details>
   
   <summary><strong>GenericsSTCTest > testMockito()</strong> (:test in <a 
href="https://github.com/apache/groovy/actions/runs/27067179914/job/79889976995?pr=2591";>Build
 and test / lts (17, windows-latest, 1)</a>)</summary>
   
   ```
   org.codehaus.groovy.control.MultipleCompilationErrorsException: startup 
failed:
   TestScript9823666d411048d19d47efeafdbf4bdc.groovy: 3: unable to resolve 
class org.mockito.Mockito
    @ line 3, column 27.
                  import static org.mockito.Mockito.*
                                ^
   
   1 error
   
        at 
org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:333)
        at 
org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:989)
        at 
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:749)
        at 
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:723)
        at 
groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:423)
        at 
groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:364)
        at 
org.codehaus.groovy.runtime.memoize.ConcurrentCommonCache.getAndPut(ConcurrentCommonCache.java:143)
        at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:364)
        at groovy.lang.GroovyShell.parseClass(GroovyShell.java:665)
        at groovy.lang.GroovyShell.parse(GroovyShell.java:678)
        at groovy.lang.GroovyShell.parse(GroovyShell.java:690)
        at groovy.lang.GroovyShell.evaluate(GroovyShell.java:552)
        at groovy.lang.GroovyShell.evaluate(GroovyShell.java:588)
        at groovy.lang.GroovyShell.evaluate(GroovyShell.java:572)
        at 
groovy.transform.stc.StaticTypeCheckingTestCase.assertScript(StaticTypeCheckingTestCase.groovy:78)
        at 
groovy.transform.stc.GenericsSTCTest.testMockito(GenericsSTCTest.groovy:5962)
   ```
   
   </details>
   
   ### Muted Tests
   > [!NOTE]
   > Checks are currently running using the configuration below.
   
   Select tests to mute in this pull request:
   
   🔲 GenericsSTCTest > testMockito\(\) <!

> Implement peephole optimization for bytecode generation
> -------------------------------------------------------
>
>                 Key: GROOVY-12065
>                 URL: https://issues.apache.org/jira/browse/GROOVY-12065
>             Project: Groovy
>          Issue Type: Improvement
>            Reporter: Daniel Sun
>            Priority: Major
>
> h2. Overview
> This improvement introduces a dedicated, single-pass bytecode compaction 
> layer via {{PeepholeOptimizingMethodVisitor}}. This adapter wraps the 
> underlying ASM {{MethodVisitor}} during class generation 
> ({{AsmClassGenerator}}), intercepting instruction streams within local basic 
> blocks to eliminate redundant operations, rewrite conditional branches, and 
> narrow constant instructions to their most optimal forms.
> Crucially, by decoupling peephole optimization from structural code 
> generation, this approach significantly simplifies the constant emission 
> logic inside {{OperandStack}}. Instead of maintaining verbose, duplicate 
> routing logic for specialized primitive opcodes (such as {{ICONST_x}}, 
> {{BIPUSH}}, or {{FCONST_x}}), {{OperandStack}} now delegates constant pushing 
> uniformly via {{visitLdcInsn}}. The stateful peephole layer then 
> transparently condenses these instructions into their tightest bytecode 
> representations under the hood.
> h2. Key Optimizations Implemented
> h3. 1. Redundant Instruction & Dead Code Elimination
> * *Discarded Assignment Values:* Eliminates wasteful {{DUP}} -> {{[X]STORE}} 
> -> {{POP}} patterns typically produced during assignments where the 
> expression result on the operand stack is unused. The optimizer flattens 
> these directly into a single {{[X]STORE}}.
> * *Redundant Loads:* Detects situations where a local variable or constant is 
> loaded ({{[X]LOAD}} / {{LDC}}) but immediately discarded via 
> {{POP}}/{{POP2}}, or followed immediately by a void {{RETURN}}. The optimizer 
> safely drops both operations while preserving interleaved local increments 
> ({{IINC}}).
> h3. 2. Conditional Jump & Zero-Comparison Rewriting
> * Optimizes integer comparisons against zero by transforming expensive binary 
> comparison sequences (e.g., {{ILOAD}} -> {{ICONST_0}} -> {{IF_ICMPxx}}) into 
> compact unary zero-comparison instructions ({{IFxx}}). For instance, an 
> {{IF_ICMPEQ}} branch against a buffered {{0}} constant is cleanly rewritten 
> directly to {{IFEQ}}.
> h3. 3. Instruction Narrowing & Constant Compaction
> * Intercepts standard literal definitions and transparently narrows them down 
> to the smallest possible specialized opcodes ({{ICONST_M1}} through 
> {{ICONST_5}}, {{BIPUSH}}, {{SIPUSH}}, {{LCONST_0/1}}, {{FCONST_0/1/2}}, and 
> {{DCONST_0/1}}).
> * Explicitly safeguards signed floating-point zeros ({{-0.0f}} and {{-0.0d}}) 
> from accidental flattening to guarantee strict IEEE 754 runtime compliance.
> h3. 4. Big Number Literal Lowering
> * Centralizes string-constructed object instantiations for {{BigDecimal}} and 
> {{BigInteger}} literals by rewriting buffered constants into inline {{NEW}} 
> -> {{DUP}} -> {{LDC [string]}} -> {{INVOKESPECIAL <init>}} pipelines 
> seamlessly before stack emission.
> h2. Implementation Strategy & Safety Guardrails
> The {{PeepholeOptimizingMethodVisitor}} operates on a lightweight, 
> stack-local sliding window. To fully preserve runtime semantics, debugging 
> capabilities, and catch-block structures, the lookahead window is 
> automatically flushed to the delegate visitor when encountering non-local 
> boundaries or frame-altering instructions, including:
> * Control flow jumps and basic block {{Label}} targets.
> * Stack map frames ({{visitFrame}}).
> * Line numbers and local variable debug maps.
> * Method invocations and {{InvokeDynamic}} instructions.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to