Skip to content

Instantly share code, notes, and snippets.

@bgamari
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bgamari/22d127779a48113c1153 to your computer and use it in GitHub Desktop.
Save bgamari/22d127779a48113c1153 to your computer and use it in GitHub Desktop.
$s$wa_r1pIG_info:
_c1pXl:
addq $192,%r12
cmpq 856(%r13),%r12
ja _c1pXp
_c1pXo:
testq %rsi,%rsi
jne _c1pXj
_c1pXk:
movq $BufferRange_con_info,-184(%r12)
movq %r8,-176(%r12)
movq %r9,-168(%r12)
leaq -183(%r12),%rax
addq $-168,%r12
movq %rax,%r14
movq %rdi,%rbx
jmp stg_ap_pv_fast
_c1pXj:
movq %r14,%rax
movzbl %al,%eax
leaq 1(%r14),%rbx
movzbl %bl,%ebx
leaq 2(%r14),%rcx
movzbl %cl,%ecx
leaq 3(%r14),%rdx
movzbl %dl,%edx
leaq 4(%r14),%r10
movzbl %r10b,%r10d
leaq 5(%r14),%r11
movzbl %r11b,%r11d
movq %rax,64(%rsp)
leaq 6(%r14),%rax
movzbl %al,%eax
movq %rbx,72(%rsp)
leaq 7(%r14),%rbx
movzbl %bl,%ebx
movq %rcx,80(%rsp)
leaq 8(%r14),%rcx
movzbl %cl,%ecx
movq %rdx,88(%rsp)
leaq 9(%r14),%rdx
movzbl %dl,%edx
movq %r10,96(%rsp)
leaq 10(%r14),%r10
movzbl %r10b,%r10d
movq %r11,104(%rsp)
leaq 11(%r14),%r11
movzbl %r11b,%r11d
movq %rax,112(%rsp)
leaq 12(%r14),%rax
movzbl %al,%eax
movq %rbx,120(%rsp)
leaq 13(%r14),%rbx
movzbl %bl,%ebx
movq %rcx,128(%rsp)
leaq 14(%r14),%rcx
movzbl %cl,%ecx
movq %rdx,136(%rsp)
leaq 15(%r14),%rdx
movzbl %dl,%edx
addq $16,%r14
movzbl %r14b,%r14d
addq $-16,%rsi
movq %r10,144(%rsp)
movq %r9,%r10
subq %r8,%r10
cmpq $16,%r10
jl _c1pXv
_c1pXw:
movq 64(%rsp),%r10
movb %r10b,(%r8)
incq %r8
movq 72(%rsp),%r10
movb %r10b,(%r8)
incq %r8
movq 80(%rsp),%r10
movb %r10b,(%r8)
incq %r8
movq 88(%rsp),%r10
movb %r10b,(%r8)
incq %r8
movq 96(%rsp),%r10
movb %r10b,(%r8)
incq %r8
movq 104(%rsp),%r10
movb %r10b,(%r8)
incq %r8
movq 112(%rsp),%r10
movb %r10b,(%r8)
incq %r8
movq 120(%rsp),%r10
movb %r10b,(%r8)
incq %r8
movq 128(%rsp),%r10
movb %r10b,(%r8)
incq %r8
movq 136(%rsp),%r10
movb %r10b,(%r8)
incq %r8
movq 144(%rsp),%r10
movb %r10b,(%r8)
incq %r8
movb %r11b,(%r8)
incq %r8
movb %al,(%r8)
leaq 1(%r8),%rax
movb %bl,(%rax)
incq %rax
movb %cl,(%rax)
incq %rax
movb %dl,(%rax)
addq $-192,%r12
leaq 1(%rax),%r8
jmp $s$wa_r1pIG_info
_c1pXp:
movq $192,904(%r13)
movl $$s$wa_r1pIG_closure,%ebx
movq %r14,-40(%rbp)
movq %rsi,-32(%rbp)
movq %rdi,-24(%rbp)
movq %r8,-16(%rbp)
movq %r9,-8(%rbp)
addq $-40,%rbp
jmp *-8(%r13)
_c1pXv:
movq $sat_s1pKS_info,-184(%r12)
movq %rdi,-176(%r12)
movq 64(%rsp),%rdi
movq %rdi,-168(%r12)
movq 72(%rsp),%rdi
movq %rdi,-160(%r12)
movq 80(%rsp),%rdi
movq %rdi,-152(%r12)
movq 88(%rsp),%rdi
movq %rdi,-144(%r12)
movq 96(%rsp),%rdi
movq %rdi,-136(%r12)
movq 104(%rsp),%rdi
movq %rdi,-128(%r12)
movq 112(%rsp),%rdi
movq %rdi,-120(%r12)
movq 120(%rsp),%rdi
movq %rdi,-112(%r12)
movq 128(%rsp),%rdi
movq %rdi,-104(%r12)
movq 136(%rsp),%rdi
movq %rdi,-96(%r12)
movq 144(%rsp),%rdi
movq %rdi,-88(%r12)
movq %r11,-80(%r12)
movq %rax,-72(%r12)
movq %rbx,-64(%r12)
movq %rcx,-56(%r12)
movq %rdx,-48(%r12)
movq %r14,-40(%r12)
movq %rsi,-32(%r12)
movq $BufferFull_con_info,-24(%r12)
leaq -182(%r12),%rax
movq %rax,-16(%r12)
movq $16,-8(%r12)
movq %r8,(%r12)
leaq -22(%r12),%rbx
jmp *(%rbp)
.size $s$wa_r1pIG_info, .-$s$wa_r1pIG_info
$s$wa_r1pIG
$s$wa_r1pIG =
\ @ r_a11uH
sc_s1pDR
sc1_s1pDS
sc2_s1pDT
sc3_s1pDU
sc4_s1pDV
sc5_s1pDW ->
case sc1_s1pDS of wild_X6T {
__DEFAULT ->
let {
a_s1pkA
a_s1pkA = narrow8Word# sc_s1pDR } in
let {
a1_s1pkD
a1_s1pkD = narrow8Word# (plusWord# sc_s1pDR (__word 1)) } in
let {
a2_s1pkG
a2_s1pkG = narrow8Word# (plusWord# sc_s1pDR (__word 2)) } in
let {
a3_s1pkJ
a3_s1pkJ = narrow8Word# (plusWord# sc_s1pDR (__word 3)) } in
let {
a4_s1pkM
a4_s1pkM = narrow8Word# (plusWord# sc_s1pDR (__word 4)) } in
let {
a5_s1pkP
a5_s1pkP = narrow8Word# (plusWord# sc_s1pDR (__word 5)) } in
let {
a6_s1pkS
a6_s1pkS = narrow8Word# (plusWord# sc_s1pDR (__word 6)) } in
let {
a7_s1pkV
a7_s1pkV = narrow8Word# (plusWord# sc_s1pDR (__word 7)) } in
let {
a8_s1pkY
a8_s1pkY = narrow8Word# (plusWord# sc_s1pDR (__word 8)) } in
let {
a9_s1pl1
a9_s1pl1 = narrow8Word# (plusWord# sc_s1pDR (__word 9)) } in
let {
a10_s1pl4
a10_s1pl4 = narrow8Word# (plusWord# sc_s1pDR (__word 10)) } in
let {
a11_s1pl7
a11_s1pl7 = narrow8Word# (plusWord# sc_s1pDR (__word 11)) } in
let {
a12_s1pla
a12_s1pla = narrow8Word# (plusWord# sc_s1pDR (__word 12)) } in
let {
a13_s1pld
a13_s1pld = narrow8Word# (plusWord# sc_s1pDR (__word 13)) } in
let {
a14_s1plg
a14_s1plg = narrow8Word# (plusWord# sc_s1pDR (__word 14)) } in
let {
a15_s1pli
a15_s1pli = narrow8Word# (plusWord# sc_s1pDR (__word 15)) } in
let {
a16_s1ppb
a16_s1ppb = narrow8Word# (plusWord# sc_s1pDR (__word 16)) } in
let {
a17_s1ppd
a17_s1ppd = -# wild_X6T 16 } in
case tagToEnum# (<# (minusAddr# sc4_s1pDV sc3_s1pDU) 16) of _ {
False ->
case writeWord8OffAddr# sc3_s1pDU 0 a_s1pkA sc5_s1pDW
of s2_a3Ge { __DEFAULT ->
let {
a18_s1oWI
a18_s1oWI = plusAddr# sc3_s1pDU 1 } in
case writeWord8OffAddr# a18_s1oWI 0 a1_s1pkD s2_a3Ge
of s1_X3Nm { __DEFAULT ->
let {
a19_s1oWa
a19_s1oWa = plusAddr# a18_s1oWI 1 } in
case writeWord8OffAddr# a19_s1oWa 0 a2_s1pkG s1_X3Nm
of s3_X3N5 { __DEFAULT ->
let {
a20_s1oVF
a20_s1oVF = plusAddr# a19_s1oWa 1 } in
case writeWord8OffAddr# a20_s1oVF 0 a3_s1pkJ s3_X3N5
of s4_X3MO { __DEFAULT ->
let {
a21_s1oVd
a21_s1oVd = plusAddr# a20_s1oVF 1 } in
case writeWord8OffAddr# a21_s1oVd 0 a4_s1pkM s4_X3MO
of s5_X3Mx { __DEFAULT ->
let {
a22_s1oUO
a22_s1oUO = plusAddr# a21_s1oVd 1 } in
case writeWord8OffAddr# a22_s1oUO 0 a5_s1pkP s5_X3Mx
of s6_X3Mg { __DEFAULT ->
let {
a23_s1oUs
a23_s1oUs = plusAddr# a22_s1oUO 1 } in
case writeWord8OffAddr# a23_s1oUs 0 a6_s1pkS s6_X3Mg
of s7_X3LZ { __DEFAULT ->
let {
a24_s1oU9
a24_s1oU9 = plusAddr# a23_s1oUs 1 } in
case writeWord8OffAddr# a24_s1oU9 0 a7_s1pkV s7_X3LZ
of s8_X3LI { __DEFAULT ->
let {
a25_X3Ip
a25_X3Ip = plusAddr# a24_s1oU9 1 } in
case writeWord8OffAddr# a25_X3Ip 0 a8_s1pkY s8_X3LI
of s9_X3IB { __DEFAULT ->
let {
a26_s1oTj
a26_s1oTj = plusAddr# a25_X3Ip 1 } in
case writeWord8OffAddr# a26_s1oTj 0 a9_s1pl1 s9_X3IB
of s10_X3La { __DEFAULT ->
let {
a27_s1oSM
a27_s1oSM = plusAddr# a26_s1oTj 1 } in
case writeWord8OffAddr# a27_s1oSM 0 a10_s1pl4 s10_X3La
of s11_X3KT { __DEFAULT ->
let {
a28_s1oSi
a28_s1oSi = plusAddr# a27_s1oSM 1 } in
case writeWord8OffAddr# a28_s1oSi 0 a11_s1pl7 s11_X3KT
of s12_X3KC { __DEFAULT ->
let {
a29_s1oRR
a29_s1oRR = plusAddr# a28_s1oSi 1 } in
case writeWord8OffAddr# a29_s1oRR 0 a12_s1pla s12_X3KC
of s13_X3Kl { __DEFAULT ->
let {
a30_s1oRt
a30_s1oRt = plusAddr# a29_s1oRR 1 } in
case writeWord8OffAddr# a30_s1oRt 0 a13_s1pld s13_X3Kl
of s14_X3K4 { __DEFAULT ->
let {
a31_s1oR8
a31_s1oR8 = plusAddr# a30_s1oRt 1 } in
case writeWord8OffAddr# a31_s1oR8 0 a14_s1plg s14_X3K4
of s15_X3JN { __DEFAULT ->
let {
a32_s1oQQ
a32_s1oQQ = plusAddr# a31_s1oR8 1 } in
case writeWord8OffAddr# a32_s1oQQ 0 a15_s1pli s15_X3JN
of s16_X3Jr { __DEFAULT ->
$s$wa_r1pIG
a16_s1ppb
a17_s1ppd
sc2_s1pDT
(plusAddr# a32_s1oQQ 1)
sc4_s1pDV
s16_X3Jr
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
};
True -> ...
}
a_s1bN4
:: Word8
-> Int
-> forall r_aRc1.
BuildStep r_aRc1
-> BufferRange
-> State# RealWorld
-> (# State# RealWorld, BuildSignal r_aRc1 #)
[LclId,
Arity=5,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=NEVER}]
a_s1bN4 =
\ (s_a1aWp :: Word8)
(n_a1aWq :: Int)
(@ r_aRc1)
(eta_B1 :: BuildStep r_aRc1)
(eta_B2 :: BufferRange)
(eta_X3 [OS=OneShot] :: State# RealWorld) ->
case s_a1aWp of _ [Occ=Dead] { W8# ipv_s1b2m ->
case n_a1aWq of _ [Occ=Dead] { I# ipv_s1b2p ->
case ipv_s1b2p of wild_X1n {
__DEFAULT ->
let {
a_s1bIE
:: (Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8, (Word8, (Word8, (Word8, (Word8, Word8)))))))))))))))
-> Ptr Word8
-> State# RealWorld
-> (# State# RealWorld, Ptr Word8 #)
[LclId,
Arity=3,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [20 20 0] 362 30}]
a_s1bIE =
\ (ds2_d2mT
:: (Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8, (Word8, (Word8, (Word8, (Word8, Word8))))))))))))))))
(op_a26r :: Ptr Word8)
(eta_Xo [OS=OneShot] :: State# RealWorld) ->
case ds2_d2mT of _ [Occ=Dead] { (x1_a26p, x2_a26q) ->
case op_a26r of _ [Occ=Dead] { Ptr a_a3G8 ->
case x1_a26p of _ [Occ=Dead] { W8# x_a3Gc ->
case writeWord8OffAddr# @ RealWorld a_a3G8 0 x_a3Gc eta_Xo
of s2_a3Ge [OS=OneShot] { __DEFAULT ->
let {
a_s1bBk :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1bBk = plusAddr# a_a3G8 1 } in
case x2_a26q of _ [Occ=Dead] { (x1_X2ag, x2_X2ai) ->
case x1_X2ag of _ [Occ=Dead] { W8# x_X3K9 ->
case writeWord8OffAddr# @ RealWorld a_s1bBk 0 x_X3K9 s2_a3Ge
of s2_X3Ke [OS=OneShot] { __DEFAULT ->
case x2_X2ai of _ [Occ=Dead] { (x1_X27d, x2_X27f) ->
let {
a_X3H0 :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_X3H0 = plusAddr# a_s1bBk 1 } in
case x1_X27d of _ [Occ=Dead] { W8# x_X3H7 ->
case writeWord8OffAddr# @ RealWorld a_X3H0 0 x_X3H7 s2_X3Ke
of s2_X3Hc [OS=OneShot] { __DEFAULT ->
let {
a_s1btH :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1btH = plusAddr# a_X3H0 1 } in
case x2_X27f of _ [Occ=Dead] { (x1_X2a0, x2_X2a2) ->
case x1_X2a0 of _ [Occ=Dead] { W8# x_X3JT ->
case writeWord8OffAddr# @ RealWorld a_s1btH 0 x_X3JT s2_X3Hc
of s2_X3JY [OS=OneShot] { __DEFAULT ->
let {
a_s1bqf :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1bqf = plusAddr# a_s1btH 1 } in
case x2_X2a2 of _ [Occ=Dead] { (x1_X29S, x2_X29U) ->
case x1_X29S of _ [Occ=Dead] { W8# x_X3JL ->
case writeWord8OffAddr# @ RealWorld a_s1bqf 0 x_X3JL s2_X3JY
of s2_X3NN [OS=OneShot] { __DEFAULT ->
let {
a_s1bn6 :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1bn6 = plusAddr# a_s1bqf 1 } in
case x2_X29U of _ [Occ=Dead] { (x1_X29K, x2_X29M) ->
case x1_X29K of _ [Occ=Dead] { W8# x_X3JD ->
case writeWord8OffAddr# @ RealWorld a_s1bn6 0 x_X3JD s2_X3NN
of s2_X3Nx [OS=OneShot] { __DEFAULT ->
case x2_X29M of _ [Occ=Dead] { (x1_X283, x2_X285) ->
let {
a_X3HQ :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_X3HQ = plusAddr# a_s1bn6 1 } in
case x1_X283 of _ [Occ=Dead] { W8# x_X3HX ->
case writeWord8OffAddr# @ RealWorld a_X3HQ 0 x_X3HX s2_X3Nx
of s2_X3I2 [OS=OneShot] { __DEFAULT ->
let {
a_s1bhl :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1bhl = plusAddr# a_X3HQ 1 } in
case x2_X285 of _ [Occ=Dead] { (x1_X2cz, x2_X29w) ->
case x1_X2cz of _ [Occ=Dead] { W8# x_X3Jn ->
case writeWord8OffAddr# @ RealWorld a_s1bhl 0 x_X3Jn s2_X3I2
of s2_X3Js [OS=OneShot] { __DEFAULT ->
let {
a_s1beP :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1beP = plusAddr# a_s1bhl 1 } in
case x2_X29w of _ [Occ=Dead] { (x1_X29m, x2_X29o) ->
case x1_X29m of _ [Occ=Dead] { W8# x_X3Jf ->
case writeWord8OffAddr# @ RealWorld a_s1beP 0 x_X3Jf s2_X3Js
of s2_X3ML [OS=OneShot] { __DEFAULT ->
let {
a_s1bcC :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1bcC = plusAddr# a_s1beP 1 } in
case x2_X29o of _ [Occ=Dead] { (x1_X29e, x2_X29g) ->
case x1_X29e of _ [Occ=Dead] { W8# x_X3J7 ->
case writeWord8OffAddr# @ RealWorld a_s1bcC 0 x_X3J7 s2_X3ML
of s2_X3Mv [OS=OneShot] { __DEFAULT ->
case x2_X29g of _ [Occ=Dead] { (x1_X28T, x2_X28V) ->
let {
a_X3IG :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_X3IG = plusAddr# a_s1bcC 1 } in
case x1_X28T of _ [Occ=Dead] { W8# x_X3IN ->
case writeWord8OffAddr# @ RealWorld a_X3IG 0 x_X3IN s2_X3Mv
of s2_X3IS [OS=OneShot] { __DEFAULT ->
let {
a_s1b8E :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1b8E = plusAddr# a_X3IG 1 } in
case x2_X28V of _ [Occ=Dead] { (x1_X28Y, x2_X290) ->
case x1_X28Y of _ [Occ=Dead] { W8# x_X3IR ->
case writeWord8OffAddr# @ RealWorld a_s1b8E 0 x_X3IR s2_X3IS
of s2_X3IW [OS=OneShot] { __DEFAULT ->
let {
a_s1b74 :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1b74 = plusAddr# a_s1b8E 1 } in
case x2_X290 of _ [Occ=Dead] { (x1_X28Q, x2_X28S) ->
case x1_X28Q of _ [Occ=Dead] { W8# x_X3IJ ->
case writeWord8OffAddr# @ RealWorld a_s1b74 0 x_X3IJ s2_X3IW
of s2_X3LJ [OS=OneShot] { __DEFAULT ->
let {
a_s1b5S :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1b5S = plusAddr# a_s1b74 1 } in
case x2_X28S of _ [Occ=Dead] { (x1_X28I, x2_X28K) ->
case x1_X28I of _ [Occ=Dead] { W8# x_X3IB ->
case writeWord8OffAddr# @ RealWorld a_s1b5S 0 x_X3IB s2_X3LJ
of s2_X3Lt [OS=OneShot] { __DEFAULT ->
let {
a_s1b51 :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1b51 = plusAddr# a_s1b5S 1 } in
case x2_X28K of _ [Occ=Dead] { (x1_X28A, x2_X28C) ->
case x1_X28A of _ [Occ=Dead] { W8# x_X3It ->
case writeWord8OffAddr# @ RealWorld a_s1b51 0 x_X3It s2_X3Lt
of s2_X3Ld [OS=OneShot] { __DEFAULT ->
let {
a_s1b4s :: Addr#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1b4s = plusAddr# a_s1b51 1 } in
case x2_X28C of _ [Occ=Dead] { W8# x_X3Ii ->
case writeWord8OffAddr# @ RealWorld a_s1b4s 0 x_X3Ii s2_X3Ld
of s2_X3KP [OS=OneShot] { __DEFAULT ->
(# s2_X3KP, Ptr @ Word8 (plusAddr# a_s1b4s 1) #)
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
} } in
let {
a_s1bIG :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1bIG = narrow8Word# ipv_s1b2m } in
let {
a_s1bIF :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bIF = W8# a_s1bIG } in
let {
a_s1bIJ :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bIJ = narrow8Word# (plusWord# ipv_s1b2m (__word 1)) } in
let {
a_s1bII :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bII = W8# a_s1bIJ } in
let {
a_s1bIM :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bIM = narrow8Word# (plusWord# ipv_s1b2m (__word 2)) } in
let {
a_s1bIL :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bIL = W8# a_s1bIM } in
let {
a_s1bIP :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bIP = narrow8Word# (plusWord# ipv_s1b2m (__word 3)) } in
let {
a_s1bIO :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bIO = W8# a_s1bIP } in
let {
a_s1bIS :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bIS = narrow8Word# (plusWord# ipv_s1b2m (__word 4)) } in
let {
a_s1bIR :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bIR = W8# a_s1bIS } in
let {
a_s1bIV :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bIV = narrow8Word# (plusWord# ipv_s1b2m (__word 5)) } in
let {
a_s1bIU :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bIU = W8# a_s1bIV } in
let {
a_s1bIY :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bIY = narrow8Word# (plusWord# ipv_s1b2m (__word 6)) } in
let {
a_s1bIX :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bIX = W8# a_s1bIY } in
let {
a_s1bJ1 :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bJ1 = narrow8Word# (plusWord# ipv_s1b2m (__word 7)) } in
let {
a_s1bJ0 :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bJ0 = W8# a_s1bJ1 } in
let {
a_s1bJ4 :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bJ4 = narrow8Word# (plusWord# ipv_s1b2m (__word 8)) } in
let {
a_s1bJ3 :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bJ3 = W8# a_s1bJ4 } in
let {
a_s1bJ7 :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bJ7 = narrow8Word# (plusWord# ipv_s1b2m (__word 9)) } in
let {
a_s1bJ6 :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bJ6 = W8# a_s1bJ7 } in
let {
a_s1bJa :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bJa = narrow8Word# (plusWord# ipv_s1b2m (__word 10)) } in
let {
a_s1bJ9 :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bJ9 = W8# a_s1bJa } in
let {
a_s1bJd :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bJd = narrow8Word# (plusWord# ipv_s1b2m (__word 11)) } in
let {
a_s1bJc :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bJc = W8# a_s1bJd } in
let {
a_s1bJg :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bJg = narrow8Word# (plusWord# ipv_s1b2m (__word 12)) } in
let {
a_s1bJf :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bJf = W8# a_s1bJg } in
let {
a_s1bJj :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bJj = narrow8Word# (plusWord# ipv_s1b2m (__word 13)) } in
let {
a_s1bJi :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bJi = W8# a_s1bJj } in
let {
a_s1bJm :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bJm = narrow8Word# (plusWord# ipv_s1b2m (__word 14)) } in
let {
a_s1bJl :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bJl = W8# a_s1bJm } in
let {
a_s1bJo :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bJo = narrow8Word# (plusWord# ipv_s1b2m (__word 15)) } in
let {
a_s1bJn :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bJn = W8# a_s1bJo } in
let {
a_s1bJk :: (Word8, Word8)
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bJk = (a_s1bJl, a_s1bJn) } in
let {
a_s1bJh :: (Word8, (Word8, Word8))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bJh = (a_s1bJi, a_s1bJk) } in
let {
a_s1bJe :: (Word8, (Word8, (Word8, Word8)))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bJe = (a_s1bJf, a_s1bJh) } in
let {
a_s1bJb :: (Word8, (Word8, (Word8, (Word8, Word8))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bJb = (a_s1bJc, a_s1bJe) } in
let {
a_s1bJ8 :: (Word8, (Word8, (Word8, (Word8, (Word8, Word8)))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bJ8 = (a_s1bJ9, a_s1bJb) } in
let {
a_s1bJ5
:: (Word8, (Word8, (Word8, (Word8, (Word8, (Word8, Word8))))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bJ5 = (a_s1bJ6, a_s1bJ8) } in
let {
a_s1bJ2
:: (Word8,
(Word8, (Word8, (Word8, (Word8, (Word8, (Word8, Word8)))))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bJ2 = (a_s1bJ3, a_s1bJ5) } in
let {
a_s1bIZ
:: (Word8,
(Word8,
(Word8, (Word8, (Word8, (Word8, (Word8, (Word8, Word8))))))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bIZ = (a_s1bJ0, a_s1bJ2) } in
let {
a_s1bIW
:: (Word8,
(Word8,
(Word8,
(Word8, (Word8, (Word8, (Word8, (Word8, (Word8, Word8)))))))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bIW = (a_s1bIX, a_s1bIZ) } in
let {
a_s1bIT
:: (Word8,
(Word8,
(Word8,
(Word8,
(Word8, (Word8, (Word8, (Word8, (Word8, (Word8, Word8))))))))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bIT = (a_s1bIU, a_s1bIW) } in
let {
a_s1bIQ
:: (Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8, (Word8, (Word8, (Word8, (Word8, (Word8, Word8)))))))))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bIQ = (a_s1bIR, a_s1bIT) } in
let {
a_s1bIN
:: (Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8, (Word8, (Word8, (Word8, (Word8, (Word8, Word8))))))))))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bIN = (a_s1bIO, a_s1bIQ) } in
let {
a_s1bIK
:: (Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8, (Word8, (Word8, (Word8, (Word8, (Word8, Word8)))))))))))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bIK = (a_s1bIL, a_s1bIN) } in
let {
a_s1bIH
:: (Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8, (Word8, (Word8, (Word8, (Word8, (Word8, Word8))))))))))))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
a_s1bIH = (a_s1bII, a_s1bIK) } in
let {
x_a11iD
:: (Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8,
(Word8, (Word8, (Word8, (Word8, (Word8, Word8)))))))))))))))
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}]
x_a11iD = (a_s1bIF, a_s1bIH) } in
let {
a_s1bMU :: Word#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 2 0}]
a_s1bMU = narrow8Word# (plusWord# ipv_s1b2m (__word 16)) } in
let {
a_s1bMT :: Word8
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bMT = W8# a_s1bMU } in
let {
a_s1bMW :: Int#
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False,
WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
a_s1bMW = -# wild_X1n 16 } in
let {
a_s1bMV :: Int
[LclId,
Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True,
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}]
a_s1bMV = I# a_s1bMW } in
case eta_B2 of _ [Occ=Dead] { BufferRange dt_dRV3 dt1_dRV4 ->
case tagToEnum# @ Bool (<# (minusAddr# dt1_dRV4 dt_dRV3) 16)
of _ [Occ=Dead] {
False ->
case a_s1bIE x_a11iD (Ptr @ Word8 dt_dRV3) eta_X3
of _ [Occ=Dead] { (# ipv_a2ri, ipv1_a2rj #) ->
case ipv1_a2rj of _ [Occ=Dead] { Ptr dt4_aRgZ ->
((a_s1bKX
a_s1bMT a_s1bMV @ r_aRc1 eta_B1 (BufferRange dt4_aRgZ dt1_dRV4))
`cast` (NTCo:IO[0] <BuildSignal r_aRc1>_R
:: IO (BuildSignal r_aRc1)
~R# (State# RealWorld
-> (# State# RealWorld, BuildSignal r_aRc1 #))))
ipv_a2ri
}
};
True ->
(# eta_X3,
BufferFull
@ r_aRc1
16
dt_dRV3
((\ (ds_d11EF :: BufferRange)
(eta3_Xy [OS=OneShot] :: State# RealWorld) ->
case ds_d11EF of _ [Occ=Dead] { BufferRange dt3_d11FA dt4_d11FB ->
case a_s1bIE x_a11iD (Ptr @ Word8 dt3_d11FA) eta3_Xy
of _ [Occ=Dead] { (# ipv_a2ri, ipv1_a2rj #) ->
case ipv1_a2rj of _ [Occ=Dead] { Ptr dt6_aRgZ ->
((a_s1bKX
a_s1bMT a_s1bMV @ r_aRc1 eta_B1 (BufferRange dt6_aRgZ dt4_d11FB))
`cast` (NTCo:IO[0] <BuildSignal r_aRc1>_R
:: IO (BuildSignal r_aRc1)
~R# (State# RealWorld
-> (# State# RealWorld, BuildSignal r_aRc1 #))))
ipv_a2ri
}
}
})
`cast` (<BufferRange>_R -> Sym (NTCo:IO[0] <BuildSignal r_aRc1>_R)
:: (BufferRange
-> State# RealWorld -> (# State# RealWorld, BuildSignal r_aRc1 #))
~R# (BufferRange -> IO (BuildSignal r_aRc1)))) #)
}
};
0 ->
((eta_B1 eta_B2)
`cast` (NTCo:IO[0] <BuildSignal r_aRc1>_R
:: IO (BuildSignal r_aRc1)
~R# (State# RealWorld
-> (# State# RealWorld, BuildSignal r_aRc1 #))))
eta_X3
}
}
}

After desugaring we have this,

loop_a1aWv [Occ=LoopBreaker] :: Word8 -> a_a1aZq -> Builder
loop_a1aWv =
  \ (s_a1aWp :: Word8) (n_a1aWq :: a_a1aZq) ->
    case case s_a1aWp of _ [Occ=Dead] { __DEFAULT ->
         case n_a1aWq of _ [Occ=Dead] { __DEFAULT -> False }
         }
    of _ [Occ=Dead] {
      True -> undefined @ Builder
      False ->
        (\ _ [Occ=Dead, OS=OneShot] ->
           case == @ a_a1aZq $dEq_a1aZr n_a1aWq (fromInteger @ a_a1aZq $dNum_a1aZs (__integer 0))
           of _ [Occ=Dead] {
             True -> mempty @ Builder $fMonoidBuilder
             False ->
               (\ _ [Occ=Dead, OS=OneShot] ->
                  <>
                    @ Builder
                    $fMonoidBuilder
                    (singleton
                       (+ @ Word8
                          $fNumWord8
                          s_a1aWp
                          (fromInteger @ Word8 $fNumWord8 (__integer 0))))
                    (<>
                       @ Builder
                       $fMonoidBuilder
                       (singleton
                          (+ @ Word8
                             $fNumWord8
                             s_a1aWp
                             (fromInteger @ Word8 $fNumWord8 (__integer 1))))
						...
                                                                       (<>
                                                                          @ Builder
                                                                          $fMonoidBuilder
                                                                          (singleton
                                                                             (+ @ Word8
                                                                                $fNumWord8
                                                                                s_a1aWp
                                                                                (fromInteger
                                                                                   @ Word8
                                                                                   $fNumWord8
                                                                                   (__integer 15))))
                                                                          (loop_a1aWv
                                                                             (+ @ Word8
                                                                                $fNumWord8
                                                                                s_a1aWp
                                                                                (fromInteger
                                                                                   @ Word8
                                                                                   $fNumWord8
                                                                                   (__integer 16)))
                                                                             (- @ a_a1aZq
                                                                                $dNum_a1aZs
                                                                                n_a1aWq
                                                                                (fromInteger
                                                                                   @ a_a1aZq
                                                                                   $dNum_a1aZs
                                                                                   (__integer 16))))))))))))))))))))

Which the gentle simplifier pass then turns into,

loop_a1aWv [Occ=LoopBreaker] :: Word8 -> Int -> Builder
[LclId, Arity=2, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=NEVER}]
loop_a1aWv =
  \ (s_a1aWp :: Word8) (n_a1aWq :: Int) ->
    case case s_a1aWp of _ [Occ=Dead] { W8# ipv_s1b2m ->
         case n_a1aWq of _ [Occ=Dead] { I# ipv_s1b2p -> False }
         }
    of _ [Occ=Dead] {
      True -> undefined @ Builder
      False ->
        case eqInt n_a1aWq ($fNumInt_$cfromInteger (__integer 0))
        of _ [Occ=Dead] {
          True -> empty
          False ->
            <>
              @ Builder
              $fMonoidBuilder
              (singleton
                 ($fNumWord8_$c+ s_a1aWp ($fBitsWord8_$cfromInteger (__integer 0))))
              (<>
                 @ Builder
                 $fMonoidBuilder
                 (singleton
                    ($fNumWord8_$c+ s_a1aWp ($fBitsWord8_$cfromInteger (__integer 1))))
                                                        (<>
                                                           @ Builder
                                                           $fMonoidBuilder
                                                           (singleton
                                                              ($fNumWord8_$c+
                                                                 s_a1aWp
                                                                 ($fBitsWord8_$cfromInteger
                                                                    (__integer 15))))
                                                           (loop_a1aWv
                                                              ($fNumWord8_$c+
                                                                 s_a1aWp
                                                                 ($fBitsWord8_$cfromInteger
                                                                    (__integer 16)))
                                                              ($fNumInt_$c-
                                                                 n_a1aWq
                                                                 ($fNumInt_$cfromInteger
                                                                    (__integer 16)))))))))))))))))));

So far, so good. The specializer then runs and levels are then added but not much changes.

Then comes the Result size of Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = False}) pass, which floats out all of the __integer literals up to the top level, as well as the loop_a1aWv

lvl_s1b3j :: Integer
lvl_s1b3j = __integer 0
lvl_s1b3k :: Word8
lvl_s1b3k = $fBitsWord8_$cfromInteger lvl_s1b3j

lvl_s1b3l :: Integer
lvl_s1b3l = __integer 1
lvl_s1b3m :: Word8
lvl_s1b3m = $fBitsWord8_$cfromInteger lvl_s1b3l

...

loop_s1b3f [Occ=LoopBreaker] :: Word8 -> Int -> Builder
loop_s1b3f =
  \ (s_a1aWp :: Word8) (n_a1aWq :: Int) ->
    case case s_a1aWp of _ [Occ=Dead] { W8# ipv_s1b2m ->
         case n_a1aWq of _ [Occ=Dead] { I# ipv_s1b2p -> False }
         }
    of _ [Occ=Dead] {
	  True -> undefined @ Builder
      False ->
        case eqInt n_a1aWq lvl_s1b3i of _ [Occ=Dead] {
		  True -> empty
          False ->
            <>
              @ Builder
              $fMonoidBuilder
              (singleton ($fNumWord8_$c+ s_a1aWp lvl_s1b3k))
              (<>
                 @ Builder
                 $fMonoidBuilder
                 (singleton ($fNumWord8_$c+ s_a1aWp lvl_s1b3m))
				 ...
                                                        (<>
                                                           @ Builder
                                                           $fMonoidBuilder
                                                           (singleton
                                                              ($fNumWord8_$c+ s_a1aWp lvl_s1b3O))
                                                           (loop_s1b3f
                                                              ($fNumWord8_$c+ s_a1aWp lvl_s1b3Q)
                                                              ($fNumInt_$c-
                                                                 n_a1aWq lvl_s1b3S)))))))))))))))));

This is where the damage begins.

We then go through simplifier phase 2,

loop_s1b3f [Occ=LoopBreaker] :: Word8 -> Int -> Builder
[LclId,
 Arity=2,

 Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True,
         WorkFree=True, Expandable=True, Guidance=NEVER}]
loop_s1b3f =
  \ (s_a1aWp :: Word8) (n_a1aWq :: Int) ->
    case s_a1aWp of _ [Occ=Dead] { W8# ipv_s1b2m ->
    case n_a1aWq of _ [Occ=Dead] { I# ipv_s1b2p ->
    case ipv_s1b2p of wild_X1n {
      0 -> empty
      __DEFAULT ->
        append
          (primBounded
             (BP
                16
                ((\ (ds2_d2mT :: (Word8, (Word8, (Word8, (Word8, (Word8, (Word8, (Word8, (Word8, (Word8, (Word8, (Word8, (Word8, (Word8, (Word8, (Word8, Word8))))))))))))))))
                    (op_a26r :: Ptr Word8)
                    (eta_B1 [OS=OneShot] :: State# RealWorld) ->

                    case ds2_d2mT of _ [Occ=Dead] { (x1_a26p, x2_a26q) ->
                    case op_a26r of _ [Occ=Dead] { Ptr a_a3G8 ->
                    case x1_a26p of _ [Occ=Dead] { W8# x_a3Gc ->
                    case writeWord8OffAddr# @ RealWorld a_a3G8 0 x_a3Gc eta_B1
                    of s2_a3Ge [OS=OneShot] { __DEFAULT ->
                    let {
                      a_s1bBk :: Addr#
                      [LclId, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False, WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
                      a_s1bBk = plusAddr# a_a3G8 1 } in

                    case x2_a26q of _ [Occ=Dead] { (x1_X2ag, x2_X2ai) ->
                    case x1_X2ag of _ [Occ=Dead] { W8# x_X3K9 ->
                    case writeWord8OffAddr# @ RealWorld a_s1bBk 0 x_X3K9 s2_a3Ge
                    of s2_X3Ke [OS=OneShot] { __DEFAULT ->
                    case x2_X2ai of _ [Occ=Dead] { (x1_X27d, x2_X27f) ->
                    let {
                      a_X3H0 :: Addr#
                      [LclId, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False, WorkFree=False, Expandable=True, Guidance=IF_ARGS [] 1 0}]
                      a_X3H0 = plusAddr# a_s1bBk 1 } in

					...
                    case x2_X28C of _ [Occ=Dead] { W8# x_X3Ii ->
                    case writeWord8OffAddr# @ RealWorld a_s1b4s 0 x_X3Ii s2_X3Ld
                    of s2_X3KP [OS=OneShot] { __DEFAULT ->
                    (# s2_X3KP, Ptr @ Word8 (plusAddr# a_s1b4s 1) #)
                    }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}})
             (W8# (narrow8Word# ipv_s1b2m),
              (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 1))),
               (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 2))),
                (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 3))),
                 (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 4))),
                  (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 5))),
                   (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 6))),
                    (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 7))),
                     (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 8))),
                      (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 9))),
                       (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 10))),
                        (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 11))),
                         (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 12))),
                          (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 13))),
                           (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 14))),
                            W8#
                              (narrow8Word# (plusWord# ipv_s1b2m (__word 15)))))))))))))))))))
          (loop_s1b3f
             (W8# (narrow8Word# (plusWord# ipv_s1b2m (__word 16))))
             (I# (-# wild_X1n 16)));
	}}}

From this point forth the compiler seems stuck.

The phase 1 simplifier pass shuffles things around a bit, turning the tuple of W8#s above into a sphaghetti of lets building up a tuple.

This persists through simplifier phase 0. The float inwards pass succeeds in pushing the

Call-arity analysis

Simplifier phase 0 [post-call-arity]

Demand analysis

Worker Wrapper binds

Simplifier 0 [post-worker-wrapper] turns the tuple-sphagetti into a bunch of independent lets outside the case tagToEnum# @ Bool (<# (minusAddr# dt1_dRV4 dt_dRV3) 16) analysis. These bindings are shared by both branches of this case.

Levels added renders the Core quite clearly.

Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = True})

CSE

Float inwards

Liberate case

Simplifier 0 [post-liberate-case]

SpecConstr

Simplifier 0 [final]

import Data.Char (ord)
import Data.Word
import Data.Monoid
import Data.Binary.Builder
import qualified Data.ByteString.Lazy as L
main = do
let run = L.length . toLazyByteString
n = 1 * (2 ^ (28 :: Int)) -- one MB
print $ run $ putWord8N16 n
putWord8N16 :: Int -> Builder
putWord8N16 = loop 0
where loop s n | s `seq` n `seq` False = undefined
loop _ 0 = mempty
loop s n =
singleton (s+0) <>
singleton (s+1) <>
singleton (s+2) <>
singleton (s+3) <>
singleton (s+4) <>
singleton (s+5) <>
singleton (s+6) <>
singleton (s+7) <>
singleton (s+8) <>
singleton (s+9) <>
singleton (s+10) <>
singleton (s+11) <>
singleton (s+12) <>
singleton (s+13) <>
singleton (s+14) <>
singleton (s+15) <>
loop (s+16) (n-16)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment