This PR correctly populates the `xType` field of the `IR.FnBody.case` constructor. It turns out that there is no obvious consequence for this being incorrect, because it is conservatively recomputed by the `Boxing` pass.
26 lines
859 B
Text
26 lines
859 B
Text
[Compiler.IR] [init]
|
|
def sefFn (x_1 : obj) (x_2 : obj) : obj :=
|
|
case x_1 : obj of
|
|
Lean.Expr.app._impl →
|
|
let x_3 : u64 := sproj[2, 0] x_1;
|
|
let x_4 : obj := proj[0] x_1;
|
|
let x_5 : obj := proj[1] x_1;
|
|
block_6 (x_7 : u8) :=
|
|
case x_7 : u8 of
|
|
Bool.false →
|
|
let x_8 : obj := Lean.Expr.app._override x_2 x_5;
|
|
ret x_8
|
|
Bool.true →
|
|
ret x_1;
|
|
let x_9 : usize := ptrAddrUnsafe ◾ x_4;
|
|
let x_10 : usize := ptrAddrUnsafe ◾ x_2;
|
|
let x_11 : u8 := USize.decEq x_9 x_10;
|
|
case x_11 : u8 of
|
|
Bool.false →
|
|
jmp block_6 x_11
|
|
Bool.true →
|
|
let x_12 : usize := ptrAddrUnsafe ◾ x_5;
|
|
let x_13 : u8 := USize.decEq x_12 x_12;
|
|
jmp block_6 x_13
|
|
default →
|
|
ret x_1
|