@sml_check_flag=external local_unnamed_addr global i32
@_SMLZ5Match=external unnamed_addr constant i8*
@a=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN9UnionFind3newE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN9UnionFind3newE_81 to void(...)*),i32 -2147483647}>,align 8
@b=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN9UnionFind4findE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN9UnionFind4findE_82 to void(...)*),i32 -2147483647}>,align 8
@c=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i32(i8*)*@_SMLLLN9UnionFind4sizeE_51 to void(...)*),void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind4sizeE_83 to void(...)*),i32 -2147483647}>,align 8
@d=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN9UnionFind4sizeE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN9UnionFind4sizeE_84 to void(...)*),i32 -2147483647}>,align 8
@e=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i32(i8*)*@_SMLLLN9UnionFind4sameE_59 to void(...)*),void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind4sameE_85 to void(...)*),i32 -2147483647}>,align 8
@f=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN9UnionFind4sameE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN9UnionFind4sameE_86 to void(...)*),i32 -2147483647}>,align 8
@g=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i32(i8*)*@_SMLLLN9UnionFind5equalE_63 to void(...)*),void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind5equalE_87 to void(...)*),i32 -2147483647}>,align 8
@h=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN9UnionFind5equalE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN9UnionFind5equalE_88 to void(...)*),i32 -2147483647}>,align 8
@i=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN9UnionFind5unionE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN9UnionFind5unionE_90 to void(...)*),i32 -2147483647}>,align 8
@j=private unnamed_addr constant<{[4x i8],i32,[52x i8]}><{[4x i8]zeroinitializer,i32 -2147483596,[52x i8]c"src/compiler/libs/util/main/UnionFind.sml:16.2(319)\00"}>,align 8
@k=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN9UnionFind6updateE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN9UnionFind6updateE_92 to void(...)*),i32 -2147483647}>,align 8
@_SMLZN9UnionFind3newE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@a,i64 0,i32 2)to i8*)
@_SMLZN9UnionFind4findE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@b,i64 0,i32 2)to i8*)
@_SMLZN9UnionFind4sizeE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@d,i64 0,i32 2)to i8*)
@_SMLZN9UnionFind4sameE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@f,i64 0,i32 2)to i8*)
@_SMLZN9UnionFind5equalE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@h,i64 0,i32 2)to i8*)
@_SMLZN9UnionFind5unionE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@i,i64 0,i32 2)to i8*)
@_SMLZN9UnionFind6updateE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@k,i64 0,i32 2)to i8*)
@_SML_ftab272769c068a0d80e_UnionFind=external global i8
@l=internal unnamed_addr global i1 false
declare void@llvm.gcroot(i8**,i8*)#0
declare i8*@sml_alloc(i32 inreg)local_unnamed_addr#0
declare void@sml_check(i32 inreg)local_unnamed_addr
declare void@sml_gcroot(i8*,void()*,i8*,i8*)local_unnamed_addr#0
declare void@sml_matchcomp_bug()local_unnamed_addr
declare i32@sml_obj_equal(i8*inreg,i8*inreg)local_unnamed_addr#0
declare void@sml_raise(i8*inreg)local_unnamed_addr#1
declare void@sml_write(i8*inreg,i8**inreg,i8*inreg)local_unnamed_addr#0
define private void@_SML_tabb272769c068a0d80e_UnionFind()#2{
unreachable
}
define void@_SML_load272769c068a0d80e_UnionFind(i8*%a)local_unnamed_addr#0{
%b=load i1,i1*@l,align 1
br i1%b,label%c,label%d
c:
ret void
d:
store i1 true,i1*@l,align 1
tail call void@sml_gcroot(i8*%a,void()*@_SML_tabb272769c068a0d80e_UnionFind,i8*@_SML_ftab272769c068a0d80e_UnionFind,i8*null)#0
ret void
}
define void@_SML_main272769c068a0d80e_UnionFind()local_unnamed_addr#3 gc"smlsharp"{
ret void
}
define internal fastcc i8*@_SMLLLN9UnionFind3newE_41(i8*inreg%a,i8*inreg%b)#3 gc"smlsharp"{
%c=alloca i8*,align 8
%d=alloca i8*,align 8
%e=alloca i8*,align 8
call void@llvm.gcroot(i8**%c,i8*null)#0
call void@llvm.gcroot(i8**%d,i8*null)#0
call void@llvm.gcroot(i8**%e,i8*null)#0
store i8*%a,i8**%c,align 8
store i8*%b,i8**%d,align 8
%f=getelementptr inbounds i8,i8*%a,i64 4
%g=bitcast i8*%f to i32*
%h=load i32,i32*%g,align 4
%i=add i32%h,3
%j=sub i32 0,%h
%k=and i32%i,%j
%l=add i32%h,7
%m=add i32%l,%k
%n=and i32%m,-8
%o=lshr i32%k,3
%p=bitcast i8*%a to i32*
%q=load i32,i32*%p,align 4
%r=shl i32%q,%o
%s=or i32%n,4
%t=call i8*@sml_alloc(i32 inreg 8)#0
%u=getelementptr inbounds i8,i8*%t,i64 -4
%v=bitcast i8*%u to i32*
store i32 805306376,i32*%v,align 4
store i8*%t,i8**%e,align 8
%w=bitcast i8*%t to i64*
store i64 0,i64*%w,align 1
%x=load i8*,i8**%c,align 8
%y=getelementptr inbounds i8,i8*%x,i64 4
%z=bitcast i8*%y to i32*
%A=load i32,i32*%z,align 4
store i8*null,i8**%c,align 8
%B=bitcast i8*%x to i32*
%C=load i32,i32*%B,align 4
%D=call i8*@sml_alloc(i32 inreg%s)#0
%E=or i32%n,1342177280
%F=getelementptr inbounds i8,i8*%D,i64 -4
%G=bitcast i8*%F to i32*
store i32%E,i32*%G,align 4
store i8*%D,i8**%c,align 8
call void@llvm.memset.p0i8.i32(i8*%D,i8 0,i32%s,i1 false)
%H=bitcast i8*%D to i32*
store i32 1,i32*%H,align 4
%I=icmp eq i32%C,0
%J=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%K=sext i32%k to i64
%L=getelementptr inbounds i8,i8*%D,i64%K
br i1%I,label%M,label%N
M:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%L,i8*%J,i32%A,i1 false)
br label%P
N:
%O=bitcast i8*%L to i8**
store i8*%J,i8**%O,align 8
br label%P
P:
%Q=sext i32%n to i64
%R=getelementptr inbounds i8,i8*%D,i64%Q
%S=bitcast i8*%R to i32*
store i32%r,i32*%S,align 4
%T=call i8*@sml_alloc(i32 inreg 20)#0
%U=bitcast i8*%T to i32*
%V=getelementptr inbounds i8,i8*%T,i64 -4
%W=bitcast i8*%V to i32*
store i32 1342177296,i32*%W,align 4
%X=getelementptr inbounds i8,i8*%T,i64 4
%Y=bitcast i8*%X to i32*
store i32 0,i32*%Y,align 1
store i32 1,i32*%U,align 4
%Z=load i8*,i8**%c,align 8
%aa=getelementptr inbounds i8,i8*%T,i64 8
%ab=bitcast i8*%aa to i8**
store i8*%Z,i8**%ab,align 8
%ac=getelementptr inbounds i8,i8*%T,i64 16
%ad=bitcast i8*%ac to i32*
store i32 2,i32*%ad,align 4
%ae=load i8*,i8**%e,align 8
%af=bitcast i8*%ae to i8**
call void@sml_write(i8*inreg%ae,i8**inreg%af,i8*inreg%T)#0
%ag=load i8*,i8**%e,align 8
ret i8*%ag
}
define fastcc i8*@_SMLFN9UnionFind3newE(i32 inreg%a,i32 inreg%b)#3 gc"smlsharp"{
%c=alloca i8*,align 8
call void@llvm.gcroot(i8**%c,i8*null)#0
%d=call i8*@sml_alloc(i32 inreg 12)#0
%e=bitcast i8*%d to i32*
%f=getelementptr inbounds i8,i8*%d,i64 -4
%g=bitcast i8*%f to i32*
store i32 1342177288,i32*%g,align 4
store i8*%d,i8**%c,align 8
store i32%a,i32*%e,align 4
%h=getelementptr inbounds i8,i8*%d,i64 4
%i=bitcast i8*%h to i32*
store i32%b,i32*%i,align 4
%j=getelementptr inbounds i8,i8*%d,i64 8
%k=bitcast i8*%j to i32*
store i32 0,i32*%k,align 4
%l=call i8*@sml_alloc(i32 inreg 28)#0
%m=getelementptr inbounds i8,i8*%l,i64 -4
%n=bitcast i8*%m to i32*
store i32 1342177304,i32*%n,align 4
%o=load i8*,i8**%c,align 8
%p=bitcast i8*%l to i8**
store i8*%o,i8**%p,align 8
%q=getelementptr inbounds i8,i8*%l,i64 8
%r=bitcast i8*%q to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind3newE_41 to void(...)*),void(...)**%r,align 8
%s=getelementptr inbounds i8,i8*%l,i64 16
%t=bitcast i8*%s to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind3newE_41 to void(...)*),void(...)**%t,align 8
%u=getelementptr inbounds i8,i8*%l,i64 24
%v=bitcast i8*%u to i32*
store i32 1,i32*%v,align 4
ret i8*%l
}
define internal fastcc i8*@_SMLLLN9UnionFind4findE_46(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
o:
%c=alloca i8*,align 8
%d=alloca i8*,align 8
%e=alloca i8*,align 8
call void@llvm.gcroot(i8**%c,i8*null)#0
call void@llvm.gcroot(i8**%d,i8*null)#0
call void@llvm.gcroot(i8**%e,i8*null)#0
store i8*%a,i8**%e,align 8
%f=getelementptr inbounds i8,i8*%a,i64 4
%g=bitcast i8*%f to i32*
%h=load i32,i32*%g,align 4
%i=add i32%h,3
%j=sub i32 0,%h
%k=and i32%i,%j
%l=bitcast i8**%c to i8***
br label%m
m:
%n=phi i8*[%aw,%at],[%b,%o]
store i8*%n,i8**%c,align 8
%p=load atomic i32,i32*@sml_check_flag unordered,align 4
%q=icmp eq i32%p,0
%r=bitcast i8*%n to i8**
br i1%q,label%v,label%s
s:
call void@sml_check(i32 inreg%p)
%t=load i8**,i8***%l,align 8
%u=bitcast i8**%t to i8*
br label%v
v:
%w=phi i8*[%u,%s],[%n,%m]
%x=phi i8**[%t,%s],[%r,%m]
%y=load i8*,i8**%x,align 8
%z=bitcast i8*%y to i32*
%A=load i32,i32*%z,align 4
switch i32%A,label%B[
i32 1,label%aI
i32 0,label%T
]
B:
store i8*null,i8**%e,align 8
call void@sml_matchcomp_bug()
%C=load i8*,i8**@_SMLZ5Match,align 8
store i8*%C,i8**%c,align 8
%D=call i8*@sml_alloc(i32 inreg 20)#0
%E=getelementptr inbounds i8,i8*%D,i64 -4
%F=bitcast i8*%E to i32*
store i32 1342177296,i32*%F,align 4
store i8*%D,i8**%d,align 8
%G=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%H=bitcast i8*%D to i8**
store i8*%G,i8**%H,align 8
%I=getelementptr inbounds i8,i8*%D,i64 8
%J=bitcast i8*%I to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%J,align 8
%K=getelementptr inbounds i8,i8*%D,i64 16
%L=bitcast i8*%K to i32*
store i32 3,i32*%L,align 4
%M=call i8*@sml_alloc(i32 inreg 60)#0
%N=getelementptr inbounds i8,i8*%M,i64 -4
%O=bitcast i8*%N to i32*
store i32 1342177336,i32*%O,align 4
%P=getelementptr inbounds i8,i8*%M,i64 56
%Q=bitcast i8*%P to i32*
store i32 1,i32*%Q,align 4
%R=load i8*,i8**%d,align 8
%S=bitcast i8*%M to i8**
store i8*%R,i8**%S,align 8
call void@sml_raise(i8*inreg%M)#1
unreachable
T:
%U=getelementptr inbounds i8,i8*%y,i64 8
%V=bitcast i8*%U to i8**
%W=load i8*,i8**%V,align 8
store i8*%W,i8**%d,align 8
%X=bitcast i8*%W to i8**
%Y=load i8*,i8**%X,align 8
%Z=bitcast i8*%Y to i32*
%aa=load i32,i32*%Z,align 4
switch i32%aa,label%ab[
i32 1,label%ay
i32 0,label%at
]
ab:
store i8*null,i8**%d,align 8
store i8*null,i8**%e,align 8
call void@sml_matchcomp_bug()
%ac=load i8*,i8**@_SMLZ5Match,align 8
store i8*%ac,i8**%c,align 8
%ad=call i8*@sml_alloc(i32 inreg 20)#0
%ae=getelementptr inbounds i8,i8*%ad,i64 -4
%af=bitcast i8*%ae to i32*
store i32 1342177296,i32*%af,align 4
store i8*%ad,i8**%d,align 8
%ag=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%ah=bitcast i8*%ad to i8**
store i8*%ag,i8**%ah,align 8
%ai=getelementptr inbounds i8,i8*%ad,i64 8
%aj=bitcast i8*%ai to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%aj,align 8
%ak=getelementptr inbounds i8,i8*%ad,i64 16
%al=bitcast i8*%ak to i32*
store i32 3,i32*%al,align 4
%am=call i8*@sml_alloc(i32 inreg 60)#0
%an=getelementptr inbounds i8,i8*%am,i64 -4
%ao=bitcast i8*%an to i32*
store i32 1342177336,i32*%ao,align 4
%ap=getelementptr inbounds i8,i8*%am,i64 56
%aq=bitcast i8*%ap to i32*
store i32 1,i32*%aq,align 4
%ar=load i8*,i8**%d,align 8
%as=bitcast i8*%am to i8**
store i8*%ar,i8**%as,align 8
call void@sml_raise(i8*inreg%am)#1
unreachable
at:
store i8*null,i8**%d,align 8
%au=getelementptr inbounds i8,i8*%Y,i64 8
%av=bitcast i8*%au to i8**
%aw=load i8*,i8**%av,align 8
store i8*null,i8**%c,align 8
%ax=bitcast i8*%w to i8**
call void@sml_write(i8*inreg%w,i8**inreg%ax,i8*inreg%Y)#0
br label%m
ay:
%az=getelementptr inbounds i8,i8*%Y,i64 8
%aA=bitcast i8*%az to i8**
%aB=load i8*,i8**%aA,align 8
store i8*%aB,i8**%c,align 8
%aC=call i8*@sml_alloc(i32 inreg 20)#0
%aD=getelementptr inbounds i8,i8*%aC,i64 -4
%aE=bitcast i8*%aD to i32*
store i32 1342177296,i32*%aE,align 4
%aF=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%aG=bitcast i8*%aC to i8**
store i8*%aF,i8**%aG,align 8
%aH=load i8*,i8**%c,align 8
br label%aS
aI:
%aJ=getelementptr inbounds i8,i8*%y,i64 8
%aK=bitcast i8*%aJ to i8**
%aL=load i8*,i8**%aK,align 8
store i8*%aL,i8**%d,align 8
%aM=call i8*@sml_alloc(i32 inreg 20)#0
%aN=getelementptr inbounds i8,i8*%aM,i64 -4
%aO=bitcast i8*%aN to i32*
store i32 1342177296,i32*%aO,align 4
%aP=load i8*,i8**%c,align 8
%aQ=bitcast i8*%aM to i8**
store i8*%aP,i8**%aQ,align 8
%aR=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
br label%aS
aS:
%aT=phi i8*[%aC,%ay],[%aM,%aI]
%aU=phi i8*[%aH,%ay],[%aR,%aI]
%aV=getelementptr inbounds i8,i8*%aT,i64 8
%aW=bitcast i8*%aV to i8**
store i8*%aU,i8**%aW,align 8
%aX=getelementptr inbounds i8,i8*%aT,i64 16
%aY=bitcast i8*%aX to i32*
store i32 3,i32*%aY,align 4
store i8*%aU,i8**%c,align 8
%aZ=load i8*,i8**%e,align 8
%a0=bitcast i8*%aZ to i32*
%a1=load i32,i32*%a0,align 4
%a2=icmp eq i32%a1,0
br i1%a2,label%a8,label%a3
a3:
%a4=sext i32%k to i64
%a5=getelementptr inbounds i8,i8*%aU,i64%a4
%a6=bitcast i8*%a5 to i8**
%a7=load i8*,i8**%a6,align 8
ret i8*%a7
a8:
store i8*null,i8**%e,align 8
%a9=getelementptr inbounds i8,i8*%aZ,i64 4
%ba=bitcast i8*%a9 to i32*
%bb=load i32,i32*%ba,align 4
%bc=call i8*@sml_alloc(i32 inreg%bb)#0
%bd=getelementptr inbounds i8,i8*%bc,i64 -4
%be=bitcast i8*%bd to i32*
store i32%bb,i32*%be,align 4
%bf=load i8*,i8**%c,align 8
%bg=sext i32%k to i64
%bh=getelementptr inbounds i8,i8*%bf,i64%bg
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bc,i8*%bh,i32%bb,i1 false)
ret i8*%bc
}
define fastcc i8*@_SMLFN9UnionFind4findE(i32 inreg%a,i32 inreg%b)#3 gc"smlsharp"{
%c=alloca i8*,align 8
call void@llvm.gcroot(i8**%c,i8*null)#0
%d=call i8*@sml_alloc(i32 inreg 12)#0
%e=bitcast i8*%d to i32*
%f=getelementptr inbounds i8,i8*%d,i64 -4
%g=bitcast i8*%f to i32*
store i32 1342177288,i32*%g,align 4
store i8*%d,i8**%c,align 8
store i32%a,i32*%e,align 4
%h=getelementptr inbounds i8,i8*%d,i64 4
%i=bitcast i8*%h to i32*
store i32%b,i32*%i,align 4
%j=getelementptr inbounds i8,i8*%d,i64 8
%k=bitcast i8*%j to i32*
store i32 0,i32*%k,align 4
%l=call i8*@sml_alloc(i32 inreg 28)#0
%m=getelementptr inbounds i8,i8*%l,i64 -4
%n=bitcast i8*%m to i32*
store i32 1342177304,i32*%n,align 4
%o=load i8*,i8**%c,align 8
%p=bitcast i8*%l to i8**
store i8*%o,i8**%p,align 8
%q=getelementptr inbounds i8,i8*%l,i64 8
%r=bitcast i8*%q to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind4findE_46 to void(...)*),void(...)**%r,align 8
%s=getelementptr inbounds i8,i8*%l,i64 16
%t=bitcast i8*%s to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind4findE_46 to void(...)*),void(...)**%t,align 8
%u=getelementptr inbounds i8,i8*%l,i64 24
%v=bitcast i8*%u to i32*
store i32 1,i32*%v,align 4
ret i8*%l
}
define internal fastcc i32@_SMLLLN9UnionFind4sizeE_51(i8*inreg%a)#4 gc"smlsharp"{
g:
%b=alloca i8*,align 8
%c=alloca i8*,align 8
call void@llvm.gcroot(i8**%b,i8*null)#0
call void@llvm.gcroot(i8**%c,i8*null)#0
%d=bitcast i8**%b to i8***
br label%e
e:
%f=phi i8*[%ao,%al],[%a,%g]
store i8*%f,i8**%b,align 8
%h=load atomic i32,i32*@sml_check_flag unordered,align 4
%i=icmp eq i32%h,0
%j=bitcast i8*%f to i8**
br i1%i,label%n,label%k
k:
call void@sml_check(i32 inreg%h)
%l=load i8**,i8***%d,align 8
%m=bitcast i8**%l to i8*
br label%n
n:
%o=phi i8*[%m,%k],[%f,%e]
%p=phi i8**[%l,%k],[%j,%e]
%q=load i8*,i8**%p,align 8
%r=bitcast i8*%q to i32*
%s=load i32,i32*%r,align 4
switch i32%s,label%t[
i32 1,label%az
i32 0,label%L
]
t:
call void@sml_matchcomp_bug()
%u=load i8*,i8**@_SMLZ5Match,align 8
store i8*%u,i8**%b,align 8
%v=call i8*@sml_alloc(i32 inreg 20)#0
%w=getelementptr inbounds i8,i8*%v,i64 -4
%x=bitcast i8*%w to i32*
store i32 1342177296,i32*%x,align 4
store i8*%v,i8**%c,align 8
%y=load i8*,i8**%b,align 8
store i8*null,i8**%b,align 8
%z=bitcast i8*%v to i8**
store i8*%y,i8**%z,align 8
%A=getelementptr inbounds i8,i8*%v,i64 8
%B=bitcast i8*%A to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%B,align 8
%C=getelementptr inbounds i8,i8*%v,i64 16
%D=bitcast i8*%C to i32*
store i32 3,i32*%D,align 4
%E=call i8*@sml_alloc(i32 inreg 60)#0
%F=getelementptr inbounds i8,i8*%E,i64 -4
%G=bitcast i8*%F to i32*
store i32 1342177336,i32*%G,align 4
%H=getelementptr inbounds i8,i8*%E,i64 56
%I=bitcast i8*%H to i32*
store i32 1,i32*%I,align 4
%J=load i8*,i8**%c,align 8
%K=bitcast i8*%E to i8**
store i8*%J,i8**%K,align 8
call void@sml_raise(i8*inreg%E)#1
unreachable
L:
%M=getelementptr inbounds i8,i8*%q,i64 8
%N=bitcast i8*%M to i8**
%O=load i8*,i8**%N,align 8
store i8*%O,i8**%c,align 8
%P=bitcast i8*%O to i8**
%Q=load i8*,i8**%P,align 8
%R=bitcast i8*%Q to i32*
%S=load i32,i32*%R,align 4
switch i32%S,label%T[
i32 1,label%aq
i32 0,label%al
]
T:
store i8*null,i8**%c,align 8
call void@sml_matchcomp_bug()
%U=load i8*,i8**@_SMLZ5Match,align 8
store i8*%U,i8**%b,align 8
%V=call i8*@sml_alloc(i32 inreg 20)#0
%W=getelementptr inbounds i8,i8*%V,i64 -4
%X=bitcast i8*%W to i32*
store i32 1342177296,i32*%X,align 4
store i8*%V,i8**%c,align 8
%Y=load i8*,i8**%b,align 8
store i8*null,i8**%b,align 8
%Z=bitcast i8*%V to i8**
store i8*%Y,i8**%Z,align 8
%aa=getelementptr inbounds i8,i8*%V,i64 8
%ab=bitcast i8*%aa to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%ab,align 8
%ac=getelementptr inbounds i8,i8*%V,i64 16
%ad=bitcast i8*%ac to i32*
store i32 3,i32*%ad,align 4
%ae=call i8*@sml_alloc(i32 inreg 60)#0
%af=getelementptr inbounds i8,i8*%ae,i64 -4
%ag=bitcast i8*%af to i32*
store i32 1342177336,i32*%ag,align 4
%ah=getelementptr inbounds i8,i8*%ae,i64 56
%ai=bitcast i8*%ah to i32*
store i32 1,i32*%ai,align 4
%aj=load i8*,i8**%c,align 8
%ak=bitcast i8*%ae to i8**
store i8*%aj,i8**%ak,align 8
call void@sml_raise(i8*inreg%ae)#1
unreachable
al:
store i8*null,i8**%c,align 8
%am=getelementptr inbounds i8,i8*%Q,i64 8
%an=bitcast i8*%am to i8**
%ao=load i8*,i8**%an,align 8
store i8*null,i8**%b,align 8
%ap=bitcast i8*%o to i8**
call void@sml_write(i8*inreg%o,i8**inreg%ap,i8*inreg%Q)#0
br label%e
aq:
%ar=getelementptr inbounds i8,i8*%Q,i64 8
%as=bitcast i8*%ar to i8**
%at=load i8*,i8**%as,align 8
store i8*%at,i8**%b,align 8
%au=call i8*@sml_alloc(i32 inreg 20)#0
%av=getelementptr inbounds i8,i8*%au,i64 -4
%aw=bitcast i8*%av to i32*
store i32 1342177296,i32*%aw,align 4
%ax=load i8*,i8**%c,align 8
%ay=bitcast i8*%au to i8**
store i8*%ax,i8**%ay,align 8
br label%aI
az:
%aA=getelementptr inbounds i8,i8*%q,i64 8
%aB=bitcast i8*%aA to i8**
%aC=load i8*,i8**%aB,align 8
store i8*%aC,i8**%c,align 8
%aD=call i8*@sml_alloc(i32 inreg 20)#0
%aE=getelementptr inbounds i8,i8*%aD,i64 -4
%aF=bitcast i8*%aE to i32*
store i32 1342177296,i32*%aF,align 4
%aG=load i8*,i8**%b,align 8
%aH=bitcast i8*%aD to i8**
store i8*%aG,i8**%aH,align 8
br label%aI
aI:
%aJ=phi i8*[%au,%aq],[%aD,%az]
%aK=phi i8**[%b,%aq],[%c,%az]
%aL=load i8*,i8**%aK,align 8
%aM=getelementptr inbounds i8,i8*%aJ,i64 8
%aN=bitcast i8*%aM to i8**
store i8*%aL,i8**%aN,align 8
%aO=getelementptr inbounds i8,i8*%aJ,i64 16
%aP=bitcast i8*%aO to i32*
store i32 3,i32*%aP,align 4
%aQ=bitcast i8*%aL to i32*
%aR=load i32,i32*%aQ,align 4
ret i32%aR
}
define fastcc i8*@_SMLFN9UnionFind4sizeE(i32 inreg%a,i32 inreg%b)#3 gc"smlsharp"{
ret i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@c,i64 0,i32 2)to i8*)
}
define internal fastcc i32@_SMLLLN9UnionFind4sameE_59(i8*inreg%a)#4 gc"smlsharp"{
m:
%b=alloca i8*,align 8
%c=alloca i8*,align 8
%d=alloca i8*,align 8
call void@llvm.gcroot(i8**%b,i8*null)#0
call void@llvm.gcroot(i8**%c,i8*null)#0
call void@llvm.gcroot(i8**%d,i8*null)#0
%e=bitcast i8*%a to i8**
%f=load i8*,i8**%e,align 8
%g=getelementptr inbounds i8,i8*%a,i64 8
%h=bitcast i8*%g to i8**
%i=load i8*,i8**%h,align 8
store i8*%i,i8**%b,align 8
%j=bitcast i8**%c to i8***
br label%k
k:
%l=phi i8*[%au,%ar],[%f,%m]
%n=bitcast i8*%l to i8**
store i8*%l,i8**%c,align 8
%o=load atomic i32,i32*@sml_check_flag unordered,align 4
%p=icmp eq i32%o,0
br i1%p,label%t,label%q
q:
call void@sml_check(i32 inreg%o)
%r=load i8**,i8***%j,align 8
%s=bitcast i8**%r to i8*
br label%t
t:
%u=phi i8*[%s,%q],[%l,%k]
%v=phi i8**[%r,%q],[%n,%k]
%w=load i8*,i8**%v,align 8
%x=bitcast i8*%w to i32*
%y=load i32,i32*%x,align 4
switch i32%y,label%z[
i32 1,label%aG
i32 0,label%R
]
z:
store i8*null,i8**%c,align 8
call void@sml_matchcomp_bug()
%A=load i8*,i8**@_SMLZ5Match,align 8
store i8*%A,i8**%b,align 8
%B=call i8*@sml_alloc(i32 inreg 20)#0
%C=getelementptr inbounds i8,i8*%B,i64 -4
%D=bitcast i8*%C to i32*
store i32 1342177296,i32*%D,align 4
store i8*%B,i8**%c,align 8
%E=load i8*,i8**%b,align 8
store i8*null,i8**%b,align 8
%F=bitcast i8*%B to i8**
store i8*%E,i8**%F,align 8
%G=getelementptr inbounds i8,i8*%B,i64 8
%H=bitcast i8*%G to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%H,align 8
%I=getelementptr inbounds i8,i8*%B,i64 16
%J=bitcast i8*%I to i32*
store i32 3,i32*%J,align 4
%K=call i8*@sml_alloc(i32 inreg 60)#0
%L=getelementptr inbounds i8,i8*%K,i64 -4
%M=bitcast i8*%L to i32*
store i32 1342177336,i32*%M,align 4
%N=getelementptr inbounds i8,i8*%K,i64 56
%O=bitcast i8*%N to i32*
store i32 1,i32*%O,align 4
%P=load i8*,i8**%c,align 8
%Q=bitcast i8*%K to i8**
store i8*%P,i8**%Q,align 8
call void@sml_raise(i8*inreg%K)#1
unreachable
R:
%S=getelementptr inbounds i8,i8*%w,i64 8
%T=bitcast i8*%S to i8**
%U=load i8*,i8**%T,align 8
store i8*%U,i8**%d,align 8
%V=bitcast i8*%U to i8**
%W=load i8*,i8**%V,align 8
%X=bitcast i8*%W to i32*
%Y=load i32,i32*%X,align 4
switch i32%Y,label%Z[
i32 1,label%aw
i32 0,label%ar
]
Z:
store i8*null,i8**%c,align 8
store i8*null,i8**%d,align 8
call void@sml_matchcomp_bug()
%aa=load i8*,i8**@_SMLZ5Match,align 8
store i8*%aa,i8**%b,align 8
%ab=call i8*@sml_alloc(i32 inreg 20)#0
%ac=getelementptr inbounds i8,i8*%ab,i64 -4
%ad=bitcast i8*%ac to i32*
store i32 1342177296,i32*%ad,align 4
store i8*%ab,i8**%c,align 8
%ae=load i8*,i8**%b,align 8
store i8*null,i8**%b,align 8
%af=bitcast i8*%ab to i8**
store i8*%ae,i8**%af,align 8
%ag=getelementptr inbounds i8,i8*%ab,i64 8
%ah=bitcast i8*%ag to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%ah,align 8
%ai=getelementptr inbounds i8,i8*%ab,i64 16
%aj=bitcast i8*%ai to i32*
store i32 3,i32*%aj,align 4
%ak=call i8*@sml_alloc(i32 inreg 60)#0
%al=getelementptr inbounds i8,i8*%ak,i64 -4
%am=bitcast i8*%al to i32*
store i32 1342177336,i32*%am,align 4
%an=getelementptr inbounds i8,i8*%ak,i64 56
%ao=bitcast i8*%an to i32*
store i32 1,i32*%ao,align 4
%ap=load i8*,i8**%c,align 8
%aq=bitcast i8*%ak to i8**
store i8*%ap,i8**%aq,align 8
call void@sml_raise(i8*inreg%ak)#1
unreachable
ar:
store i8*null,i8**%d,align 8
%as=getelementptr inbounds i8,i8*%W,i64 8
%at=bitcast i8*%as to i8**
%au=load i8*,i8**%at,align 8
store i8*null,i8**%c,align 8
%av=bitcast i8*%u to i8**
call void@sml_write(i8*inreg%u,i8**inreg%av,i8*inreg%W)#0
br label%k
aw:
%ax=getelementptr inbounds i8,i8*%W,i64 8
%ay=bitcast i8*%ax to i8**
%az=load i8*,i8**%ay,align 8
store i8*%az,i8**%c,align 8
%aA=call i8*@sml_alloc(i32 inreg 20)#0
%aB=getelementptr inbounds i8,i8*%aA,i64 -4
%aC=bitcast i8*%aB to i32*
store i32 1342177296,i32*%aC,align 4
%aD=load i8*,i8**%d,align 8
%aE=bitcast i8*%aA to i8**
store i8*%aD,i8**%aE,align 8
%aF=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
br label%aQ
aG:
%aH=getelementptr inbounds i8,i8*%w,i64 8
%aI=bitcast i8*%aH to i8**
%aJ=load i8*,i8**%aI,align 8
store i8*%aJ,i8**%d,align 8
%aK=call i8*@sml_alloc(i32 inreg 20)#0
%aL=getelementptr inbounds i8,i8*%aK,i64 -4
%aM=bitcast i8*%aL to i32*
store i32 1342177296,i32*%aM,align 4
%aN=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%aO=bitcast i8*%aK to i8**
store i8*%aN,i8**%aO,align 8
%aP=load i8*,i8**%d,align 8
br label%aQ
aQ:
%aR=phi i8*[%aA,%aw],[%aK,%aG]
%aS=phi i8*[%aF,%aw],[%aP,%aG]
%aT=phi i8*[%aD,%aw],[%aN,%aG]
%aU=getelementptr inbounds i8,i8*%aR,i64 8
%aV=bitcast i8*%aU to i8**
store i8*%aS,i8**%aV,align 8
%aW=getelementptr inbounds i8,i8*%aR,i64 16
%aX=bitcast i8*%aW to i32*
store i32 3,i32*%aX,align 4
store i8*%aT,i8**%d,align 8
%aY=bitcast i8**%b to i8***
br label%aZ
aZ:
%a0=load atomic i32,i32*@sml_check_flag unordered,align 4
%a1=icmp eq i32%a0,0
br i1%a1,label%a3,label%a2
a2:
call void@sml_check(i32 inreg%a0)
br label%a3
a3:
%a4=load i8**,i8***%aY,align 8
%a5=load i8*,i8**%a4,align 8
%a6=bitcast i8*%a5 to i32*
%a7=load i32,i32*%a6,align 4
%a8=bitcast i8**%a4 to i8*
switch i32%a7,label%a9[
i32 1,label%b4
i32 0,label%br
]
a9:
store i8*null,i8**%d,align 8
call void@sml_matchcomp_bug()
%ba=load i8*,i8**@_SMLZ5Match,align 8
store i8*%ba,i8**%b,align 8
%bb=call i8*@sml_alloc(i32 inreg 20)#0
%bc=getelementptr inbounds i8,i8*%bb,i64 -4
%bd=bitcast i8*%bc to i32*
store i32 1342177296,i32*%bd,align 4
store i8*%bb,i8**%c,align 8
%be=load i8*,i8**%b,align 8
store i8*null,i8**%b,align 8
%bf=bitcast i8*%bb to i8**
store i8*%be,i8**%bf,align 8
%bg=getelementptr inbounds i8,i8*%bb,i64 8
%bh=bitcast i8*%bg to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%bh,align 8
%bi=getelementptr inbounds i8,i8*%bb,i64 16
%bj=bitcast i8*%bi to i32*
store i32 3,i32*%bj,align 4
%bk=call i8*@sml_alloc(i32 inreg 60)#0
%bl=getelementptr inbounds i8,i8*%bk,i64 -4
%bm=bitcast i8*%bl to i32*
store i32 1342177336,i32*%bm,align 4
%bn=getelementptr inbounds i8,i8*%bk,i64 56
%bo=bitcast i8*%bn to i32*
store i32 1,i32*%bo,align 4
%bp=load i8*,i8**%c,align 8
%bq=bitcast i8*%bk to i8**
store i8*%bp,i8**%bq,align 8
call void@sml_raise(i8*inreg%bk)#1
unreachable
br:
%bs=getelementptr inbounds i8,i8*%a5,i64 8
%bt=bitcast i8*%bs to i8**
%bu=load i8*,i8**%bt,align 8
store i8*%bu,i8**%c,align 8
%bv=bitcast i8*%bu to i8**
%bw=load i8*,i8**%bv,align 8
%bx=bitcast i8*%bw to i32*
%by=load i32,i32*%bx,align 4
switch i32%by,label%bz[
i32 1,label%bV
i32 0,label%bR
]
bz:
store i8*null,i8**%c,align 8
store i8*null,i8**%d,align 8
call void@sml_matchcomp_bug()
%bA=load i8*,i8**@_SMLZ5Match,align 8
store i8*%bA,i8**%b,align 8
%bB=call i8*@sml_alloc(i32 inreg 20)#0
%bC=getelementptr inbounds i8,i8*%bB,i64 -4
%bD=bitcast i8*%bC to i32*
store i32 1342177296,i32*%bD,align 4
store i8*%bB,i8**%c,align 8
%bE=load i8*,i8**%b,align 8
store i8*null,i8**%b,align 8
%bF=bitcast i8*%bB to i8**
store i8*%bE,i8**%bF,align 8
%bG=getelementptr inbounds i8,i8*%bB,i64 8
%bH=bitcast i8*%bG to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%bH,align 8
%bI=getelementptr inbounds i8,i8*%bB,i64 16
%bJ=bitcast i8*%bI to i32*
store i32 3,i32*%bJ,align 4
%bK=call i8*@sml_alloc(i32 inreg 60)#0
%bL=getelementptr inbounds i8,i8*%bK,i64 -4
%bM=bitcast i8*%bL to i32*
store i32 1342177336,i32*%bM,align 4
%bN=getelementptr inbounds i8,i8*%bK,i64 56
%bO=bitcast i8*%bN to i32*
store i32 1,i32*%bO,align 4
%bP=load i8*,i8**%c,align 8
%bQ=bitcast i8*%bK to i8**
store i8*%bP,i8**%bQ,align 8
call void@sml_raise(i8*inreg%bK)#1
unreachable
bR:
store i8*null,i8**%c,align 8
%bS=getelementptr inbounds i8,i8*%bw,i64 8
%bT=bitcast i8*%bS to i8**
%bU=load i8*,i8**%bT,align 8
store i8*null,i8**%b,align 8
call void@sml_write(i8*inreg%a8,i8**inreg%a4,i8*inreg%bw)#0
store i8*%bU,i8**%b,align 8
br label%aZ
bV:
%bW=getelementptr inbounds i8,i8*%bw,i64 8
%bX=bitcast i8*%bW to i8**
%bY=load i8*,i8**%bX,align 8
store i8*%bY,i8**%b,align 8
%bZ=call i8*@sml_alloc(i32 inreg 20)#0
%b0=getelementptr inbounds i8,i8*%bZ,i64 -4
%b1=bitcast i8*%b0 to i32*
store i32 1342177296,i32*%b1,align 4
%b2=load i8*,i8**%c,align 8
%b3=bitcast i8*%bZ to i8**
store i8*%b2,i8**%b3,align 8
br label%cd
b4:
%b5=getelementptr inbounds i8,i8*%a5,i64 8
%b6=bitcast i8*%b5 to i8**
%b7=load i8*,i8**%b6,align 8
store i8*%b7,i8**%c,align 8
%b8=call i8*@sml_alloc(i32 inreg 20)#0
%b9=getelementptr inbounds i8,i8*%b8,i64 -4
%ca=bitcast i8*%b9 to i32*
store i32 1342177296,i32*%ca,align 4
%cb=load i8*,i8**%b,align 8
%cc=bitcast i8*%b8 to i8**
store i8*%cb,i8**%cc,align 8
br label%cd
cd:
%ce=phi i8*[%bZ,%bV],[%b8,%b4]
%cf=phi i8**[%b,%bV],[%c,%b4]
%cg=phi i8*[%b2,%bV],[%cb,%b4]
%ch=load i8*,i8**%cf,align 8
%ci=getelementptr inbounds i8,i8*%ce,i64 8
%cj=bitcast i8*%ci to i8**
store i8*%ch,i8**%cj,align 8
%ck=getelementptr inbounds i8,i8*%ce,i64 16
%cl=bitcast i8*%ck to i32*
store i32 3,i32*%cl,align 4
%cm=load i8*,i8**%d,align 8
%cn=call i32@sml_obj_equal(i8*inreg%cm,i8*inreg%cg)#0
ret i32%cn
}
define fastcc i8*@_SMLFN9UnionFind4sameE(i32 inreg%a,i32 inreg%b)#3 gc"smlsharp"{
ret i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@e,i64 0,i32 2)to i8*)
}
define internal fastcc i32@_SMLLLN9UnionFind5equalE_63(i8*inreg%a)#3 gc"smlsharp"{
%b=bitcast i8*%a to i8**
%c=load i8*,i8**%b,align 8
%d=getelementptr inbounds i8,i8*%a,i64 8
%e=bitcast i8*%d to i8**
%f=load i8*,i8**%e,align 8
%g=tail call i32@sml_obj_equal(i8*inreg%c,i8*inreg%f)#0
ret i32%g
}
define fastcc i8*@_SMLFN9UnionFind5equalE(i32 inreg%a,i32 inreg%b)#3 gc"smlsharp"{
ret i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@g,i64 0,i32 2)to i8*)
}
define internal fastcc i32@_SMLLLN9UnionFind5unionE_71(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
T:
%c=alloca i8*,align 8
%d=alloca i8*,align 8
%e=alloca i8*,align 8
%f=alloca i8*,align 8
%g=alloca i8*,align 8
%h=alloca i8*,align 8
call void@llvm.gcroot(i8**%c,i8*null)#0
call void@llvm.gcroot(i8**%d,i8*null)#0
call void@llvm.gcroot(i8**%e,i8*null)#0
call void@llvm.gcroot(i8**%f,i8*null)#0
call void@llvm.gcroot(i8**%g,i8*null)#0
call void@llvm.gcroot(i8**%h,i8*null)#0
store i8*%a,i8**%g,align 8
%i=getelementptr inbounds i8,i8*%a,i64 12
%j=bitcast i8*%i to i32*
%k=load i32,i32*%j,align 4
%l=add i32%k,3
%m=sub i32 0,%k
%n=and i32%l,%m
%o=add i32%k,-1
%p=and i32%o,%m
%q=shl i32%k,1
%r=add i32%q,-1
%s=add i32%r,%p
%t=and i32%s,%m
%u=add i32%k,7
%v=add i32%u,%t
%w=and i32%v,-8
%x=lshr i32%t,3
%y=lshr i32%p,3
%z=sub nsw i32%x,%y
%A=getelementptr inbounds i8,i8*%a,i64 8
%B=bitcast i8*%A to i32*
%C=load i32,i32*%B,align 4
%D=shl i32%C,%z
%E=or i32%D,%C
%F=or i32%w,4
%G=add i32%u,%n
%H=and i32%G,-8
%I=lshr i32%n,3
%J=shl i32%C,%I
%K=or i32%H,4
%L=bitcast i8*%b to i8**
%M=load i8*,i8**%L,align 8
%N=getelementptr inbounds i8,i8*%b,i64 8
%O=bitcast i8*%N to i8**
%P=load i8*,i8**%O,align 8
store i8*%P,i8**%c,align 8
%Q=bitcast i8**%d to i8***
br label%R
R:
%S=phi i8*[%a1,%aY],[%M,%T]
%U=bitcast i8*%S to i8**
store i8*%S,i8**%d,align 8
%V=load atomic i32,i32*@sml_check_flag unordered,align 4
%W=icmp eq i32%V,0
br i1%W,label%aa,label%X
X:
call void@sml_check(i32 inreg%V)
%Y=load i8**,i8***%Q,align 8
%Z=bitcast i8**%Y to i8*
br label%aa
aa:
%ab=phi i8*[%Z,%X],[%S,%R]
%ac=phi i8**[%Y,%X],[%U,%R]
%ad=load i8*,i8**%ac,align 8
%ae=bitcast i8*%ad to i32*
%af=load i32,i32*%ae,align 4
switch i32%af,label%ag[
i32 1,label%bc
i32 0,label%ay
]
ag:
store i8*null,i8**%d,align 8
store i8*null,i8**%g,align 8
call void@sml_matchcomp_bug()
%ah=load i8*,i8**@_SMLZ5Match,align 8
store i8*%ah,i8**%c,align 8
%ai=call i8*@sml_alloc(i32 inreg 20)#0
%aj=getelementptr inbounds i8,i8*%ai,i64 -4
%ak=bitcast i8*%aj to i32*
store i32 1342177296,i32*%ak,align 4
store i8*%ai,i8**%d,align 8
%al=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%am=bitcast i8*%ai to i8**
store i8*%al,i8**%am,align 8
%an=getelementptr inbounds i8,i8*%ai,i64 8
%ao=bitcast i8*%an to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%ao,align 8
%ap=getelementptr inbounds i8,i8*%ai,i64 16
%aq=bitcast i8*%ap to i32*
store i32 3,i32*%aq,align 4
%ar=call i8*@sml_alloc(i32 inreg 60)#0
%as=getelementptr inbounds i8,i8*%ar,i64 -4
%at=bitcast i8*%as to i32*
store i32 1342177336,i32*%at,align 4
%au=getelementptr inbounds i8,i8*%ar,i64 56
%av=bitcast i8*%au to i32*
store i32 1,i32*%av,align 4
%aw=load i8*,i8**%d,align 8
%ax=bitcast i8*%ar to i8**
store i8*%aw,i8**%ax,align 8
call void@sml_raise(i8*inreg%ar)#1
unreachable
ay:
%az=getelementptr inbounds i8,i8*%ad,i64 8
%aA=bitcast i8*%az to i8**
%aB=load i8*,i8**%aA,align 8
store i8*%aB,i8**%e,align 8
%aC=bitcast i8*%aB to i8**
%aD=load i8*,i8**%aC,align 8
%aE=bitcast i8*%aD to i32*
%aF=load i32,i32*%aE,align 4
switch i32%aF,label%aG[
i32 1,label%a3
i32 0,label%aY
]
aG:
store i8*null,i8**%d,align 8
store i8*null,i8**%e,align 8
store i8*null,i8**%g,align 8
call void@sml_matchcomp_bug()
%aH=load i8*,i8**@_SMLZ5Match,align 8
store i8*%aH,i8**%c,align 8
%aI=call i8*@sml_alloc(i32 inreg 20)#0
%aJ=getelementptr inbounds i8,i8*%aI,i64 -4
%aK=bitcast i8*%aJ to i32*
store i32 1342177296,i32*%aK,align 4
store i8*%aI,i8**%d,align 8
%aL=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%aM=bitcast i8*%aI to i8**
store i8*%aL,i8**%aM,align 8
%aN=getelementptr inbounds i8,i8*%aI,i64 8
%aO=bitcast i8*%aN to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%aO,align 8
%aP=getelementptr inbounds i8,i8*%aI,i64 16
%aQ=bitcast i8*%aP to i32*
store i32 3,i32*%aQ,align 4
%aR=call i8*@sml_alloc(i32 inreg 60)#0
%aS=getelementptr inbounds i8,i8*%aR,i64 -4
%aT=bitcast i8*%aS to i32*
store i32 1342177336,i32*%aT,align 4
%aU=getelementptr inbounds i8,i8*%aR,i64 56
%aV=bitcast i8*%aU to i32*
store i32 1,i32*%aV,align 4
%aW=load i8*,i8**%d,align 8
%aX=bitcast i8*%aR to i8**
store i8*%aW,i8**%aX,align 8
call void@sml_raise(i8*inreg%aR)#1
unreachable
aY:
store i8*null,i8**%e,align 8
%aZ=getelementptr inbounds i8,i8*%aD,i64 8
%a0=bitcast i8*%aZ to i8**
%a1=load i8*,i8**%a0,align 8
store i8*null,i8**%d,align 8
%a2=bitcast i8*%ab to i8**
call void@sml_write(i8*inreg%ab,i8**inreg%a2,i8*inreg%aD)#0
br label%R
a3:
%a4=getelementptr inbounds i8,i8*%aD,i64 8
%a5=bitcast i8*%a4 to i8**
%a6=load i8*,i8**%a5,align 8
store i8*%a6,i8**%d,align 8
%a7=call i8*@sml_alloc(i32 inreg 20)#0
%a8=getelementptr inbounds i8,i8*%a7,i64 -4
%a9=bitcast i8*%a8 to i32*
store i32 1342177296,i32*%a9,align 4
%ba=load i8*,i8**%e,align 8
%bb=bitcast i8*%a7 to i8**
store i8*%ba,i8**%bb,align 8
br label%bl
bc:
%bd=getelementptr inbounds i8,i8*%ad,i64 8
%be=bitcast i8*%bd to i8**
%bf=load i8*,i8**%be,align 8
store i8*%bf,i8**%e,align 8
%bg=call i8*@sml_alloc(i32 inreg 20)#0
%bh=getelementptr inbounds i8,i8*%bg,i64 -4
%bi=bitcast i8*%bh to i32*
store i32 1342177296,i32*%bi,align 4
%bj=load i8*,i8**%d,align 8
%bk=bitcast i8*%bg to i8**
store i8*%bj,i8**%bk,align 8
br label%bl
bl:
%bm=phi i8*[%a7,%a3],[%bg,%bc]
%bn=phi i8**[%d,%a3],[%e,%bc]
%bo=phi i8*[%ba,%a3],[%bj,%bc]
%bp=load i8*,i8**%bn,align 8
%bq=getelementptr inbounds i8,i8*%bm,i64 8
%br=bitcast i8*%bq to i8**
store i8*%bp,i8**%br,align 8
%bs=getelementptr inbounds i8,i8*%bm,i64 16
%bt=bitcast i8*%bs to i32*
store i32 3,i32*%bt,align 4
store i8*%bp,i8**%d,align 8
store i8*%bo,i8**%e,align 8
%bu=bitcast i8*%bp to i32*
%bv=load i32,i32*%bu,align 4
%bw=load i8*,i8**%g,align 8
%bx=getelementptr inbounds i8,i8*%bw,i64 8
%by=bitcast i8*%bx to i32*
%bz=load i32,i32*%by,align 4
%bA=icmp eq i32%bz,0
br i1%bA,label%bG,label%bB
bB:
store i8*null,i8**%d,align 8
%bC=sext i32%n to i64
%bD=getelementptr inbounds i8,i8*%bp,i64%bC
%bE=bitcast i8*%bD to i8**
%bF=load i8*,i8**%bE,align 8
br label%bQ
bG:
%bH=getelementptr inbounds i8,i8*%bw,i64 12
%bI=bitcast i8*%bH to i32*
%bJ=load i32,i32*%bI,align 4
%bK=call i8*@sml_alloc(i32 inreg%bJ)#0
%bL=getelementptr inbounds i8,i8*%bK,i64 -4
%bM=bitcast i8*%bL to i32*
store i32%bJ,i32*%bM,align 4
%bN=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%bO=sext i32%n to i64
%bP=getelementptr inbounds i8,i8*%bN,i64%bO
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bK,i8*%bP,i32%bJ,i1 false)
br label%bQ
bQ:
%bR=phi i8*[%bK,%bG],[%bF,%bB]
store i8*%bR,i8**%d,align 8
%bS=bitcast i8**%c to i8***
br label%bT
bT:
%bU=load atomic i32,i32*@sml_check_flag unordered,align 4
%bV=icmp eq i32%bU,0
br i1%bV,label%bX,label%bW
bW:
call void@sml_check(i32 inreg%bU)
br label%bX
bX:
%bY=load i8**,i8***%bS,align 8
%bZ=load i8*,i8**%bY,align 8
%b0=bitcast i8*%bZ to i32*
%b1=load i32,i32*%b0,align 4
%b2=bitcast i8**%bY to i8*
switch i32%b1,label%b3[
i32 1,label%cY
i32 0,label%cl
]
b3:
store i8*null,i8**%e,align 8
store i8*null,i8**%d,align 8
store i8*null,i8**%g,align 8
call void@sml_matchcomp_bug()
%b4=load i8*,i8**@_SMLZ5Match,align 8
store i8*%b4,i8**%c,align 8
%b5=call i8*@sml_alloc(i32 inreg 20)#0
%b6=getelementptr inbounds i8,i8*%b5,i64 -4
%b7=bitcast i8*%b6 to i32*
store i32 1342177296,i32*%b7,align 4
store i8*%b5,i8**%d,align 8
%b8=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%b9=bitcast i8*%b5 to i8**
store i8*%b8,i8**%b9,align 8
%ca=getelementptr inbounds i8,i8*%b5,i64 8
%cb=bitcast i8*%ca to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%cb,align 8
%cc=getelementptr inbounds i8,i8*%b5,i64 16
%cd=bitcast i8*%cc to i32*
store i32 3,i32*%cd,align 4
%ce=call i8*@sml_alloc(i32 inreg 60)#0
%cf=getelementptr inbounds i8,i8*%ce,i64 -4
%cg=bitcast i8*%cf to i32*
store i32 1342177336,i32*%cg,align 4
%ch=getelementptr inbounds i8,i8*%ce,i64 56
%ci=bitcast i8*%ch to i32*
store i32 1,i32*%ci,align 4
%cj=load i8*,i8**%d,align 8
%ck=bitcast i8*%ce to i8**
store i8*%cj,i8**%ck,align 8
call void@sml_raise(i8*inreg%ce)#1
unreachable
cl:
%cm=getelementptr inbounds i8,i8*%bZ,i64 8
%cn=bitcast i8*%cm to i8**
%co=load i8*,i8**%cn,align 8
store i8*%co,i8**%f,align 8
%cp=bitcast i8*%co to i8**
%cq=load i8*,i8**%cp,align 8
%cr=bitcast i8*%cq to i32*
%cs=load i32,i32*%cr,align 4
switch i32%cs,label%ct[
i32 1,label%cP
i32 0,label%cL
]
ct:
store i8*null,i8**%e,align 8
store i8*null,i8**%d,align 8
store i8*null,i8**%f,align 8
store i8*null,i8**%g,align 8
call void@sml_matchcomp_bug()
%cu=load i8*,i8**@_SMLZ5Match,align 8
store i8*%cu,i8**%c,align 8
%cv=call i8*@sml_alloc(i32 inreg 20)#0
%cw=getelementptr inbounds i8,i8*%cv,i64 -4
%cx=bitcast i8*%cw to i32*
store i32 1342177296,i32*%cx,align 4
store i8*%cv,i8**%d,align 8
%cy=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%cz=bitcast i8*%cv to i8**
store i8*%cy,i8**%cz,align 8
%cA=getelementptr inbounds i8,i8*%cv,i64 8
%cB=bitcast i8*%cA to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%cB,align 8
%cC=getelementptr inbounds i8,i8*%cv,i64 16
%cD=bitcast i8*%cC to i32*
store i32 3,i32*%cD,align 4
%cE=call i8*@sml_alloc(i32 inreg 60)#0
%cF=getelementptr inbounds i8,i8*%cE,i64 -4
%cG=bitcast i8*%cF to i32*
store i32 1342177336,i32*%cG,align 4
%cH=getelementptr inbounds i8,i8*%cE,i64 56
%cI=bitcast i8*%cH to i32*
store i32 1,i32*%cI,align 4
%cJ=load i8*,i8**%d,align 8
%cK=bitcast i8*%cE to i8**
store i8*%cJ,i8**%cK,align 8
call void@sml_raise(i8*inreg%cE)#1
unreachable
cL:
store i8*null,i8**%f,align 8
%cM=getelementptr inbounds i8,i8*%cq,i64 8
%cN=bitcast i8*%cM to i8**
%cO=load i8*,i8**%cN,align 8
store i8*null,i8**%c,align 8
call void@sml_write(i8*inreg%b2,i8**inreg%bY,i8*inreg%cq)#0
store i8*%cO,i8**%c,align 8
br label%bT
cP:
%cQ=getelementptr inbounds i8,i8*%cq,i64 8
%cR=bitcast i8*%cQ to i8**
%cS=load i8*,i8**%cR,align 8
store i8*%cS,i8**%c,align 8
%cT=call i8*@sml_alloc(i32 inreg 20)#0
%cU=getelementptr inbounds i8,i8*%cT,i64 -4
%cV=bitcast i8*%cU to i32*
store i32 1342177296,i32*%cV,align 4
%cW=load i8*,i8**%f,align 8
%cX=bitcast i8*%cT to i8**
store i8*%cW,i8**%cX,align 8
br label%c7
cY:
%cZ=getelementptr inbounds i8,i8*%bZ,i64 8
%c0=bitcast i8*%cZ to i8**
%c1=load i8*,i8**%c0,align 8
store i8*%c1,i8**%f,align 8
%c2=call i8*@sml_alloc(i32 inreg 20)#0
%c3=getelementptr inbounds i8,i8*%c2,i64 -4
%c4=bitcast i8*%c3 to i32*
store i32 1342177296,i32*%c4,align 4
%c5=load i8*,i8**%c,align 8
%c6=bitcast i8*%c2 to i8**
store i8*%c5,i8**%c6,align 8
br label%c7
c7:
%c8=phi i8*[%cT,%cP],[%c2,%cY]
%c9=phi i8**[%c,%cP],[%f,%cY]
%da=phi i8*[%cW,%cP],[%c5,%cY]
%db=load i8*,i8**%c9,align 8
%dc=getelementptr inbounds i8,i8*%c8,i64 8
%dd=bitcast i8*%dc to i8**
store i8*%db,i8**%dd,align 8
%de=getelementptr inbounds i8,i8*%c8,i64 16
%df=bitcast i8*%de to i32*
store i32 3,i32*%df,align 4
store i8*%db,i8**%c,align 8
store i8*%da,i8**%f,align 8
%dg=bitcast i8*%db to i32*
%dh=load i32,i32*%dg,align 4
%di=load i8*,i8**%g,align 8
%dj=getelementptr inbounds i8,i8*%di,i64 8
%dk=bitcast i8*%dj to i32*
%dl=load i32,i32*%dk,align 4
%dm=icmp eq i32%dl,0
br i1%dm,label%ds,label%dn
dn:
store i8*null,i8**%c,align 8
%do=sext i32%n to i64
%dp=getelementptr inbounds i8,i8*%db,i64%do
%dq=bitcast i8*%dp to i8**
%dr=load i8*,i8**%dq,align 8
br label%dD
ds:
%dt=getelementptr inbounds i8,i8*%di,i64 12
%du=bitcast i8*%dt to i32*
%dv=load i32,i32*%du,align 4
%dw=call i8*@sml_alloc(i32 inreg%dv)#0
%dx=getelementptr inbounds i8,i8*%dw,i64 -4
%dy=bitcast i8*%dx to i32*
store i32%dv,i32*%dy,align 4
%dz=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%dA=sext i32%n to i64
%dB=getelementptr inbounds i8,i8*%dz,i64%dA
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%dw,i8*%dB,i32%dv,i1 false)
%dC=load i8*,i8**%f,align 8
br label%dD
dD:
%dE=phi i8*[%dC,%ds],[%da,%dn]
%dF=phi i8*[%dw,%ds],[%dr,%dn]
store i8*%dF,i8**%c,align 8
%dG=load i8*,i8**%e,align 8
%dH=call i32@sml_obj_equal(i8*inreg%dG,i8*inreg%dE)#0
%dI=icmp eq i32%dH,0
br i1%dI,label%dK,label%dJ
dJ:
ret i32 1
dK:
%dL=icmp ugt i32%bv,%dh
%dM=add i32%dh,%bv
%dN=bitcast i8**%g to i8***
%dO=load i8**,i8***%dN,align 8
%dP=load i8*,i8**%dO,align 8
%dQ=getelementptr inbounds i8,i8*%dP,i64 16
%dR=bitcast i8*%dQ to void(...)**
%dS=load void(...)*,void(...)**%dR,align 8
%dT=bitcast i8*%dP to i8**
%dU=load i8*,i8**%dT,align 8
store i8*%dU,i8**%h,align 8
%dV=bitcast i8**%dO to i8*
%dW=getelementptr inbounds i8,i8*%dV,i64 12
%dX=bitcast i8*%dW to i32*
%dY=load i32,i32*%dX,align 4
%dZ=getelementptr inbounds i8*,i8**%dO,i64 1
%d0=bitcast i8**%dZ to i32*
%d1=load i32,i32*%d0,align 4
%d2=call i8*@sml_alloc(i32 inreg%F)#0
%d3=or i32%w,1342177280
%d4=getelementptr inbounds i8,i8*%d2,i64 -4
%d5=bitcast i8*%d4 to i32*
store i32%d3,i32*%d5,align 4
call void@llvm.memset.p0i8.i32(i8*%d2,i8 0,i32%F,i1 false)
%d6=icmp eq i32%d1,0
br i1%dL,label%fd,label%d7
d7:
%d8=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%d9=sext i32%p to i64
%ea=getelementptr inbounds i8,i8*%d2,i64%d9
br i1%d6,label%eb,label%ef
eb:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%ea,i8*%d8,i32%dY,i1 false)
%ec=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%ed=sext i32%t to i64
%ee=getelementptr inbounds i8,i8*%d2,i64%ed
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%ee,i8*%ec,i32%dY,i1 false)
br label%el
ef:
%eg=bitcast i8*%ea to i8**
store i8*%d8,i8**%eg,align 8
%eh=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%ei=sext i32%t to i64
%ej=getelementptr inbounds i8,i8*%d2,i64%ei
%ek=bitcast i8*%ej to i8**
store i8*%eh,i8**%ek,align 8
br label%el
el:
%em=sext i32%w to i64
%en=getelementptr inbounds i8,i8*%d2,i64%em
%eo=bitcast i8*%en to i32*
store i32%E,i32*%eo,align 4
%ep=bitcast void(...)*%dS to i8*(i8*,i8*)*
%eq=load i8*,i8**%h,align 8
store i8*null,i8**%h,align 8
%er=call fastcc i8*%ep(i8*inreg%eq,i8*inreg%d2)
store i8*%er,i8**%c,align 8
%es=load i8*,i8**%g,align 8
%et=getelementptr inbounds i8,i8*%es,i64 12
%eu=bitcast i8*%et to i32*
%ev=load i32,i32*%eu,align 4
store i8*null,i8**%g,align 8
%ew=getelementptr inbounds i8,i8*%es,i64 8
%ex=bitcast i8*%ew to i32*
%ey=load i32,i32*%ex,align 4
%ez=call i8*@sml_alloc(i32 inreg%K)#0
%eA=or i32%H,1342177280
%eB=getelementptr inbounds i8,i8*%ez,i64 -4
%eC=bitcast i8*%eB to i32*
store i32%eA,i32*%eC,align 4
store i8*%ez,i8**%d,align 8
call void@llvm.memset.p0i8.i32(i8*%ez,i8 0,i32%K,i1 false)
%eD=bitcast i8*%ez to i32*
store i32%dM,i32*%eD,align 4
%eE=icmp eq i32%ey,0
%eF=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%eG=sext i32%n to i64
%eH=getelementptr inbounds i8,i8*%ez,i64%eG
br i1%eE,label%eI,label%eJ
eI:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%eH,i8*%eF,i32%ev,i1 false)
br label%eL
eJ:
%eK=bitcast i8*%eH to i8**
store i8*%eF,i8**%eK,align 8
br label%eL
eL:
%eM=sext i32%H to i64
%eN=getelementptr inbounds i8,i8*%ez,i64%eM
%eO=bitcast i8*%eN to i32*
store i32%J,i32*%eO,align 4
%eP=call i8*@sml_alloc(i32 inreg 20)#0
%eQ=bitcast i8*%eP to i32*
%eR=getelementptr inbounds i8,i8*%eP,i64 -4
%eS=bitcast i8*%eR to i32*
store i32 1342177296,i32*%eS,align 4
%eT=getelementptr inbounds i8,i8*%eP,i64 4
%eU=bitcast i8*%eT to i32*
store i32 0,i32*%eU,align 1
store i32 1,i32*%eQ,align 4
%eV=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%eW=getelementptr inbounds i8,i8*%eP,i64 8
%eX=bitcast i8*%eW to i8**
store i8*%eV,i8**%eX,align 8
%eY=getelementptr inbounds i8,i8*%eP,i64 16
%eZ=bitcast i8*%eY to i32*
store i32 2,i32*%eZ,align 4
%e0=load i8*,i8**%e,align 8
%e1=bitcast i8*%e0 to i8**
call void@sml_write(i8*inreg%e0,i8**inreg%e1,i8*inreg%eP)#0
%e2=call i8*@sml_alloc(i32 inreg 20)#0
%e3=getelementptr inbounds i8,i8*%e2,i64 -4
%e4=bitcast i8*%e3 to i32*
store i32 1342177296,i32*%e4,align 4
%e5=bitcast i8*%e2 to i64*
store i64 0,i64*%e5,align 4
%e6=load i8*,i8**%e,align 8
%e7=getelementptr inbounds i8,i8*%e2,i64 8
%e8=bitcast i8*%e7 to i8**
store i8*%e6,i8**%e8,align 8
%e9=getelementptr inbounds i8,i8*%e2,i64 16
%fa=bitcast i8*%e9 to i32*
store i32 2,i32*%fa,align 4
%fb=load i8*,i8**%f,align 8
%fc=bitcast i8*%fb to i8**
call void@sml_write(i8*inreg%fb,i8**inreg%fc,i8*inreg%e2)#0
ret i32 0
fd:
%fe=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%ff=sext i32%p to i64
%fg=getelementptr inbounds i8,i8*%d2,i64%ff
br i1%d6,label%fh,label%fl
fh:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%fg,i8*%fe,i32%dY,i1 false)
%fi=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%fj=sext i32%t to i64
%fk=getelementptr inbounds i8,i8*%d2,i64%fj
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%fk,i8*%fi,i32%dY,i1 false)
br label%fr
fl:
%fm=bitcast i8*%fg to i8**
store i8*%fe,i8**%fm,align 8
%fn=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%fo=sext i32%t to i64
%fp=getelementptr inbounds i8,i8*%d2,i64%fo
%fq=bitcast i8*%fp to i8**
store i8*%fn,i8**%fq,align 8
br label%fr
fr:
%fs=sext i32%w to i64
%ft=getelementptr inbounds i8,i8*%d2,i64%fs
%fu=bitcast i8*%ft to i32*
store i32%E,i32*%fu,align 4
%fv=bitcast void(...)*%dS to i8*(i8*,i8*)*
%fw=load i8*,i8**%h,align 8
store i8*null,i8**%h,align 8
%fx=call fastcc i8*%fv(i8*inreg%fw,i8*inreg%d2)
store i8*%fx,i8**%c,align 8
%fy=load i8*,i8**%g,align 8
%fz=getelementptr inbounds i8,i8*%fy,i64 12
%fA=bitcast i8*%fz to i32*
%fB=load i32,i32*%fA,align 4
store i8*null,i8**%g,align 8
%fC=getelementptr inbounds i8,i8*%fy,i64 8
%fD=bitcast i8*%fC to i32*
%fE=load i32,i32*%fD,align 4
%fF=call i8*@sml_alloc(i32 inreg%K)#0
%fG=or i32%H,1342177280
%fH=getelementptr inbounds i8,i8*%fF,i64 -4
%fI=bitcast i8*%fH to i32*
store i32%fG,i32*%fI,align 4
store i8*%fF,i8**%d,align 8
call void@llvm.memset.p0i8.i32(i8*%fF,i8 0,i32%K,i1 false)
%fJ=bitcast i8*%fF to i32*
store i32%dM,i32*%fJ,align 4
%fK=icmp eq i32%fE,0
%fL=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%fM=sext i32%n to i64
%fN=getelementptr inbounds i8,i8*%fF,i64%fM
br i1%fK,label%fO,label%fP
fO:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%fN,i8*%fL,i32%fB,i1 false)
br label%fR
fP:
%fQ=bitcast i8*%fN to i8**
store i8*%fL,i8**%fQ,align 8
br label%fR
fR:
%fS=sext i32%H to i64
%fT=getelementptr inbounds i8,i8*%fF,i64%fS
%fU=bitcast i8*%fT to i32*
store i32%J,i32*%fU,align 4
%fV=call i8*@sml_alloc(i32 inreg 20)#0
%fW=bitcast i8*%fV to i32*
%fX=getelementptr inbounds i8,i8*%fV,i64 -4
%fY=bitcast i8*%fX to i32*
store i32 1342177296,i32*%fY,align 4
%fZ=getelementptr inbounds i8,i8*%fV,i64 4
%f0=bitcast i8*%fZ to i32*
store i32 0,i32*%f0,align 1
store i32 1,i32*%fW,align 4
%f1=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%f2=getelementptr inbounds i8,i8*%fV,i64 8
%f3=bitcast i8*%f2 to i8**
store i8*%f1,i8**%f3,align 8
%f4=getelementptr inbounds i8,i8*%fV,i64 16
%f5=bitcast i8*%f4 to i32*
store i32 2,i32*%f5,align 4
%f6=load i8*,i8**%f,align 8
%f7=bitcast i8*%f6 to i8**
call void@sml_write(i8*inreg%f6,i8**inreg%f7,i8*inreg%fV)#0
%f8=call i8*@sml_alloc(i32 inreg 20)#0
%f9=getelementptr inbounds i8,i8*%f8,i64 -4
%ga=bitcast i8*%f9 to i32*
store i32 1342177296,i32*%ga,align 4
%gb=bitcast i8*%f8 to i64*
store i64 0,i64*%gb,align 4
%gc=load i8*,i8**%f,align 8
%gd=getelementptr inbounds i8,i8*%f8,i64 8
%ge=bitcast i8*%gd to i8**
store i8*%gc,i8**%ge,align 8
%gf=getelementptr inbounds i8,i8*%f8,i64 16
%gg=bitcast i8*%gf to i32*
store i32 2,i32*%gg,align 4
%gh=load i8*,i8**%e,align 8
%gi=bitcast i8*%gh to i8**
call void@sml_write(i8*inreg%gh,i8**inreg%gi,i8*inreg%f8)#0
ret i32 0
}
define internal fastcc i8*@_SMLLLN9UnionFind5unionE_72(i8*inreg%a,i8*inreg%b)#3 gc"smlsharp"{
%c=alloca i8*,align 8
%d=alloca i8*,align 8
call void@llvm.gcroot(i8**%c,i8*null)#0
call void@llvm.gcroot(i8**%d,i8*null)#0
store i8*%b,i8**%c,align 8
%e=bitcast i8*%a to i32*
%f=load i32,i32*%e,align 4
%g=getelementptr inbounds i8,i8*%a,i64 4
%h=bitcast i8*%g to i32*
%i=load i32,i32*%h,align 4
%j=call i8*@sml_alloc(i32 inreg 20)#0
%k=getelementptr inbounds i8,i8*%j,i64 -4
%l=bitcast i8*%k to i32*
store i32 1342177296,i32*%l,align 4
store i8*%j,i8**%d,align 8
%m=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%n=bitcast i8*%j to i8**
store i8*%m,i8**%n,align 8
%o=getelementptr inbounds i8,i8*%j,i64 8
%p=bitcast i8*%o to i32*
store i32%f,i32*%p,align 4
%q=getelementptr inbounds i8,i8*%j,i64 12
%r=bitcast i8*%q to i32*
store i32%i,i32*%r,align 4
%s=getelementptr inbounds i8,i8*%j,i64 16
%t=bitcast i8*%s to i32*
store i32 1,i32*%t,align 4
%u=call i8*@sml_alloc(i32 inreg 28)#0
%v=getelementptr inbounds i8,i8*%u,i64 -4
%w=bitcast i8*%v to i32*
store i32 1342177304,i32*%w,align 4
%x=load i8*,i8**%d,align 8
%y=bitcast i8*%u to i8**
store i8*%x,i8**%y,align 8
%z=getelementptr inbounds i8,i8*%u,i64 8
%A=bitcast i8*%z to void(...)**
store void(...)*bitcast(i32(i8*,i8*)*@_SMLLLN9UnionFind5unionE_71 to void(...)*),void(...)**%A,align 8
%B=getelementptr inbounds i8,i8*%u,i64 16
%C=bitcast i8*%B to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind5unionE_89 to void(...)*),void(...)**%C,align 8
%D=getelementptr inbounds i8,i8*%u,i64 24
%E=bitcast i8*%D to i32*
store i32 -2147483647,i32*%E,align 4
ret i8*%u
}
define fastcc i8*@_SMLFN9UnionFind5unionE(i32 inreg%a,i32 inreg%b)#3 gc"smlsharp"{
%c=alloca i8*,align 8
call void@llvm.gcroot(i8**%c,i8*null)#0
%d=call i8*@sml_alloc(i32 inreg 12)#0
%e=bitcast i8*%d to i32*
%f=getelementptr inbounds i8,i8*%d,i64 -4
%g=bitcast i8*%f to i32*
store i32 1342177288,i32*%g,align 4
store i8*%d,i8**%c,align 8
store i32%a,i32*%e,align 4
%h=getelementptr inbounds i8,i8*%d,i64 4
%i=bitcast i8*%h to i32*
store i32%b,i32*%i,align 4
%j=getelementptr inbounds i8,i8*%d,i64 8
%k=bitcast i8*%j to i32*
store i32 0,i32*%k,align 4
%l=call i8*@sml_alloc(i32 inreg 28)#0
%m=getelementptr inbounds i8,i8*%l,i64 -4
%n=bitcast i8*%m to i32*
store i32 1342177304,i32*%n,align 4
%o=load i8*,i8**%c,align 8
%p=bitcast i8*%l to i8**
store i8*%o,i8**%p,align 8
%q=getelementptr inbounds i8,i8*%l,i64 8
%r=bitcast i8*%q to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind5unionE_72 to void(...)*),void(...)**%r,align 8
%s=getelementptr inbounds i8,i8*%l,i64 16
%t=bitcast i8*%s to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind5unionE_72 to void(...)*),void(...)**%t,align 8
%u=getelementptr inbounds i8,i8*%l,i64 24
%v=bitcast i8*%u to i32*
store i32 -2147483647,i32*%v,align 4
ret i8*%l
}
define internal fastcc void@_SMLLLN9UnionFind6updateE_77(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
%c=alloca i8*,align 8
%d=alloca i8*,align 8
%e=alloca i8*,align 8
%f=alloca i8*,align 8
%g=alloca i8*,align 8
call void@llvm.gcroot(i8**%c,i8*null)#0
call void@llvm.gcroot(i8**%d,i8*null)#0
call void@llvm.gcroot(i8**%e,i8*null)#0
call void@llvm.gcroot(i8**%f,i8*null)#0
call void@llvm.gcroot(i8**%g,i8*null)#0
store i8*%a,i8**%f,align 8
store i8*%b,i8**%c,align 8
%h=load atomic i32,i32*@sml_check_flag unordered,align 4
%i=icmp eq i32%h,0
br i1%i,label%j,label%l
j:
%k=bitcast i8*%b to i8**
br label%q
l:
call void@sml_check(i32 inreg%h)
%m=bitcast i8**%c to i8***
%n=load i8**,i8***%m,align 8
%o=load i8*,i8**%f,align 8
%p=bitcast i8**%n to i8*
br label%q
q:
%r=phi i8*[%p,%l],[%b,%j]
%s=phi i8*[%o,%l],[%a,%j]
%t=phi i8**[%n,%l],[%k,%j]
%u=getelementptr inbounds i8,i8*%s,i64 12
%v=bitcast i8*%u to i32*
%w=load i32,i32*%v,align 4
%x=add i32%w,7
%y=sub i32 0,%w
%z=and i32%x,%y
%A=add i32%w,3
%B=and i32%A,%y
%C=add i32%w,-1
%D=and i32%C,%y
%E=shl i32%w,1
%F=add i32%E,-1
%G=add i32%F,%D
%H=and i32%G,%y
%I=add i32%x,%H
%J=and i32%I,-8
%K=lshr i32%H,3
%L=lshr i32%D,3
%M=sub nsw i32%K,%L
%N=getelementptr inbounds i8,i8*%s,i64 8
%O=bitcast i8*%N to i32*
%P=load i32,i32*%O,align 4
%Q=shl i32%P,%M
%R=or i32%Q,%P
%S=or i32%J,4
%T=add i32%x,%B
%U=and i32%T,-8
%V=lshr i32%B,3
%W=shl i32%P,%V
%X=or i32%U,4
%Y=load i8*,i8**%t,align 8
store i8*%Y,i8**%d,align 8
%Z=icmp eq i32%P,0
br i1%Z,label%ag,label%aa
aa:
%ab=bitcast i8*%Y to i8**
store i8*null,i8**%c,align 8
%ac=sext i32%z to i64
%ad=getelementptr inbounds i8,i8*%r,i64%ac
%ae=bitcast i8*%ad to i8**
%af=load i8*,i8**%ae,align 8
br label%aq
ag:
%ah=call i8*@sml_alloc(i32 inreg%w)#0
%ai=getelementptr inbounds i8,i8*%ah,i64 -4
%aj=bitcast i8*%ai to i32*
store i32%w,i32*%aj,align 4
%ak=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%al=sext i32%z to i64
%am=getelementptr inbounds i8,i8*%ak,i64%al
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%ah,i8*%am,i32%w,i1 false)
%an=bitcast i8**%d to i8***
%ao=load i8**,i8***%an,align 8
%ap=bitcast i8**%ao to i8*
br label%aq
aq:
%ar=phi i8*[%ap,%ag],[%Y,%aa]
%as=phi i8**[%ao,%ag],[%ab,%aa]
%at=phi i8*[%ah,%ag],[%af,%aa]
store i8*%at,i8**%c,align 8
br label%au
au:
%av=phi i8*[%bl,%bi],[%ar,%aq]
%aw=phi i8**[%bn,%bi],[%as,%aq]
%ax=load i8*,i8**%aw,align 8
%ay=bitcast i8*%ax to i32*
%az=load i32,i32*%ay,align 4
switch i32%az,label%aA[
i32 1,label%bx
i32 0,label%aS
]
aA:
store i8*null,i8**%d,align 8
store i8*null,i8**%f,align 8
call void@sml_matchcomp_bug()
%aB=load i8*,i8**@_SMLZ5Match,align 8
store i8*%aB,i8**%c,align 8
%aC=call i8*@sml_alloc(i32 inreg 20)#0
%aD=getelementptr inbounds i8,i8*%aC,i64 -4
%aE=bitcast i8*%aD to i32*
store i32 1342177296,i32*%aE,align 4
store i8*%aC,i8**%d,align 8
%aF=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%aG=bitcast i8*%aC to i8**
store i8*%aF,i8**%aG,align 8
%aH=getelementptr inbounds i8,i8*%aC,i64 8
%aI=bitcast i8*%aH to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%aI,align 8
%aJ=getelementptr inbounds i8,i8*%aC,i64 16
%aK=bitcast i8*%aJ to i32*
store i32 3,i32*%aK,align 4
%aL=call i8*@sml_alloc(i32 inreg 60)#0
%aM=getelementptr inbounds i8,i8*%aL,i64 -4
%aN=bitcast i8*%aM to i32*
store i32 1342177336,i32*%aN,align 4
%aO=getelementptr inbounds i8,i8*%aL,i64 56
%aP=bitcast i8*%aO to i32*
store i32 1,i32*%aP,align 4
%aQ=load i8*,i8**%d,align 8
%aR=bitcast i8*%aL to i8**
store i8*%aQ,i8**%aR,align 8
call void@sml_raise(i8*inreg%aL)#1
unreachable
aS:
%aT=getelementptr inbounds i8,i8*%ax,i64 8
%aU=bitcast i8*%aT to i8**
%aV=load i8*,i8**%aU,align 8
store i8*%aV,i8**%e,align 8
%aW=bitcast i8*%aV to i8**
%aX=load i8*,i8**%aW,align 8
%aY=bitcast i8*%aX to i32*
%aZ=load i32,i32*%aY,align 4
switch i32%aZ,label%a0[
i32 1,label%bo
i32 0,label%bi
]
a0:
store i8*null,i8**%d,align 8
store i8*null,i8**%e,align 8
store i8*null,i8**%f,align 8
call void@sml_matchcomp_bug()
%a1=load i8*,i8**@_SMLZ5Match,align 8
store i8*%a1,i8**%c,align 8
%a2=call i8*@sml_alloc(i32 inreg 20)#0
%a3=getelementptr inbounds i8,i8*%a2,i64 -4
%a4=bitcast i8*%a3 to i32*
store i32 1342177296,i32*%a4,align 4
store i8*%a2,i8**%d,align 8
%a5=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%a6=bitcast i8*%a2 to i8**
store i8*%a5,i8**%a6,align 8
%a7=getelementptr inbounds i8,i8*%a2,i64 8
%a8=bitcast i8*%a7 to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[52x i8]}>,<{[4x i8],i32,[52x i8]}>*@j,i64 0,i32 2,i64 0),i8**%a8,align 8
%a9=getelementptr inbounds i8,i8*%a2,i64 16
%ba=bitcast i8*%a9 to i32*
store i32 3,i32*%ba,align 4
%bb=call i8*@sml_alloc(i32 inreg 60)#0
%bc=getelementptr inbounds i8,i8*%bb,i64 -4
%bd=bitcast i8*%bc to i32*
store i32 1342177336,i32*%bd,align 4
%be=getelementptr inbounds i8,i8*%bb,i64 56
%bf=bitcast i8*%be to i32*
store i32 1,i32*%bf,align 4
%bg=load i8*,i8**%d,align 8
%bh=bitcast i8*%bb to i8**
store i8*%bg,i8**%bh,align 8
call void@sml_raise(i8*inreg%bb)#1
unreachable
bi:
store i8*null,i8**%e,align 8
%bj=getelementptr inbounds i8,i8*%aX,i64 8
%bk=bitcast i8*%bj to i8**
%bl=load i8*,i8**%bk,align 8
store i8*null,i8**%d,align 8
%bm=bitcast i8*%av to i8**
call void@sml_write(i8*inreg%av,i8**inreg%bm,i8*inreg%aX)#0
store i8*%bl,i8**%d,align 8
%bn=bitcast i8*%bl to i8**
br label%au
bo:
%bp=getelementptr inbounds i8,i8*%aX,i64 8
%bq=bitcast i8*%bp to i8**
%br=load i8*,i8**%bq,align 8
store i8*%br,i8**%d,align 8
%bs=call i8*@sml_alloc(i32 inreg 20)#0
%bt=getelementptr inbounds i8,i8*%bs,i64 -4
%bu=bitcast i8*%bt to i32*
store i32 1342177296,i32*%bu,align 4
%bv=load i8*,i8**%e,align 8
%bw=bitcast i8*%bs to i8**
store i8*%bv,i8**%bw,align 8
br label%bG
bx:
%by=getelementptr inbounds i8,i8*%ax,i64 8
%bz=bitcast i8*%by to i8**
%bA=load i8*,i8**%bz,align 8
store i8*%bA,i8**%e,align 8
%bB=call i8*@sml_alloc(i32 inreg 20)#0
%bC=getelementptr inbounds i8,i8*%bB,i64 -4
%bD=bitcast i8*%bC to i32*
store i32 1342177296,i32*%bD,align 4
%bE=load i8*,i8**%d,align 8
%bF=bitcast i8*%bB to i8**
store i8*%bE,i8**%bF,align 8
br label%bG
bG:
%bH=phi i8*[%bs,%bo],[%bB,%bx]
%bI=phi i8**[%d,%bo],[%e,%bx]
%bJ=phi i8*[%bv,%bo],[%bE,%bx]
%bK=load i8*,i8**%bI,align 8
%bL=getelementptr inbounds i8,i8*%bH,i64 8
%bM=bitcast i8*%bL to i8**
store i8*%bK,i8**%bM,align 8
%bN=getelementptr inbounds i8,i8*%bH,i64 16
%bO=bitcast i8*%bN to i32*
store i32 3,i32*%bO,align 4
store i8*%bK,i8**%d,align 8
store i8*%bJ,i8**%e,align 8
%bP=bitcast i8*%bK to i32*
%bQ=load i32,i32*%bP,align 4
%bR=load i8*,i8**%f,align 8
%bS=getelementptr inbounds i8,i8*%bR,i64 8
%bT=bitcast i8*%bS to i32*
%bU=load i32,i32*%bT,align 4
%bV=icmp eq i32%bU,0
br i1%bV,label%b2,label%bW
bW:
%bX=bitcast i8*%bR to i8**
store i8*null,i8**%d,align 8
%bY=sext i32%B to i64
%bZ=getelementptr inbounds i8,i8*%bK,i64%bY
%b0=bitcast i8*%bZ to i8**
%b1=load i8*,i8**%b0,align 8
br label%ci
b2:
%b3=getelementptr inbounds i8,i8*%bR,i64 12
%b4=bitcast i8*%b3 to i32*
%b5=load i32,i32*%b4,align 4
%b6=call i8*@sml_alloc(i32 inreg%b5)#0
%b7=getelementptr inbounds i8,i8*%b6,i64 -4
%b8=bitcast i8*%b7 to i32*
store i32%b5,i32*%b8,align 4
%b9=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%ca=sext i32%B to i64
%cb=getelementptr inbounds i8,i8*%b9,i64%ca
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%b6,i8*%cb,i32%b5,i1 false)
%cc=bitcast i8**%f to i8***
%cd=load i8**,i8***%cc,align 8
%ce=bitcast i8**%cd to i8*
%cf=getelementptr inbounds i8*,i8**%cd,i64 1
%cg=bitcast i8**%cf to i32*
%ch=load i32,i32*%cg,align 4
br label%ci
ci:
%cj=phi i32[%ch,%b2],[%bU,%bW]
%ck=phi i8*[%ce,%b2],[%bR,%bW]
%cl=phi i8**[%cd,%b2],[%bX,%bW]
%cm=phi i8*[%b6,%b2],[%b1,%bW]
store i8*%cm,i8**%d,align 8
%cn=load i8*,i8**%cl,align 8
%co=getelementptr inbounds i8,i8*%cn,i64 16
%cp=bitcast i8*%co to i8*(i8*,i8*)**
%cq=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%cp,align 8
%cr=bitcast i8*%cn to i8**
%cs=load i8*,i8**%cr,align 8
store i8*%cs,i8**%g,align 8
%ct=getelementptr inbounds i8,i8*%ck,i64 12
%cu=bitcast i8*%ct to i32*
%cv=load i32,i32*%cu,align 4
%cw=call i8*@sml_alloc(i32 inreg%S)#0
%cx=or i32%J,1342177280
%cy=getelementptr inbounds i8,i8*%cw,i64 -4
%cz=bitcast i8*%cy to i32*
store i32%cx,i32*%cz,align 4
call void@llvm.memset.p0i8.i32(i8*%cw,i8 0,i32%S,i1 false)
%cA=icmp eq i32%cj,0
%cB=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%cC=sext i32%D to i64
%cD=getelementptr inbounds i8,i8*%cw,i64%cC
br i1%cA,label%cE,label%cI
cE:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cD,i8*%cB,i32%cv,i1 false)
%cF=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%cG=sext i32%H to i64
%cH=getelementptr inbounds i8,i8*%cw,i64%cG
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cH,i8*%cF,i32%cv,i1 false)
br label%cO
cI:
%cJ=bitcast i8*%cD to i8**
store i8*%cB,i8**%cJ,align 8
%cK=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%cL=sext i32%H to i64
%cM=getelementptr inbounds i8,i8*%cw,i64%cL
%cN=bitcast i8*%cM to i8**
store i8*%cK,i8**%cN,align 8
br label%cO
cO:
%cP=sext i32%J to i64
%cQ=getelementptr inbounds i8,i8*%cw,i64%cP
%cR=bitcast i8*%cQ to i32*
store i32%R,i32*%cR,align 4
%cS=load i8*,i8**%g,align 8
store i8*null,i8**%g,align 8
%cT=call fastcc i8*%cq(i8*inreg%cS,i8*inreg%cw)
store i8*%cT,i8**%c,align 8
%cU=load i8*,i8**%f,align 8
%cV=getelementptr inbounds i8,i8*%cU,i64 12
%cW=bitcast i8*%cV to i32*
%cX=load i32,i32*%cW,align 4
store i8*null,i8**%f,align 8
%cY=getelementptr inbounds i8,i8*%cU,i64 8
%cZ=bitcast i8*%cY to i32*
%c0=load i32,i32*%cZ,align 4
%c1=call i8*@sml_alloc(i32 inreg%X)#0
%c2=or i32%U,1342177280
%c3=getelementptr inbounds i8,i8*%c1,i64 -4
%c4=bitcast i8*%c3 to i32*
store i32%c2,i32*%c4,align 4
store i8*%c1,i8**%d,align 8
call void@llvm.memset.p0i8.i32(i8*%c1,i8 0,i32%X,i1 false)
%c5=bitcast i8*%c1 to i32*
store i32%bQ,i32*%c5,align 4
%c6=icmp eq i32%c0,0
%c7=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%c8=sext i32%B to i64
%c9=getelementptr inbounds i8,i8*%c1,i64%c8
br i1%c6,label%da,label%db
da:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%c9,i8*%c7,i32%cX,i1 false)
br label%dd
db:
%dc=bitcast i8*%c9 to i8**
store i8*%c7,i8**%dc,align 8
br label%dd
dd:
%de=sext i32%U to i64
%df=getelementptr inbounds i8,i8*%c1,i64%de
%dg=bitcast i8*%df to i32*
store i32%W,i32*%dg,align 4
%dh=call i8*@sml_alloc(i32 inreg 20)#0
%di=bitcast i8*%dh to i32*
%dj=getelementptr inbounds i8,i8*%dh,i64 -4
%dk=bitcast i8*%dj to i32*
store i32 1342177296,i32*%dk,align 4
%dl=getelementptr inbounds i8,i8*%dh,i64 4
%dm=bitcast i8*%dl to i32*
store i32 0,i32*%dm,align 1
store i32 1,i32*%di,align 4
%dn=load i8*,i8**%d,align 8
%do=getelementptr inbounds i8,i8*%dh,i64 8
%dp=bitcast i8*%do to i8**
store i8*%dn,i8**%dp,align 8
%dq=getelementptr inbounds i8,i8*%dh,i64 16
%dr=bitcast i8*%dq to i32*
store i32 2,i32*%dr,align 4
%ds=load i8*,i8**%e,align 8
%dt=bitcast i8*%ds to i8**
call void@sml_write(i8*inreg%ds,i8**inreg%dt,i8*inreg%dh)#0
ret void
}
define internal fastcc i8*@_SMLLLN9UnionFind6updateE_78(i8*inreg%a,i8*inreg%b)#3 gc"smlsharp"{
%c=alloca i8*,align 8
%d=alloca i8*,align 8
call void@llvm.gcroot(i8**%c,i8*null)#0
call void@llvm.gcroot(i8**%d,i8*null)#0
store i8*%b,i8**%c,align 8
%e=bitcast i8*%a to i32*
%f=load i32,i32*%e,align 4
%g=getelementptr inbounds i8,i8*%a,i64 4
%h=bitcast i8*%g to i32*
%i=load i32,i32*%h,align 4
%j=call i8*@sml_alloc(i32 inreg 20)#0
%k=getelementptr inbounds i8,i8*%j,i64 -4
%l=bitcast i8*%k to i32*
store i32 1342177296,i32*%l,align 4
store i8*%j,i8**%d,align 8
%m=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%n=bitcast i8*%j to i8**
store i8*%m,i8**%n,align 8
%o=getelementptr inbounds i8,i8*%j,i64 8
%p=bitcast i8*%o to i32*
store i32%f,i32*%p,align 4
%q=getelementptr inbounds i8,i8*%j,i64 12
%r=bitcast i8*%q to i32*
store i32%i,i32*%r,align 4
%s=getelementptr inbounds i8,i8*%j,i64 16
%t=bitcast i8*%s to i32*
store i32 1,i32*%t,align 4
%u=call i8*@sml_alloc(i32 inreg 28)#0
%v=getelementptr inbounds i8,i8*%u,i64 -4
%w=bitcast i8*%v to i32*
store i32 1342177304,i32*%w,align 4
%x=load i8*,i8**%d,align 8
%y=bitcast i8*%u to i8**
store i8*%x,i8**%y,align 8
%z=getelementptr inbounds i8,i8*%u,i64 8
%A=bitcast i8*%z to void(...)**
store void(...)*bitcast(void(i8*,i8*)*@_SMLLLN9UnionFind6updateE_77 to void(...)*),void(...)**%A,align 8
%B=getelementptr inbounds i8,i8*%u,i64 16
%C=bitcast i8*%B to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind6updateE_91 to void(...)*),void(...)**%C,align 8
%D=getelementptr inbounds i8,i8*%u,i64 24
%E=bitcast i8*%D to i32*
store i32 -2147483647,i32*%E,align 4
ret i8*%u
}
define fastcc i8*@_SMLFN9UnionFind6updateE(i32 inreg%a,i32 inreg%b)#3 gc"smlsharp"{
%c=alloca i8*,align 8
call void@llvm.gcroot(i8**%c,i8*null)#0
%d=call i8*@sml_alloc(i32 inreg 12)#0
%e=bitcast i8*%d to i32*
%f=getelementptr inbounds i8,i8*%d,i64 -4
%g=bitcast i8*%f to i32*
store i32 1342177288,i32*%g,align 4
store i8*%d,i8**%c,align 8
store i32%a,i32*%e,align 4
%h=getelementptr inbounds i8,i8*%d,i64 4
%i=bitcast i8*%h to i32*
store i32%b,i32*%i,align 4
%j=getelementptr inbounds i8,i8*%d,i64 8
%k=bitcast i8*%j to i32*
store i32 0,i32*%k,align 4
%l=call i8*@sml_alloc(i32 inreg 28)#0
%m=getelementptr inbounds i8,i8*%l,i64 -4
%n=bitcast i8*%m to i32*
store i32 1342177304,i32*%n,align 4
%o=load i8*,i8**%c,align 8
%p=bitcast i8*%l to i8**
store i8*%o,i8**%p,align 8
%q=getelementptr inbounds i8,i8*%l,i64 8
%r=bitcast i8*%q to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind6updateE_78 to void(...)*),void(...)**%r,align 8
%s=getelementptr inbounds i8,i8*%l,i64 16
%t=bitcast i8*%s to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN9UnionFind6updateE_78 to void(...)*),void(...)**%t,align 8
%u=getelementptr inbounds i8,i8*%l,i64 24
%v=bitcast i8*%u to i32*
store i32 -2147483647,i32*%v,align 4
ret i8*%l
}
define internal fastcc i8*@_SMLLLN9UnionFind3newE_81(i8*inreg%a,i8*inreg%b,i8*inreg%c)#3 gc"smlsharp"{
%d=bitcast i8*%b to i32*
%e=load i32,i32*%d,align 4
%f=bitcast i8*%c to i32*
%g=load i32,i32*%f,align 4
%h=tail call fastcc i8*@_SMLFN9UnionFind3newE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN9UnionFind4findE_82(i8*inreg%a,i8*inreg%b,i8*inreg%c)#3 gc"smlsharp"{
%d=bitcast i8*%b to i32*
%e=load i32,i32*%d,align 4
%f=bitcast i8*%c to i32*
%g=load i32,i32*%f,align 4
%h=tail call fastcc i8*@_SMLFN9UnionFind4findE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN9UnionFind4sizeE_83(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
%c=tail call fastcc i32@_SMLLLN9UnionFind4sizeE_51(i8*inreg%b)
%d=tail call i8*@sml_alloc(i32 inreg 4)#0
%e=bitcast i8*%d to i32*
%f=getelementptr inbounds i8,i8*%d,i64 -4
%g=bitcast i8*%f to i32*
store i32 4,i32*%g,align 4
store i32%c,i32*%e,align 4
ret i8*%d
}
define internal fastcc i8*@_SMLLLN9UnionFind4sizeE_84(i8*inreg%a,i8*inreg%b,i8*inreg%c)#3 gc"smlsharp"{
ret i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@c,i64 0,i32 2)to i8*)
}
define internal fastcc i8*@_SMLLLN9UnionFind4sameE_85(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
%c=tail call fastcc i32@_SMLLLN9UnionFind4sameE_59(i8*inreg%b)
%d=tail call i8*@sml_alloc(i32 inreg 4)#0
%e=bitcast i8*%d to i32*
%f=getelementptr inbounds i8,i8*%d,i64 -4
%g=bitcast i8*%f to i32*
store i32 4,i32*%g,align 4
store i32%c,i32*%e,align 4
ret i8*%d
}
define internal fastcc i8*@_SMLLLN9UnionFind4sameE_86(i8*inreg%a,i8*inreg%b,i8*inreg%c)#3 gc"smlsharp"{
ret i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@e,i64 0,i32 2)to i8*)
}
define internal fastcc i8*@_SMLLLN9UnionFind5equalE_87(i8*inreg%a,i8*inreg%b)#3 gc"smlsharp"{
%c=tail call fastcc i32@_SMLLLN9UnionFind5equalE_63(i8*inreg%b)
%d=tail call i8*@sml_alloc(i32 inreg 4)#0
%e=bitcast i8*%d to i32*
%f=getelementptr inbounds i8,i8*%d,i64 -4
%g=bitcast i8*%f to i32*
store i32 4,i32*%g,align 4
store i32%c,i32*%e,align 4
ret i8*%d
}
define internal fastcc i8*@_SMLLLN9UnionFind5equalE_88(i8*inreg%a,i8*inreg%b,i8*inreg%c)#3 gc"smlsharp"{
ret i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@g,i64 0,i32 2)to i8*)
}
define internal fastcc i8*@_SMLLLN9UnionFind5unionE_89(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
%c=tail call fastcc i32@_SMLLLN9UnionFind5unionE_71(i8*inreg%a,i8*inreg%b)
%d=tail call i8*@sml_alloc(i32 inreg 4)#0
%e=bitcast i8*%d to i32*
%f=getelementptr inbounds i8,i8*%d,i64 -4
%g=bitcast i8*%f to i32*
store i32 4,i32*%g,align 4
store i32%c,i32*%e,align 4
ret i8*%d
}
define internal fastcc i8*@_SMLLLN9UnionFind5unionE_90(i8*inreg%a,i8*inreg%b,i8*inreg%c)#3 gc"smlsharp"{
%d=bitcast i8*%b to i32*
%e=load i32,i32*%d,align 4
%f=bitcast i8*%c to i32*
%g=load i32,i32*%f,align 4
%h=tail call fastcc i8*@_SMLFN9UnionFind5unionE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN9UnionFind6updateE_91(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
tail call fastcc void@_SMLLLN9UnionFind6updateE_77(i8*inreg%a,i8*inreg%b)
%c=tail call i8*@sml_alloc(i32 inreg 4)#0
%d=bitcast i8*%c to i32*
%e=getelementptr inbounds i8,i8*%c,i64 -4
%f=bitcast i8*%e to i32*
store i32 4,i32*%f,align 4
store i32 0,i32*%d,align 4
ret i8*%c
}
define internal fastcc i8*@_SMLLLN9UnionFind6updateE_92(i8*inreg%a,i8*inreg%b,i8*inreg%c)#3 gc"smlsharp"{
%d=bitcast i8*%b to i32*
%e=load i32,i32*%d,align 4
%f=bitcast i8*%c to i32*
%g=load i32,i32*%f,align 4
%h=tail call fastcc i8*@_SMLFN9UnionFind6updateE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
declare void@llvm.memcpy.p0i8.p0i8.i32(i8*,i8*,i32,i1)#0
declare void@llvm.memset.p0i8.i32(i8*,i8,i32,i1)#0
attributes#0={nounwind}
attributes#1={noreturn}
attributes#2={noreturn nounwind}
attributes#3={nounwind uwtable}
attributes#4={uwtable}
