Rewrite EBB and value references after parsing.

We llow forward references to values and EBBs, so it is not possible to rewrite
these from the source domain to the in-memory domain during parsing.

Instead go through all the instructions after parsing everything and rewrite the
value and EBB references when everything has been created and mapped.
This commit is contained in:
Jakob Stoklund Olesen
2016-07-08 15:15:53 -07:00
parent 02861df78c
commit a39e418d32
5 changed files with 168 additions and 7 deletions

24
tests/parser/rewrite.cton Normal file
View File

@@ -0,0 +1,24 @@
; The .cton parser can't preserve the actual entity numbers in the input file
; since entities are numbered as they are created. For entities declared in the
; preamble, this is no problem, but for EBB and value references, mapping
; source numbers to real numbers can be a problem.
;
; It is possible to refer to instructions and EBBs that have not yet been
; defined in the lexical order, so the parser needs to rewrite these references
; after the fact.
; Check that defining numbers are rewritten.
function defs() {
ebb100(v20: i32):
v1000 = iconst.i32x8 5
vx200 = f64const 0x4.0p0
trap
}
; Using values.
function use_value() {
ebb100(v20: i32):
v1000 = iadd_imm v20, 5
vx200 = iadd v20, v1000
jump ebb100(v1000)
}

View File

@@ -0,0 +1,13 @@
function defs() {
ebb0(vx0: i32):
v0 = iconst.i32x8 5
v1 = f64const 0x1.0000000000000p2
trap
}
function "use_value"() {
ebb0(vx0: i32):
v0 = iadd_imm vx0, 5
v1 = iadd vx0, v0
jump ebb0(v0)
}