-
Notifications
You must be signed in to change notification settings - Fork 753
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[wasm-reduce] Reduce struct.new arguments away when possible (#7118)
If all the fields of a struct.new are defaultable, see if replacing it with a struct.new_default preserves the behavior, and reduce that way if so. Also add a missing --closed-world to the --remove-unused-types invocation. Without that, it was erroring and not working, which I noticed when testing this. The test also checks that.
- Loading branch information
Showing
3 changed files
with
64 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
(module | ||
(rec | ||
(type $A (struct (field (mut i32)) (field funcref))) | ||
;; This type can be optimized away. | ||
(type $unused (struct)) | ||
) | ||
|
||
(global $A (ref null $A) (struct.new $A | ||
;; These particular values are not used, and can be removed, leaving the | ||
;; struct.new as struct.new_default. | ||
(i32.const 0) | ||
(ref.func $use-global) | ||
)) | ||
|
||
(func $use-global (export "use-global") (result i32) | ||
;; This function stores 42 in the global struct, then reads and returns | ||
;; that. We don't manage to optimize away anything in this function, which | ||
;; only serves to keep alive the type and the global for the above testing. | ||
(struct.set $A 0 | ||
(global.get $A) | ||
(i32.const 42) | ||
) | ||
(struct.get $A 0 | ||
(global.get $A) | ||
) | ||
) | ||
) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
(module | ||
(type $0 (struct (field (mut i32)) (field funcref))) | ||
(type $1 (func (result i32))) | ||
(global $global$0 (ref null $0) (struct.new_default $0)) | ||
(export "use-global" (func $0)) | ||
(func $0 (result i32) | ||
(struct.set $0 0 | ||
(global.get $global$0) | ||
(i32.const 42) | ||
) | ||
(struct.get $0 0 | ||
(global.get $global$0) | ||
) | ||
) | ||
) | ||
|