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:
24
tests/parser/rewrite.cton
Normal file
24
tests/parser/rewrite.cton
Normal 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)
|
||||
}
|
||||
13
tests/parser/rewrite.cton.ref
Normal file
13
tests/parser/rewrite.cton.ref
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user