Skip to content

Avoid ConstraintImpl instances at runtime#353

Draft
PapyChacal wants to merge 2 commits into
mainfrom
emilien/constraints-quotes
Draft

Avoid ConstraintImpl instances at runtime#353
PapyChacal wants to merge 2 commits into
mainfrom
emilien/constraints-quotes

Conversation

@PapyChacal
Copy link
Copy Markdown
Collaborator

@PapyChacal PapyChacal commented Nov 4, 2025

This enables inlining the verifiers in the generated code! One step towards actual macro compositions there.

In practice, for the example (in our tests) of:

val f32 = Float32Type()

case class MulFEq(
    lhs: Operand[FloatType !> EqAttr[f32.type]],
    rhs: Operand[FloatType !> EqAttr[f32.type]],
    result: Result[FloatType]
) extends DerivedOperation["cmath.mul", MulFEq]

The current code to enforce lhs's constraint is:

         0: aload_1
         1: invokestatic  #461                // Method ctx$1:(Lscala/runtime/LazyRef;)Lscair/core/constraints/ConstraintContext;
         4: astore_3
         5: getstatic     #466                // Field scair/MacroConstraintsTest$package$.MODULE$:Lscair/MacroConstraintsTest$package$;
         8: invokevirtual #470                // Method scair/MacroConstraintsTest$package$.f32:()Lscair/dialects/builtin/Float32Type;
        11: astore        4
        13: new           #472                // class scair/core/constraints/ConstraintImplEqAttr
        16: dup
        17: aload         4
        19: invokespecial #475                // Method scair/core/constraints/ConstraintImplEqAttr."<init>":(Lscair/ir/Attribute;)V
        22: aload_0
        23: invokevirtual #391                // Method lhs:()Lscair/ir/Value;
        26: invokevirtual #481                // Method scair/ir/Value.typ:()Lscair/ir/Attribute;
        29: aload_3
        30: invokevirtual #484                // Method scair/core/constraints/ConstraintImplEqAttr.verify:(Lscair/ir/Attribute;Lscair/core/constraints/ConstraintContext;)Lscala/util/Either;
        33: areturn

And with this change is:

         0: aload_1
         1: invokestatic  #461                // Method ctx$1:(Lscala/runtime/LazyRef;)Lscair/core/constraints/ConstraintContext;
         4: astore_3
         5: aload_0
         6: invokevirtual #391                // Method lhs:()Lscair/ir/Value;
         9: invokevirtual #467                // Method scair/ir/Value.typ:()Lscair/ir/Attribute;
        12: checkcast     #469                // class scair/dialects/builtin/FloatType
        15: astore        4
        17: getstatic     #474                // Field scair/MacroConstraintsTest$package$.MODULE$:Lscair/MacroConstraintsTest$package$;
        20: invokevirtual #478                // Method scair/MacroConstraintsTest$package$.f32:()Lscair/dialects/builtin/Float32Type;
        23: astore        5
        25: aload         4
        27: aload         5
        29: astore        6
        31: dup
        32: ifnonnull     44
        35: pop
        36: aload         6
        38: ifnull        52

Emphasis:

  • No ConstraintImpl initialization and virtual invocation left, just code comparing lhs to f32

@PapyChacal PapyChacal marked this pull request as draft November 4, 2025 15:05
@codecov
Copy link
Copy Markdown

codecov Bot commented Nov 4, 2025

Codecov Report

❌ Patch coverage is 0% with 7 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
core/src/main/scala-3/clair/Definitions.scala 0.00% 4 Missing ⚠️
core/src/main/scala-3/clair/Macros.scala 0.00% 3 Missing ⚠️
Files with missing lines Coverage Δ
core/src/main/scala-3/Constraints.scala 100.00% <ø> (ø)
core/src/main/scala-3/clair/Mirror.scala 8.39% <ø> (+0.53%) ⬆️
core/src/main/scala-3/clair/Macros.scala 17.34% <0.00%> (-0.07%) ⬇️
core/src/main/scala-3/clair/Definitions.scala 19.44% <0.00%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@PapyChacal PapyChacal force-pushed the emilien/constraints-quotes branch 2 times, most recently from f93f0a2 to 1038f7d Compare November 4, 2025 18:45
@PapyChacal PapyChacal changed the title [WIP] Early changes to the constraint verification. Early changes to the constraint verification. Nov 7, 2025
@PapyChacal PapyChacal changed the title Early changes to the constraint verification. Avoid ConstraintImpl instances at runtime Nov 7, 2025
@PapyChacal PapyChacal force-pushed the emilien/constraints-quotes branch from 1038f7d to 183c718 Compare November 10, 2025 13:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant