Add custom legalization for floating point constants.

Use the simplest expansion which materializes the bits of the floating
point constant as an integer and then bit-casts to the floating point
type. In the future, we may want to use constant pools instead. Either
way, we need custom legalization.

Also add a legalize_monomorphic() function to the Python targetISA class
which permits the configuration of a default legalization action for
monomorphic instructions, just like legalize_type() does for polymorphic
instructions.
This commit is contained in:
Jakob Stoklund Olesen
2017-09-18 13:27:25 -07:00
parent d2273c73ea
commit 88348368a8
7 changed files with 67 additions and 0 deletions

View File

@@ -54,6 +54,11 @@ expand.custom_legalize(insts.heap_addr, 'expand_heap_addr')
expand.custom_legalize(insts.trapz, 'expand_cond_trap')
expand.custom_legalize(insts.trapnz, 'expand_cond_trap')
# Custom expansions for floating point constants.
# These expansions require bit-casting or creating constant pool entries.
expand.custom_legalize(insts.f32const, 'expand_fconst')
expand.custom_legalize(insts.f64const, 'expand_fconst')
x = Var('x')
y = Var('y')
a = Var('a')