Custom legalization for global_addr.

The code to compute the address of a global variable depends on the kind
of variable, so custom legalization is required.

- Add a legalizer::globalvar module which exposes an
  expand_global_addr() function. This module is likely to grow as we add
  more types of global variables.
- Add a ArgumentPurpose::VMContext enumerator. This is used to represent
  special 'vmctx' arguments that are used as base pointers for vmctx
  globals.
This commit is contained in:
Jakob Stoklund Olesen
2017-08-18 09:08:41 -07:00
parent 5dba00b761
commit f2ebabaf5f
7 changed files with 127 additions and 12 deletions

View File

@@ -8,6 +8,7 @@ instructions that are legal.
"""
from __future__ import absolute_import
from .immediates import intcc
from . import instructions as insts
from .instructions import iadd, iadd_cout, iadd_cin, iadd_carry, iadd_imm
from .instructions import isub, isub_bin, isub_bout, isub_borrow
from .instructions import band, bor, bxor, isplit, iconcat
@@ -43,6 +44,9 @@ expand = XFormGroup('expand', """
operating on the same types as the original instructions.
""")
# Custom expansions for memory objects.
expand.custom_legalize(insts.global_addr, 'expand_global_addr')
x = Var('x')
y = Var('y')
a = Var('a')