diff options
-rw-r--r-- | src/passes/J2CLOpts.cpp | 2 | ||||
-rw-r--r-- | test/lit/passes/j2cl-inline.wast | 22 | ||||
-rw-r--r-- | test/lit/passes/j2cl.wast | 24 |
3 files changed, 25 insertions, 23 deletions
diff --git a/src/passes/J2CLOpts.cpp b/src/passes/J2CLOpts.cpp index f6821b80f..78edecc45 100644 --- a/src/passes/J2CLOpts.cpp +++ b/src/passes/J2CLOpts.cpp @@ -30,7 +30,7 @@ namespace wasm { namespace { -bool isOnceFunction(Function* f) { return f->name.hasSubstring("_@once@_"); } +bool isOnceFunction(Function* f) { return f->name.hasSubstring("_<once>_"); } using AssignmentCountMap = std::unordered_map<Name, Index>; diff --git a/test/lit/passes/j2cl-inline.wast b/test/lit/passes/j2cl-inline.wast index dad35b80e..263be0726 100644 --- a/test/lit/passes/j2cl-inline.wast +++ b/test/lit/passes/j2cl-inline.wast @@ -1,16 +1,18 @@ ;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. -;; RUN: foreach %s %t wasm-opt --no-inline=*_@once@_* --optimize-j2cl --inlining --vacuum --optimize-level=3 -all -S -o - | filecheck %s +;; NOTE: In real world example no-inline would use _<once>_ but there is escaping problem in a multi-platform +;; way in lit so we are working around it by using no-inline with a different pattern that matches same method. +;; RUN: foreach %s %t wasm-opt --no-inline=*clinit* --optimize-j2cl --inlining --vacuum --optimize-level=3 -all -S -o - | filecheck %s ;; Only trivial once functions are inlined (module ;; A once function that has become empty - (func $clinit-trivial-1_@once@_@Foo ) + (func $clinit-trivial-1_<once>_@Foo ) ;; A once function that just calls another - (func $clinit-trivial-2_@once@_@Bar - (call $clinit-trivial-1_@once@_@Foo) + (func $clinit-trivial-2_<once>_@Bar + (call $clinit-trivial-1_<once>_@Foo) ) ;; CHECK: (type $0 (func)) @@ -19,7 +21,7 @@ (global $$class-initialized@Zoo (mut i32) (i32.const 0)) ;; Not hoisted but trivial. - ;; CHECK: (func $clinit-non-trivial_@once@_@Zoo (type $0) + ;; CHECK: (func $clinit-non-trivial_<once>_@Zoo (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $$class-initialized@Zoo) ;; CHECK-NEXT: (return) @@ -28,7 +30,7 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - (func $clinit-non-trivial_@once@_@Zoo + (func $clinit-non-trivial_<once>_@Zoo (if (global.get $$class-initialized@Zoo) (return) ) @@ -36,11 +38,11 @@ ) ;; CHECK: (func $main (type $0) - ;; CHECK-NEXT: (call $clinit-non-trivial_@once@_@Zoo) + ;; CHECK-NEXT: (call $clinit-non-trivial_<once>_@Zoo) ;; CHECK-NEXT: ) (func $main - (call $clinit-trivial-1_@once@_@Foo) - (call $clinit-trivial-2_@once@_@Bar) - (call $clinit-non-trivial_@once@_@Zoo) + (call $clinit-trivial-1_<once>_@Foo) + (call $clinit-trivial-2_<once>_@Bar) + (call $clinit-non-trivial_<once>_@Zoo) ) ) diff --git a/test/lit/passes/j2cl.wast b/test/lit/passes/j2cl.wast index 0d37dd829..2294b7d3d 100644 --- a/test/lit/passes/j2cl.wast +++ b/test/lit/passes/j2cl.wast @@ -12,10 +12,10 @@ (global $field-i32@Foo (mut i32) (i32.const 0)) (global $field-f64@Foo (mut f64) (f64.const 0)) - ;; CHECK: (func $clinit_@once@_@Foo (type $0) + ;; CHECK: (func $clinit_<once>_@Foo (type $0) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) - (func $clinit_@once@_@Foo + (func $clinit_<once>_@Foo (global.set $field-i32@Foo (i32.const 1)) (global.set $field-f64@Foo (f64.const 1)) ) @@ -48,14 +48,14 @@ ;; CHECK: (global $field3@Foo anyref (global.get $field1@Foo)) (global $field3@Foo (mut anyref) (ref.null none)) - ;; CHECK: (func $clinit_@once@_@Foo (type $1) + ;; CHECK: (func $clinit_<once>_@Foo (type $1) ;; CHECK-NEXT: (global.set $field2@Foo ;; CHECK-NEXT: (struct.new $A ;; CHECK-NEXT: (global.get $referredFieldMut@Foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - (func $clinit_@once@_@Foo + (func $clinit_<once>_@Foo ;; Referred field is immutable, should hoist (global.set $field1@Foo (struct.new $A ( global.get $referredField@Foo) @@ -85,7 +85,7 @@ (global $field-any@Foo (mut anyref) (struct.new $A)) - ;; CHECK: (func $clinit_@once@_@Foo (type $1) + ;; CHECK: (func $clinit_<once>_@Foo (type $1) ;; CHECK-NEXT: (global.set $field-i32@Foo ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -93,7 +93,7 @@ ;; CHECK-NEXT: (struct.new_default $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - (func $clinit_@once@_@Foo + (func $clinit_<once>_@Foo (global.set $field-i32@Foo (i32.const 1)) (global.set $field-any@Foo (struct.new $A)) ) @@ -107,10 +107,10 @@ ;; CHECK: (global $field@Foo i32 (i32.const 1)) (global $field@Foo (mut i32) (i32.const 0)) - ;; CHECK: (func $clinit_@once@_@Foo (type $0) + ;; CHECK: (func $clinit_<once>_@Foo (type $0) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) - (func $clinit_@once@_@Foo + (func $clinit_<once>_@Foo (global.set $field@Foo (i32.const 1)) ) ) @@ -123,12 +123,12 @@ ;; CHECK: (global $$class-initialized@Foo (mut i32) (i32.const 0)) (global $$class-initialized@Foo (mut i32) (i32.const 0)) - ;; CHECK: (func $clinit_@once@_@Foo (type $0) + ;; CHECK: (func $clinit_<once>_@Foo (type $0) ;; CHECK-NEXT: (global.set $$class-initialized@Foo ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - (func $clinit_@once@_@Foo + (func $clinit_<once>_@Foo (global.set $$class-initialized@Foo (i32.const 1)) ) ) @@ -141,12 +141,12 @@ ;; CHECK: (global $field@Foo (mut i32) (i32.const 0)) (global $field@Foo (mut i32) (i32.const 0)) - ;; CHECK: (func $clinit_@once@_@Bar (type $0) + ;; CHECK: (func $clinit_<once>_@Bar (type $0) ;; CHECK-NEXT: (global.set $field@Foo ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - (func $clinit_@once@_@Bar + (func $clinit_<once>_@Bar ;; Note that $clinit is @Bar and field is @Foo. (global.set $field@Foo (i32.const 1)) ) |