Stream: git-wasmtime

Topic: wasmtime / PR #3847 ISLE lowering rules: make use of impl...


view this post on Zulip Wasmtime GitHub notifications bot (Feb 23 2022 at 23:34):

cfallin opened PR #3847 from isle-use-implicit-conversions to main:

This PR makes use of the new implicit-conversion feature of the ISLE DSL
that was introduced in #3807 in order to make the lowering rules
significantly simpler and more concise.

The basic idea is to eliminate the repetitive and mechanical use of
terms that convert from one type to another when there is only one real
way to do the conversion -- for example, to go from a WritableReg to a
Reg, the only sensible way is to use writable_reg_to_reg.

This PR generally takes any term of the form "A_to_B" and makes it an
automatic conversion, as well as some others that are similar in spirit.

The notable exception to the pure-value-convsion category is the
put_in_reg family of operations, which actually do have side-effects.
However, as noted in the doc additions in #3807, this is fine as long as
the side-effects are idempotent. And on balance, making put_in_reg
automatic is a significant clarity win -- together with other operand
converters, it enables rules like:

;; Add two registers.
(rule (lower (has_type (fits_in_64 ty)
                       (iadd x y)))
      (add ty x y))

There may be other converters that we could define to make the rules
even simpler; we can make such improvements as we think of them, but
this should be a good start!

<!--

Please ensure that the following steps are all taken care of before submitting
the PR.

Please ensure all communication adheres to the code of conduct.
-->

view this post on Zulip Wasmtime GitHub notifications bot (Feb 23 2022 at 23:34):

cfallin requested fitzgen for a review on PR #3847.

view this post on Zulip Wasmtime GitHub notifications bot (Feb 23 2022 at 23:39):

abrown submitted PR review.

view this post on Zulip Wasmtime GitHub notifications bot (Feb 23 2022 at 23:42):

cfallin edited PR #3847 from isle-use-implicit-conversions to main:

This PR makes use of the new implicit-conversion feature of the ISLE DSL
that was introduced in #3807 in order to make the lowering rules
significantly simpler and more concise.

The basic idea is to eliminate the repetitive and mechanical use of
terms that convert from one type to another when there is only one real
way to do the conversion -- for example, to go from a WritableReg to a
Reg, the only sensible way is to use writable_reg_to_reg.

This PR generally takes any term of the form "A_to_B" and makes it an
automatic conversion, as well as some others that are similar in spirit.

The notable exception to the pure-value-conversion category is the
put_in_reg family of operations, which actually do have side-effects.
However, as noted in the doc additions in #3807, this is fine as long as
the side-effects are idempotent. And on balance, making put_in_reg
automatic is a significant clarity win -- together with other operand
converters, it enables rules like:

;; Add two registers.
(rule (lower (has_type (fits_in_64 ty)
                       (iadd x y)))
      (add ty x y))

There may be other converters that we could define to make the rules
even simpler; we can make such improvements as we think of them, but
this should be a good start!

<!--

Please ensure that the following steps are all taken care of before submitting
the PR.

Please ensure all communication adheres to the code of conduct.
-->

view this post on Zulip Wasmtime GitHub notifications bot (Feb 24 2022 at 00:14):

cfallin merged PR #3847.


Last updated: Dec 23 2024 at 12:05 UTC