Skip to content

Commit f703476

Browse files
authored
feat(compiler): Remove Pervasives' dependency on toString when types are elided (#1664)
* feat(compiler): Remove Pervasives' dependency on toString when types are elided * feat(compiler): Optimize away simple unary boolean operations * snapshots
1 parent 42ffdc4 commit f703476

File tree

8 files changed

+22
-12
lines changed

8 files changed

+22
-12
lines changed

compiler/src/middle_end/optimize.re

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ let optimization_passes = [
1414
Optimize_manual_memory_management.optimize,
1515
Optimize_tail_calls.optimize,
1616
Optimize_constants.optimize,
17-
Optimize_simple_binops.optimize,
17+
Optimize_simple_expressions.optimize,
1818
Optimize_dead_assignments.optimize,
1919
Optimize_dead_branches.optimize,
2020
Optimize_dead_statements.optimize,

compiler/src/middle_end/optimize_simple_binops.re renamed to compiler/src/middle_end/optimize_simple_expressions.re

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ module ConstantFoldingArg: Anf_mapper.MapArgument = {
6565
| "==" => wrap_imm @@ Const_bool(x == y)
6666
| _ => c
6767
};
68+
| CPrim1(Not, {imm_desc: ImmConst(Const_bool(b))} as i) => {
69+
...c,
70+
comp_desc: CImmExpr({...i, imm_desc: ImmConst(Const_bool(!b))}),
71+
}
6872
| CPrim2(prim2, {imm_desc: ImmConst(x)} as i, {imm_desc: ImmConst(y)}) =>
6973
let wrap_imm = imm => {
7074
...c,
File renamed without changes.

compiler/src/typed/translprim.re

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ open Parsetree;
66
type primitive_constant =
77
| HeapBase
88
| HeapStart
9-
| HeapTypeMetadata;
9+
| HeapTypeMetadata
10+
| ElideTypeInfo;
1011

1112
type primitive =
1213
| PrimitiveConstant(primitive_constant)
@@ -49,6 +50,7 @@ let prim_map =
4950
("@heap.base", PrimitiveConstant(HeapBase)),
5051
("@heap.start", PrimitiveConstant(HeapStart)),
5152
("@heap.type_metadata", PrimitiveConstant(HeapTypeMetadata)),
53+
("@meta.elide_type_info", PrimitiveConstant(ElideTypeInfo)),
5254
("@allocate.int32", Primitive0(AllocateInt32)),
5355
("@allocate.int64", Primitive0(AllocateInt64)),
5456
("@allocate.uint32", Primitive0(AllocateUint32)),
@@ -1502,6 +1504,10 @@ let transl_prim = (env, desc) => {
15021504
Constant.wasmi32(string_of_int(active_memory_base() + 0x8)),
15031505
true,
15041506
)
1507+
| ElideTypeInfo => (
1508+
Constant.bool(Grain_utils.Config.elide_type_info^),
1509+
false,
1510+
)
15051511
};
15061512
let attrs =
15071513
if (needs_disablegc) {

compiler/src/typed/translprim.rei

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ open Typedtree;
33
type primitive_constant =
44
| HeapBase
55
| HeapStart
6-
| HeapTypeMetadata;
6+
| HeapTypeMetadata
7+
| ElideTypeInfo;
78

89
type primitive =
910
| PrimitiveConstant(primitive_constant)

compiler/test/__snapshots__/basic_functionality.4d6f9417.0.snapshot

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,7 @@ basic functionality › not1
3333
(block $cleanup_locals.2 (result i32)
3434
(local.set $0
3535
(block $compile_block.1 (result i32)
36-
(i32.xor
37-
(i32.const -2)
38-
(i32.const -2147483648)
39-
)
36+
(i32.const 2147483646)
4037
)
4138
)
4239
(local.get $0)

compiler/test/__snapshots__/basic_functionality.970a2a2b.0.snapshot

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,7 @@ basic functionality › not2
3333
(block $cleanup_locals.2 (result i32)
3434
(local.set $0
3535
(block $compile_block.1 (result i32)
36-
(i32.xor
37-
(i32.const 2147483646)
38-
(i32.const -2147483648)
39-
)
36+
(i32.const -2)
4037
)
4138
)
4239
(local.get $0)

stdlib/pervasives.gr

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,7 @@ provide primitive box: a -> Box<a> = "@box"
523523
provide primitive unbox: Box<a> -> a = "@unbox"
524524

525525
// Setup exception printing
526+
primitive elideTypeInfo: Bool = "@meta.elide_type_info"
526527
@unsafe
527528
let rec setupExceptions = () => {
528529
Exception.dangerouslyRegisterPrinter(e => {
@@ -533,7 +534,11 @@ let rec setupExceptions = () => {
533534
}
534535
})
535536

536-
Exception.dangerouslyRegisterBasePrinter(e => Some(toString(e)))
537+
// If type information is elided, remove dependency on toString as
538+
// it will have no effect on exceptions
539+
if (!elideTypeInfo) {
540+
Exception.dangerouslyRegisterBasePrinter(e => Some(toString(e)))
541+
}
537542
}
538543

539544
setupExceptions()

0 commit comments

Comments
 (0)