@sml_check_flag=external local_unnamed_addr global i32
@_SMLZ9Subscript=external unnamed_addr constant i8*
@_SMLZ4Size=external unnamed_addr constant i8*
@_SMLZ8Overflow=external unnamed_addr constant i8*
@a=private unnamed_addr constant<{[4x i8],i32,[45x i8]}><{[4x i8]zeroinitializer,i32 -2147483603,[45x i8]c"src/basis/main/Array_common.sml:305.42(8575)\00"}>,align 8
@b=private unnamed_addr constant<{[4x i8],i32,[45x i8]}><{[4x i8]zeroinitializer,i32 -2147483603,[45x i8]c"src/basis/main/Array_common.sml:306.61(8654)\00"}>,align 8
@c=private unnamed_addr constant<{[4x i8],i32,[45x i8]}><{[4x i8]zeroinitializer,i32 -2147483603,[45x i8]c"src/basis/main/Array_common.sml:307.18(8677)\00"}>,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)*@_SMLFN6Vector8fromListE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN6Vector8fromListE_208 to void(...)*),i32 -2147483647}>,align 8
@e=private unnamed_addr constant<{[4x i8],i32,[45x i8]}><{[4x i8]zeroinitializer,i32 -2147483603,[45x i8]c"src/basis/main/Array_common.sml:319.18(8980)\00"}>,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)*@_SMLFN6Vector8tabulateE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN6Vector8tabulateE_209 to void(...)*),i32 -2147483647}>,align 8
@g=private unnamed_addr constant<{[4x i8],i32,[45x i8]}><{[4x i8]zeroinitializer,i32 -2147483603,[45x i8]c"src/basis/main/Array_common.sml:333.52(9353)\00"}>,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)*@_SMLFN6Vector6updateE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN6Vector6updateE_210 to void(...)*),i32 -2147483647}>,align 8
@i=private unnamed_addr constant<{[4x i8],i32,[45x i8]}><{[4x i8]zeroinitializer,i32 -2147483603,[45x i8]c"src/basis/main/Array_common.sml:349.52(9873)\00"}>,align 8
@j=private unnamed_addr constant<{[4x i8],i32,[45x i8]}><{[4x i8]zeroinitializer,i32 -2147483603,[45x i8]c"src/basis/main/Array_common.sml:350.70(9972)\00"}>,align 8
@k=private unnamed_addr constant<{[4x i8],i32,[45x i8]}><{[4x i8]zeroinitializer,i32 -2147483603,[45x i8]c"src/basis/main/Array_common.sml:351.18(9995)\00"}>,align 8
@l=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN6Vector6concatE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN6Vector6concatE_211 to void(...)*),i32 -2147483647}>,align 8
@m=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN6Vector4appiE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN6Vector4appiE_213 to void(...)*),i32 -2147483647}>,align 8
@n=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN6Vector3appE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN6Vector3appE_215 to void(...)*),i32 -2147483647}>,align 8
@o=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32,i32,i32)*@_SMLFN6Vector4mapiE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*,i8*,i8*)*@_SMLLLN6Vector4mapiE_216 to void(...)*),i32 -2147483647}>,align 8
@p=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32,i32,i32)*@_SMLFN6Vector3mapE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*,i8*,i8*)*@_SMLLLN6Vector3mapE_217 to void(...)*),i32 -2147483647}>,align 8
@q=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32,i32,i32)*@_SMLFN6Vector6foldliE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*,i8*,i8*)*@_SMLLLN6Vector6foldliE_218 to void(...)*),i32 -2147483647}>,align 8
@r=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32,i32,i32)*@_SMLFN6Vector6foldriE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*,i8*,i8*)*@_SMLLLN6Vector6foldriE_219 to void(...)*),i32 -2147483647}>,align 8
@s=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32,i32,i32)*@_SMLFN6Vector5foldlE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*,i8*,i8*)*@_SMLLLN6Vector5foldlE_220 to void(...)*),i32 -2147483647}>,align 8
@t=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32,i32,i32)*@_SMLFN6Vector5foldrE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*,i8*,i8*)*@_SMLLLN6Vector5foldrE_221 to void(...)*),i32 -2147483647}>,align 8
@u=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN6Vector5findiE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN6Vector5findiE_222 to void(...)*),i32 -2147483647}>,align 8
@v=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN6Vector4findE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN6Vector4findE_223 to void(...)*),i32 -2147483647}>,align 8
@w=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN6Vector6existsE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN6Vector6existsE_225 to void(...)*),i32 -2147483647}>,align 8
@x=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN6Vector3allE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN6Vector3allE_227 to void(...)*),i32 -2147483647}>,align 8
@y=private unnamed_addr constant<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}><{[4x i8]zeroinitializer,i32 -805306344,i8*null,void(...)*bitcast(i8*(i32,i32)*@_SMLFN6Vector7collateE to void(...)*),void(...)*bitcast(i8*(i8*,i8*,i8*)*@_SMLLLN6Vector7collateE_229 to void(...)*),i32 -2147483647}>,align 8
@_SMLZN6Vector6maxLenE=local_unnamed_addr constant i32 268435455
@_SMLZN6Vector8fromListE=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*)
@_SMLZN6Vector8tabulateE=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*)
@_SMLZN6Vector6updateE=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*)
@_SMLZN6Vector6concatE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@l,i64 0,i32 2)to i8*)
@_SMLZN6Vector4appiE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@m,i64 0,i32 2)to i8*)
@_SMLZN6Vector3appE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@n,i64 0,i32 2)to i8*)
@_SMLZN6Vector4mapiE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@o,i64 0,i32 2)to i8*)
@_SMLZN6Vector3mapE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@p,i64 0,i32 2)to i8*)
@_SMLZN6Vector6foldliE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@q,i64 0,i32 2)to i8*)
@_SMLZN6Vector6foldriE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@r,i64 0,i32 2)to i8*)
@_SMLZN6Vector5foldlE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@s,i64 0,i32 2)to i8*)
@_SMLZN6Vector5foldrE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@t,i64 0,i32 2)to i8*)
@_SMLZN6Vector5findiE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@u,i64 0,i32 2)to i8*)
@_SMLZN6Vector4findE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@v,i64 0,i32 2)to i8*)
@_SMLZN6Vector6existsE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@w,i64 0,i32 2)to i8*)
@_SMLZN6Vector3allE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@x,i64 0,i32 2)to i8*)
@_SMLZN6Vector7collateE=local_unnamed_addr constant i8*bitcast(i8**getelementptr inbounds(<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>,<{[4x i8],i32,i8*,void(...)*,void(...)*,i32}>*@y,i64 0,i32 2)to i8*)
@_SML_ftabcbf81bea2bc04eab_Vector=external global i8
@z=internal unnamed_addr global i1 false
declare void@llvm.gcroot(i8**,i8*)#0
declare{i32,i1}@llvm.sadd.with.overflow.i32(i32,i32)#0
declare i8*@sml_alloc(i32 inreg)local_unnamed_addr#0
declare void@sml_check(i32 inreg)local_unnamed_addr
declare void@sml_copyary(i8**,i32,i8**,i32,i32)local_unnamed_addr#0
declare void@sml_gcroot(i8*,void()*,i8*,i8*)local_unnamed_addr#0
declare i32@sml_personality(...)#0
declare void@sml_raise(i8*inreg)local_unnamed_addr#1
declare i8*@sml_save()local_unnamed_addr#0
declare void@sml_unsave()local_unnamed_addr#0
declare void@sml_write(i8*inreg,i8**inreg,i8*inreg)local_unnamed_addr#0
define private void@_SML_tabbcbf81bea2bc04eab_Vector()#2{
unreachable
}
define void@_SML_loadcbf81bea2bc04eab_Vector(i8*%a)local_unnamed_addr#0{
%b=load i1,i1*@z,align 1
br i1%b,label%c,label%d
c:
ret void
d:
store i1 true,i1*@z,align 1
tail call void@sml_gcroot(i8*%a,void()*@_SML_tabbcbf81bea2bc04eab_Vector,i8*@_SML_ftabcbf81bea2bc04eab_Vector,i8*null)#0
ret void
}
define void@_SML_maincbf81bea2bc04eab_Vector()local_unnamed_addr#3 gc"smlsharp"{
ret void
}
define internal fastcc i8*@_SMLLLN6Vector8fromListE_135(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"personality i32(...)*@sml_personality{
D:
%c=alloca i8*,align 8
%d=alloca i8*,align 8
%e=alloca i8*,align 8
%f=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
store i8*%a,i8**%f,align 8
store i8*%b,i8**%c,align 8
%g=getelementptr inbounds i8,i8*%a,i64 4
%h=bitcast i8*%g to i32*
%i=load i32,i32*%h,align 4
%j=add i32%i,-1
%k=sub i32 0,%i
%l=and i32%j,%k
%m=add i32%i,7
%n=add i32%m,%l
%o=and i32%n,-8
%p=call i8*@sml_alloc(i32 inreg 20)#0
%q=getelementptr inbounds i8,i8*%p,i64 -4
%r=bitcast i8*%q to i32*
store i32 1342177296,i32*%r,align 4
%s=getelementptr inbounds i8,i8*%p,i64 12
%t=bitcast i8*%s to i32*
store i32 0,i32*%t,align 1
%u=load i8*,i8**%c,align 8
%v=bitcast i8*%p to i8**
store i8*%u,i8**%v,align 8
%w=getelementptr inbounds i8,i8*%p,i64 8
%x=bitcast i8*%w to i32*
store i32 0,i32*%x,align 4
%y=getelementptr inbounds i8,i8*%p,i64 16
%z=bitcast i8*%y to i32*
store i32 1,i32*%z,align 4
%A=sext i32%o to i64
br label%B
B:
%C=phi i8*[%ap,%an],[%p,%D]
store i8*%C,i8**%d,align 8
%E=load atomic i32,i32*@sml_check_flag unordered,align 4
%F=icmp eq i32%E,0
br i1%F,label%I,label%G
G:
call void@sml_check(i32 inreg%E)
%H=load i8*,i8**%d,align 8
br label%I
I:
%J=phi i8*[%H,%G],[%C,%B]
%K=bitcast i8*%J to i8**
%L=load i8*,i8**%K,align 8
%M=icmp eq i8*%L,null
br i1%M,label%N,label%S
N:
store i8*null,i8**%d,align 8
%O=getelementptr inbounds i8,i8*%J,i64 8
%P=bitcast i8*%O to i32*
%Q=load i32,i32*%P,align 4
%R=icmp slt i32%Q,0
br i1%R,label%bt,label%a0
S:
%T=getelementptr inbounds i8,i8*%L,i64%A
%U=bitcast i8*%T to i8**
%V=load i8*,i8**%U,align 8
store i8*%V,i8**%e,align 8
store i8*null,i8**%d,align 8
%W=getelementptr inbounds i8,i8*%J,i64 8
%X=bitcast i8*%W to i32*
%Y=load i32,i32*%X,align 4
%Z=call{i32,i1}@llvm.sadd.with.overflow.i32(i32%Y,i32 1)#0
%aa=extractvalue{i32,i1}%Z,1
br i1%aa,label%ab,label%an
ab:
store i8*null,i8**%e,align 8
store i8*null,i8**%f,align 8
%ac=load i8*,i8**@_SMLZ8Overflow,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**%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,[45x i8]}>,<{[4x i8],i32,[45x i8]}>*@a,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
store i8*%ad,i8**%c,align 8
%am=icmp eq i8*%ag,%ac
br i1%am,label%aA,label%aS
an:
%ao=add nsw i32%Y,1
%ap=call i8*@sml_alloc(i32 inreg 20)#0
%aq=getelementptr inbounds i8,i8*%ap,i64 -4
%ar=bitcast i8*%aq to i32*
store i32 1342177296,i32*%ar,align 4
%as=getelementptr inbounds i8,i8*%ap,i64 12
%at=bitcast i8*%as to i32*
store i32 0,i32*%at,align 1
%au=load i8*,i8**%e,align 8
store i8*null,i8**%e,align 8
%av=bitcast i8*%ap to i8**
store i8*%au,i8**%av,align 8
%aw=getelementptr inbounds i8,i8*%ap,i64 8
%ax=bitcast i8*%aw to i32*
store i32%ao,i32*%ax,align 4
%ay=getelementptr inbounds i8,i8*%ap,i64 16
%az=bitcast i8*%ay to i32*
store i32 1,i32*%az,align 4
br label%B
aA:
%aB=load i8*,i8**@_SMLZ4Size,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,[45x i8]}>,<{[4x i8],i32,[45x i8]}>*@b,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=call i8*@sml_alloc(i32 inreg 60)#0
%aU=getelementptr inbounds i8,i8*%aT,i64 -4
%aV=bitcast i8*%aU to i32*
store i32 1342177336,i32*%aV,align 4
%aW=getelementptr inbounds i8,i8*%aT,i64 56
%aX=bitcast i8*%aW to i32*
store i32 1,i32*%aX,align 4
%aY=load i8*,i8**%c,align 8
%aZ=bitcast i8*%aT to i8**
store i8*%aY,i8**%aZ,align 8
call void@sml_raise(i8*inreg%aT)#1
unreachable
a0:
%a1=load i8*,i8**%f,align 8
%a2=getelementptr inbounds i8,i8*%a1,i64 4
%a3=bitcast i8*%a2 to i32*
%a4=load i32,i32*%a3,align 4
%a5=udiv i32 268435455,%a4
%a6=icmp sgt i32%Q,%a5
br i1%a6,label%bt,label%a7
a7:
%a8=bitcast i8*%a1 to i32*
%a9=load i32,i32*%a8,align 4
%ba=mul nsw i32%a4,%Q
%bb=call i8*@sml_alloc(i32 inreg%ba)#0
%bc=shl i32%a9,28
%bd=or i32%bc,%ba
%be=getelementptr inbounds i8,i8*%bb,i64 -4
%bf=bitcast i8*%be to i32*
store i32%bd,i32*%bf,align 4
%bg=icmp eq i32%a9,0
br i1%bg,label%bi,label%bh
bh:
call void@llvm.memset.p0i8.i32(i8*%bb,i8 0,i32%ba,i1 false)
br label%bi
bi:
store i8*%bb,i8**%d,align 8
%bj=call i8*@sml_alloc(i32 inreg 20)#0
%bk=getelementptr inbounds i8,i8*%bj,i64 -4
%bl=bitcast i8*%bk to i32*
store i32 1342177296,i32*%bl,align 4
%bm=bitcast i8*%bj to i64*
store i64 0,i64*%bm,align 4
%bn=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%bo=getelementptr inbounds i8,i8*%bj,i64 8
%bp=bitcast i8*%bo to i8**
store i8*%bn,i8**%bp,align 8
%bq=getelementptr inbounds i8,i8*%bj,i64 16
%br=bitcast i8*%bq to i32*
store i32 2,i32*%br,align 4
%bs=sext i32%l to i64
br label%bL
bt:
store i8*null,i8**%f,align 8
%bu=load i8*,i8**@_SMLZ4Size,align 8
store i8*%bu,i8**%c,align 8
%bv=call i8*@sml_alloc(i32 inreg 20)#0
%bw=getelementptr inbounds i8,i8*%bv,i64 -4
%bx=bitcast i8*%bw to i32*
store i32 1342177296,i32*%bx,align 4
store i8*%bv,i8**%d,align 8
%by=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%bz=bitcast i8*%bv to i8**
store i8*%by,i8**%bz,align 8
%bA=getelementptr inbounds i8,i8*%bv,i64 8
%bB=bitcast i8*%bA to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[45x i8]}>,<{[4x i8],i32,[45x i8]}>*@c,i64 0,i32 2,i64 0),i8**%bB,align 8
%bC=getelementptr inbounds i8,i8*%bv,i64 16
%bD=bitcast i8*%bC to i32*
store i32 3,i32*%bD,align 4
%bE=call i8*@sml_alloc(i32 inreg 60)#0
%bF=getelementptr inbounds i8,i8*%bE,i64 -4
%bG=bitcast i8*%bF to i32*
store i32 1342177336,i32*%bG,align 4
%bH=getelementptr inbounds i8,i8*%bE,i64 56
%bI=bitcast i8*%bH to i32*
store i32 1,i32*%bI,align 4
%bJ=load i8*,i8**%d,align 8
%bK=bitcast i8*%bE to i8**
store i8*%bJ,i8**%bK,align 8
call void@sml_raise(i8*inreg%bE)#1
unreachable
bL:
%bM=phi i8*[%cF,%cD],[%bj,%bi]
store i8*%bM,i8**%c,align 8
%bN=load atomic i32,i32*@sml_check_flag unordered,align 4
%bO=icmp eq i32%bN,0
br i1%bO,label%bR,label%bP
bP:
call void@sml_check(i32 inreg%bN)
%bQ=load i8*,i8**%c,align 8
br label%bR
bR:
%bS=phi i8*[%bQ,%bP],[%bM,%bL]
%bT=bitcast i8*%bS to i32*
%bU=load i32,i32*%bT,align 4
%bV=getelementptr inbounds i8,i8*%bS,i64 8
%bW=bitcast i8*%bV to i8**
%bX=load i8*,i8**%bW,align 8
store i8*%bX,i8**%c,align 8
%bY=icmp eq i8*%bX,null
br i1%bY,label%cQ,label%bZ
bZ:
%b0=load i8*,i8**%f,align 8
%b1=bitcast i8*%b0 to i32*
%b2=load i32,i32*%b1,align 4
%b3=icmp eq i32%b2,0
br i1%b3,label%b8,label%b4
b4:
%b5=getelementptr inbounds i8,i8*%bX,i64%bs
%b6=bitcast i8*%b5 to i8**
%b7=load i8*,i8**%b6,align 8
br label%cj
b8:
%b9=getelementptr inbounds i8,i8*%b0,i64 4
%ca=bitcast i8*%b9 to i32*
%cb=load i32,i32*%ca,align 4
%cc=call i8*@sml_alloc(i32 inreg%cb)#0
%cd=getelementptr inbounds i8,i8*%cc,i64 -4
%ce=bitcast i8*%cd to i32*
store i32%cb,i32*%ce,align 4
%cf=load i8*,i8**%c,align 8
%cg=getelementptr inbounds i8,i8*%cf,i64%bs
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cc,i8*%cg,i32%cb,i1 false)
%ch=load i8*,i8**%f,align 8
%ci=bitcast i8*%ch to i32*
br label%cj
cj:
%ck=phi i32*[%ci,%b8],[%b1,%b4]
%cl=phi i8*[%ch,%b8],[%b0,%b4]
%cm=phi i8*[%cf,%b8],[%bX,%b4]
%cn=phi i8*[%cc,%b8],[%b7,%b4]
%co=getelementptr inbounds i8,i8*%cm,i64%A
%cp=bitcast i8*%co to i8**
%cq=load i8*,i8**%cp,align 8
store i8*%cq,i8**%c,align 8
%cr=getelementptr inbounds i8,i8*%cl,i64 4
%cs=bitcast i8*%cr to i32*
%ct=load i32,i32*%cs,align 4
%cu=load i32,i32*%ck,align 4
%cv=icmp eq i32%cu,0
%cw=load i8*,i8**%d,align 8
%cx=mul i32%ct,%bU
%cy=sext i32%cx to i64
%cz=getelementptr inbounds i8,i8*%cw,i64%cy
br i1%cv,label%cC,label%cA
cA:
%cB=bitcast i8*%cz to i8**
call void@sml_write(i8*inreg%cw,i8**inreg%cB,i8*inreg%cn)#0
br label%cD
cC:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cz,i8*%cn,i32%ct,i1 false)
br label%cD
cD:
%cE=add nsw i32%bU,1
%cF=call i8*@sml_alloc(i32 inreg 20)#0
%cG=bitcast i8*%cF to i32*
%cH=getelementptr inbounds i8,i8*%cF,i64 -4
%cI=bitcast i8*%cH to i32*
store i32 1342177296,i32*%cI,align 4
%cJ=getelementptr inbounds i8,i8*%cF,i64 4
%cK=bitcast i8*%cJ to i32*
store i32 0,i32*%cK,align 1
store i32%cE,i32*%cG,align 4
%cL=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%cM=getelementptr inbounds i8,i8*%cF,i64 8
%cN=bitcast i8*%cM to i8**
store i8*%cL,i8**%cN,align 8
%cO=getelementptr inbounds i8,i8*%cF,i64 16
%cP=bitcast i8*%cO to i32*
store i32 2,i32*%cP,align 4
br label%bL
cQ:
%cR=load i8*,i8**%d,align 8
ret i8*%cR
}
define fastcc i8*@_SMLFN6Vector8fromListE(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*)*@_SMLLLN6Vector8fromListE_135 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*)*@_SMLLLN6Vector8fromListE_135 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*@_SMLLLN6Vector8tabulateE_139(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
m:
%c=alloca i8*,align 8
%d=alloca i8*,align 8
%e=alloca i8*,align 8
%f=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
store i8*%a,i8**%e,align 8
store i8*%b,i8**%c,align 8
%g=load atomic i32,i32*@sml_check_flag unordered,align 4
%h=icmp eq i32%g,0
br i1%h,label%k,label%i
i:
call void@sml_check(i32 inreg%g)
%j=load i8*,i8**%c,align 8
br label%k
k:
%l=phi i8*[%j,%i],[%b,%m]
%n=bitcast i8*%l to i32*
%o=load i32,i32*%n,align 4
%p=getelementptr inbounds i8,i8*%l,i64 8
%q=bitcast i8*%p to i8**
%r=load i8*,i8**%q,align 8
store i8*%r,i8**%c,align 8
%s=icmp slt i32%o,0
br i1%s,label%M,label%t
t:
%u=load i8*,i8**%e,align 8
%v=getelementptr inbounds i8,i8*%u,i64 4
%w=bitcast i8*%v to i32*
%x=load i32,i32*%w,align 4
%y=udiv i32 268435455,%x
%z=icmp sgt i32%o,%y
br i1%z,label%M,label%A
A:
%B=bitcast i8*%u to i32*
%C=load i32,i32*%B,align 4
%D=mul nsw i32%x,%o
%E=call i8*@sml_alloc(i32 inreg%D)#0
%F=shl i32%C,28
%G=or i32%F,%D
%H=getelementptr inbounds i8,i8*%E,i64 -4
%I=bitcast i8*%H to i32*
store i32%G,i32*%I,align 4
%J=icmp eq i32%C,0
br i1%J,label%L,label%K
K:
call void@llvm.memset.p0i8.i32(i8*%E,i8 0,i32%D,i1 false)
br label%L
L:
store i8*%E,i8**%d,align 8
br label%ae
M:
store i8*null,i8**%e,align 8
%N=load i8*,i8**@_SMLZ4Size,align 8
store i8*%N,i8**%c,align 8
%O=call i8*@sml_alloc(i32 inreg 20)#0
%P=getelementptr inbounds i8,i8*%O,i64 -4
%Q=bitcast i8*%P to i32*
store i32 1342177296,i32*%Q,align 4
store i8*%O,i8**%d,align 8
%R=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%S=bitcast i8*%O to i8**
store i8*%R,i8**%S,align 8
%T=getelementptr inbounds i8,i8*%O,i64 8
%U=bitcast i8*%T to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[45x i8]}>,<{[4x i8],i32,[45x i8]}>*@e,i64 0,i32 2,i64 0),i8**%U,align 8
%V=getelementptr inbounds i8,i8*%O,i64 16
%W=bitcast i8*%V to i32*
store i32 3,i32*%W,align 4
%X=call i8*@sml_alloc(i32 inreg 60)#0
%Y=getelementptr inbounds i8,i8*%X,i64 -4
%Z=bitcast i8*%Y to i32*
store i32 1342177336,i32*%Z,align 4
%aa=getelementptr inbounds i8,i8*%X,i64 56
%ab=bitcast i8*%aa to i32*
store i32 1,i32*%ab,align 4
%ac=load i8*,i8**%d,align 8
%ad=bitcast i8*%X to i8**
store i8*%ac,i8**%ad,align 8
call void@sml_raise(i8*inreg%X)#1
unreachable
ae:
%af=phi i32[0,%L],[%aJ,%aI]
%ag=icmp slt i32%af,%o
br i1%ag,label%ah,label%aK
ah:
%ai=load i8*,i8**%c,align 8
%aj=getelementptr inbounds i8,i8*%ai,i64 16
%ak=bitcast i8*%aj to i8*(i8*,i8*)**
%al=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%ak,align 8
%am=bitcast i8*%ai to i8**
%an=load i8*,i8**%am,align 8
store i8*%an,i8**%f,align 8
%ao=call i8*@sml_alloc(i32 inreg 4)#0
%ap=bitcast i8*%ao to i32*
%aq=getelementptr inbounds i8,i8*%ao,i64 -4
%ar=bitcast i8*%aq to i32*
store i32 4,i32*%ar,align 4
store i32%af,i32*%ap,align 4
%as=load i8*,i8**%f,align 8
store i8*null,i8**%f,align 8
%at=call fastcc i8*%al(i8*inreg%as,i8*inreg%ao)
%au=load i8*,i8**%e,align 8
%av=getelementptr inbounds i8,i8*%au,i64 4
%aw=bitcast i8*%av to i32*
%ax=load i32,i32*%aw,align 4
%ay=bitcast i8*%au to i32*
%az=load i32,i32*%ay,align 4
%aA=icmp eq i32%az,0
%aB=load i8*,i8**%d,align 8
%aC=mul i32%ax,%af
%aD=sext i32%aC to i64
%aE=getelementptr inbounds i8,i8*%aB,i64%aD
br i1%aA,label%aH,label%aF
aF:
%aG=bitcast i8*%aE to i8**
call void@sml_write(i8*inreg%aB,i8**inreg%aG,i8*inreg%at)#0
br label%aI
aH:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%aE,i8*%at,i32%ax,i1 false)
br label%aI
aI:
%aJ=add nuw nsw i32%af,1
br label%ae
aK:
%aL=load i8*,i8**%d,align 8
ret i8*%aL
}
define fastcc i8*@_SMLFN6Vector8tabulateE(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*)*@_SMLLLN6Vector8tabulateE_139 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*)*@_SMLLLN6Vector8tabulateE_139 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*@_SMLLLN6Vector6updateE_143(i8*inreg%a,i8*inreg%b)#4 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**%e,align 8
store i8*%b,i8**%c,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,11
%j=sub i32 0,%h
%k=and i32%i,%j
%l=bitcast i8*%b to i8**
%m=load i8*,i8**%l,align 8
store i8*%m,i8**%d,align 8
%n=getelementptr inbounds i8,i8*%b,i64 8
%o=bitcast i8*%n to i32*
%p=load i32,i32*%o,align 4
%q=bitcast i8*%a to i32*
%r=load i32,i32*%q,align 4
%s=icmp eq i32%r,0
br i1%s,label%z,label%t
t:
%u=bitcast i8*%m to i32*
store i8*null,i8**%c,align 8
%v=sext i32%k to i64
%w=getelementptr inbounds i8,i8*%b,i64%v
%x=bitcast i8*%w to i8**
%y=load i8*,i8**%x,align 8
br label%L
z:
%A=call i8*@sml_alloc(i32 inreg%h)#0
%B=getelementptr inbounds i8,i8*%A,i64 -4
%C=bitcast i8*%B to i32*
store i32%h,i32*%C,align 4
%D=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%E=sext i32%k to i64
%F=getelementptr inbounds i8,i8*%D,i64%E
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%A,i8*%F,i32%h,i1 false)
%G=bitcast i8**%d to i32**
%H=load i32*,i32**%G,align 8
%I=load i8*,i8**%e,align 8
%J=getelementptr inbounds i8,i8*%I,i64 4
%K=bitcast i8*%J to i32*
br label%L
L:
%M=phi i32*[%K,%z],[%g,%t]
%N=phi i8*[%I,%z],[%a,%t]
%O=phi i32*[%H,%z],[%u,%t]
%P=phi i8*[%A,%z],[%y,%t]
store i8*%P,i8**%c,align 8
%Q=getelementptr inbounds i32,i32*%O,i64 -1
%R=load i32,i32*%Q,align 4
%S=and i32%R,268435455
%T=load i32,i32*%M,align 4
%U=udiv i32%S,%T
%V=icmp ult i32%p,%U
br i1%V,label%ao,label%W
W:
store i8*null,i8**%d,align 8
store i8*null,i8**%e,align 8
%X=load i8*,i8**@_SMLZ9Subscript,align 8
store i8*%X,i8**%c,align 8
%Y=call i8*@sml_alloc(i32 inreg 20)#0
%Z=getelementptr inbounds i8,i8*%Y,i64 -4
%aa=bitcast i8*%Z to i32*
store i32 1342177296,i32*%aa,align 4
store i8*%Y,i8**%d,align 8
%ab=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%ac=bitcast i8*%Y to i8**
store i8*%ab,i8**%ac,align 8
%ad=getelementptr inbounds i8,i8*%Y,i64 8
%ae=bitcast i8*%ad to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[45x i8]}>,<{[4x i8],i32,[45x i8]}>*@g,i64 0,i32 2,i64 0),i8**%ae,align 8
%af=getelementptr inbounds i8,i8*%Y,i64 16
%ag=bitcast i8*%af to i32*
store i32 3,i32*%ag,align 4
%ah=call i8*@sml_alloc(i32 inreg 60)#0
%ai=getelementptr inbounds i8,i8*%ah,i64 -4
%aj=bitcast i8*%ai to i32*
store i32 1342177336,i32*%aj,align 4
%ak=getelementptr inbounds i8,i8*%ah,i64 56
%al=bitcast i8*%ak to i32*
store i32 1,i32*%al,align 4
%am=load i8*,i8**%d,align 8
%an=bitcast i8*%ah to i8**
store i8*%am,i8**%an,align 8
call void@sml_raise(i8*inreg%ah)#1
unreachable
ao:
%ap=bitcast i8*%N to i32*
%aq=load i32,i32*%ap,align 4
%ar=mul nsw i32%U,%T
%as=call i8*@sml_alloc(i32 inreg%ar)#0
%at=shl i32%aq,28
%au=or i32%at,%ar
%av=getelementptr inbounds i8,i8*%as,i64 -4
%aw=bitcast i8*%av to i32*
store i32%au,i32*%aw,align 4
%ax=icmp eq i32%aq,0
br i1%ax,label%az,label%ay
ay:
call void@llvm.memset.p0i8.i32(i8*%as,i8 0,i32%ar,i1 false)
br label%az
az:
%aA=load i8*,i8**%e,align 8
%aB=bitcast i8*%aA to i32*
%aC=load i32,i32*%aB,align 4
%aD=icmp eq i32%aC,0
%aE=load i8*,i8**%d,align 8
br i1%aD,label%aF,label%aK
aF:
%aG=getelementptr inbounds i8,i8*%aA,i64 4
%aH=bitcast i8*%aG to i32*
%aI=load i32,i32*%aH,align 4
%aJ=mul nuw i32%aI,%U
call void@llvm.memmove.p0i8.p0i8.i32(i8*%as,i8*%aE,i32%aJ,i1 false)
br label%aS
aK:
%aL=bitcast i8*%as to i8**
%aM=bitcast i8*%aE to i8**
%aN=call i8*@sml_save()#0
call void@sml_copyary(i8**%aM,i32 0,i8**%aL,i32 0,i32%U)#0
call void@sml_unsave()#0
%aO=load i8*,i8**%e,align 8
%aP=getelementptr inbounds i8,i8*%aO,i64 4
%aQ=bitcast i8*%aP to i32*
%aR=bitcast i8*%aO to i32*
br label%aS
aS:
%aT=phi i32*[%aR,%aK],[%aB,%aF]
%aU=phi i32*[%aQ,%aK],[%aH,%aF]
%aV=load i32,i32*%aU,align 4
%aW=load i32,i32*%aT,align 4
%aX=icmp eq i32%aW,0
%aY=load i8*,i8**%c,align 8
%aZ=mul i32%aV,%p
%a0=sext i32%aZ to i64
%a1=getelementptr inbounds i8,i8*%as,i64%a0
br i1%aX,label%a4,label%a2
a2:
%a3=bitcast i8*%a1 to i8**
call void@sml_write(i8*inreg%as,i8**inreg%a3,i8*inreg%aY)#0
br label%a5
a4:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%a1,i8*%aY,i32%aV,i1 false)
br label%a5
a5:
ret i8*%as
}
define fastcc i8*@_SMLFN6Vector6updateE(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*)*@_SMLLLN6Vector6updateE_143 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*)*@_SMLLLN6Vector6updateE_143 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*@_SMLLLN6Vector6concatE_149(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"personality i32(...)*@sml_personality{
%c=alloca i8*,align 8
%d=alloca i8*,align 8
%e=alloca i8*,align 8
%f=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
store i8*%a,i8**%f,align 8
store i8*%b,i8**%c,align 8
%g=icmp eq i8*%b,null
br i1%g,label%h,label%r
h:
%i=bitcast i8*%a to i32*
store i8*null,i8**%c,align 8
%j=load i32,i32*%i,align 4
store i8*null,i8**%f,align 8
%k=call i8*@sml_alloc(i32 inreg 0)#0
%l=shl i32%j,28
%m=getelementptr inbounds i8,i8*%k,i64 -4
%n=bitcast i8*%m to i32*
store i32%l,i32*%n,align 4
ret i8*%k
o:
%p=bitcast i8*%b to i8**
%q=load i8*,i8**%p,align 8
ret i8*%q
r:
%s=getelementptr inbounds i8,i8*%b,i64 8
%t=bitcast i8*%s to i8**
%u=load i8*,i8**%t,align 8
%v=icmp eq i8*%u,null
br i1%v,label%o,label%w
w:
%x=call i8*@sml_alloc(i32 inreg 20)#0
%y=getelementptr inbounds i8,i8*%x,i64 -4
%z=bitcast i8*%y to i32*
store i32 1342177296,i32*%z,align 4
%A=getelementptr inbounds i8,i8*%x,i64 12
%B=bitcast i8*%A to i32*
store i32 0,i32*%B,align 1
%C=load i8*,i8**%c,align 8
br label%D
D:
%E=phi i8*[%aH,%aF],[%x,%w]
%F=phi i8*[%aM,%aF],[%C,%w]
%G=phi i32[%aG,%aF],[0,%w]
%H=bitcast i8*%E to i8**
store i8*%F,i8**%H,align 8
%I=getelementptr inbounds i8,i8*%E,i64 8
%J=bitcast i8*%I to i32*
store i32%G,i32*%J,align 4
%K=getelementptr inbounds i8,i8*%E,i64 16
%L=bitcast i8*%K to i32*
store i32 1,i32*%L,align 4
store i8*%E,i8**%d,align 8
%M=load atomic i32,i32*@sml_check_flag unordered,align 4
%N=icmp eq i32%M,0
br i1%N,label%Q,label%O
O:
call void@sml_check(i32 inreg%M)
%P=load i8*,i8**%d,align 8
br label%Q
Q:
%R=phi i8*[%P,%O],[%E,%D]
%S=bitcast i8*%R to i8**
%T=load i8*,i8**%S,align 8
%U=icmp eq i8*%T,null
br i1%U,label%V,label%aa
V:
store i8*null,i8**%d,align 8
%W=getelementptr inbounds i8,i8*%R,i64 8
%X=bitcast i8*%W to i32*
%Y=load i32,i32*%X,align 4
%Z=icmp slt i32%Y,0
br i1%Z,label%bA,label%bd
aa:
%ab=bitcast i8*%T to i32**
%ac=load i32*,i32**%ab,align 8
%ad=getelementptr inbounds i8,i8*%T,i64 8
%ae=bitcast i8*%ad to i8**
%af=load i8*,i8**%ae,align 8
store i8*%af,i8**%e,align 8
store i8*null,i8**%d,align 8
%ag=getelementptr inbounds i8,i8*%R,i64 8
%ah=bitcast i8*%ag to i32*
%ai=load i32,i32*%ah,align 4
%aj=getelementptr inbounds i32,i32*%ac,i64 -1
%ak=load i32,i32*%aj,align 4
%al=and i32%ak,268435455
%am=load i8*,i8**%f,align 8
%an=getelementptr inbounds i8,i8*%am,i64 4
%ao=bitcast i8*%an to i32*
%ap=load i32,i32*%ao,align 4
%aq=udiv i32%al,%ap
%ar=call{i32,i1}@llvm.sadd.with.overflow.i32(i32%aq,i32%ai)#0
%as=extractvalue{i32,i1}%ar,1
br i1%as,label%at,label%aF
at:
store i8*null,i8**%e,align 8
store i8*null,i8**%f,align 8
%au=load i8*,i8**@_SMLZ8Overflow,align 8
store i8*%au,i8**%c,align 8
%av=call i8*@sml_alloc(i32 inreg 20)#0
%aw=getelementptr inbounds i8,i8*%av,i64 -4
%ax=bitcast i8*%aw to i32*
store i32 1342177296,i32*%ax,align 4
%ay=load i8*,i8**%c,align 8
%az=bitcast i8*%av to i8**
store i8*%ay,i8**%az,align 8
%aA=getelementptr inbounds i8,i8*%av,i64 8
%aB=bitcast i8*%aA to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[45x i8]}>,<{[4x i8],i32,[45x i8]}>*@i,i64 0,i32 2,i64 0),i8**%aB,align 8
%aC=getelementptr inbounds i8,i8*%av,i64 16
%aD=bitcast i8*%aC to i32*
store i32 3,i32*%aD,align 4
store i8*%av,i8**%c,align 8
%aE=icmp eq i8*%ay,%au
br i1%aE,label%aN,label%a5
aF:
%aG=add nsw i32%aq,%ai
%aH=call i8*@sml_alloc(i32 inreg 20)#0
%aI=getelementptr inbounds i8,i8*%aH,i64 -4
%aJ=bitcast i8*%aI to i32*
store i32 1342177296,i32*%aJ,align 4
%aK=getelementptr inbounds i8,i8*%aH,i64 12
%aL=bitcast i8*%aK to i32*
store i32 0,i32*%aL,align 1
%aM=load i8*,i8**%e,align 8
store i8*null,i8**%e,align 8
br label%D
aN:
%aO=load i8*,i8**@_SMLZ4Size,align 8
store i8*%aO,i8**%c,align 8
%aP=call i8*@sml_alloc(i32 inreg 20)#0
%aQ=getelementptr inbounds i8,i8*%aP,i64 -4
%aR=bitcast i8*%aQ to i32*
store i32 1342177296,i32*%aR,align 4
store i8*%aP,i8**%d,align 8
%aS=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%aT=bitcast i8*%aP to i8**
store i8*%aS,i8**%aT,align 8
%aU=getelementptr inbounds i8,i8*%aP,i64 8
%aV=bitcast i8*%aU to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[45x i8]}>,<{[4x i8],i32,[45x i8]}>*@j,i64 0,i32 2,i64 0),i8**%aV,align 8
%aW=getelementptr inbounds i8,i8*%aP,i64 16
%aX=bitcast i8*%aW to i32*
store i32 3,i32*%aX,align 4
%aY=call i8*@sml_alloc(i32 inreg 60)#0
%aZ=getelementptr inbounds i8,i8*%aY,i64 -4
%a0=bitcast i8*%aZ to i32*
store i32 1342177336,i32*%a0,align 4
%a1=getelementptr inbounds i8,i8*%aY,i64 56
%a2=bitcast i8*%a1 to i32*
store i32 1,i32*%a2,align 4
%a3=load i8*,i8**%d,align 8
%a4=bitcast i8*%aY to i8**
store i8*%a3,i8**%a4,align 8
call void@sml_raise(i8*inreg%aY)#1
unreachable
a5:
%a6=call i8*@sml_alloc(i32 inreg 60)#0
%a7=getelementptr inbounds i8,i8*%a6,i64 -4
%a8=bitcast i8*%a7 to i32*
store i32 1342177336,i32*%a8,align 4
%a9=getelementptr inbounds i8,i8*%a6,i64 56
%ba=bitcast i8*%a9 to i32*
store i32 1,i32*%ba,align 4
%bb=load i8*,i8**%c,align 8
%bc=bitcast i8*%a6 to i8**
store i8*%bb,i8**%bc,align 8
call void@sml_raise(i8*inreg%a6)#1
unreachable
bd:
%be=load i8*,i8**%f,align 8
%bf=getelementptr inbounds i8,i8*%be,i64 4
%bg=bitcast i8*%bf to i32*
%bh=load i32,i32*%bg,align 4
%bi=udiv i32 268435455,%bh
%bj=icmp sgt i32%Y,%bi
br i1%bj,label%bA,label%bk
bk:
%bl=bitcast i8*%be to i32*
%bm=load i32,i32*%bl,align 4
%bn=mul nsw i32%bh,%Y
%bo=call i8*@sml_alloc(i32 inreg%bn)#0
%bp=shl i32%bm,28
%bq=or i32%bp,%bn
%br=getelementptr inbounds i8,i8*%bo,i64 -4
%bs=bitcast i8*%br to i32*
store i32%bq,i32*%bs,align 4
%bt=icmp eq i32%bm,0
br i1%bt,label%bv,label%bu
bu:
call void@llvm.memset.p0i8.i32(i8*%bo,i8 0,i32%bn,i1 false)
br label%bv
bv:
store i8*%bo,i8**%d,align 8
%bw=call i8*@sml_alloc(i32 inreg 20)#0
%bx=getelementptr inbounds i8,i8*%bw,i64 -4
%by=bitcast i8*%bx to i32*
store i32 1342177296,i32*%by,align 4
%bz=bitcast i8*%bw to i64*
store i64 0,i64*%bz,align 4
br label%bS
bA:
store i8*null,i8**%f,align 8
%bB=load i8*,i8**@_SMLZ4Size,align 8
store i8*%bB,i8**%c,align 8
%bC=call i8*@sml_alloc(i32 inreg 20)#0
%bD=getelementptr inbounds i8,i8*%bC,i64 -4
%bE=bitcast i8*%bD to i32*
store i32 1342177296,i32*%bE,align 4
store i8*%bC,i8**%d,align 8
%bF=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%bG=bitcast i8*%bC to i8**
store i8*%bF,i8**%bG,align 8
%bH=getelementptr inbounds i8,i8*%bC,i64 8
%bI=bitcast i8*%bH to i8**
store i8*getelementptr inbounds(<{[4x i8],i32,[45x i8]}>,<{[4x i8],i32,[45x i8]}>*@k,i64 0,i32 2,i64 0),i8**%bI,align 8
%bJ=getelementptr inbounds i8,i8*%bC,i64 16
%bK=bitcast i8*%bJ to i32*
store i32 3,i32*%bK,align 4
%bL=call i8*@sml_alloc(i32 inreg 60)#0
%bM=getelementptr inbounds i8,i8*%bL,i64 -4
%bN=bitcast i8*%bM to i32*
store i32 1342177336,i32*%bN,align 4
%bO=getelementptr inbounds i8,i8*%bL,i64 56
%bP=bitcast i8*%bO to i32*
store i32 1,i32*%bP,align 4
%bQ=load i8*,i8**%d,align 8
%bR=bitcast i8*%bL to i8**
store i8*%bQ,i8**%bR,align 8
call void@sml_raise(i8*inreg%bL)#1
unreachable
bS:
%bT=phi i8*[%cF,%cD],[%bw,%bv]
%bU=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%bV=getelementptr inbounds i8,i8*%bT,i64 8
%bW=bitcast i8*%bV to i8**
store i8*%bU,i8**%bW,align 8
%bX=getelementptr inbounds i8,i8*%bT,i64 16
%bY=bitcast i8*%bX to i32*
store i32 2,i32*%bY,align 4
store i8*%bT,i8**%c,align 8
%bZ=load atomic i32,i32*@sml_check_flag unordered,align 4
%b0=icmp eq i32%bZ,0
br i1%b0,label%b3,label%b1
b1:
call void@sml_check(i32 inreg%bZ)
%b2=load i8*,i8**%c,align 8
br label%b3
b3:
%b4=phi i8*[%b2,%b1],[%bT,%bS]
%b5=bitcast i8*%b4 to i32*
%b6=load i32,i32*%b5,align 4
%b7=getelementptr inbounds i8,i8*%b4,i64 8
%b8=bitcast i8*%b7 to i8**
%b9=load i8*,i8**%b8,align 8
%ca=icmp eq i8*%b9,null
br i1%ca,label%cL,label%cb
cb:
%cc=bitcast i8*%b9 to i8**
%cd=load i8*,i8**%cc,align 8
%ce=getelementptr inbounds i8,i8*%b9,i64 8
%cf=bitcast i8*%ce to i8**
%cg=load i8*,i8**%cf,align 8
store i8*%cg,i8**%c,align 8
%ch=getelementptr inbounds i8,i8*%cd,i64 -4
%ci=bitcast i8*%ch to i32*
%cj=load i32,i32*%ci,align 4
%ck=and i32%cj,268435455
%cl=load i8*,i8**%f,align 8
%cm=getelementptr inbounds i8,i8*%cl,i64 4
%cn=bitcast i8*%cm to i32*
%co=load i32,i32*%cn,align 4
%cp=udiv i32%ck,%co
%cq=bitcast i8*%cl to i32*
%cr=load i32,i32*%cq,align 4
%cs=icmp eq i32%cr,0
%ct=load i8*,i8**%d,align 8
br i1%cs,label%cu,label%cz
cu:
%cv=mul i32%co,%b6
%cw=sext i32%cv to i64
%cx=getelementptr inbounds i8,i8*%ct,i64%cw
%cy=mul nuw i32%cp,%co
call void@llvm.memmove.p0i8.p0i8.i32(i8*%cx,i8*%cd,i32%cy,i1 false)
br label%cD
cz:
%cA=bitcast i8*%ct to i8**
%cB=bitcast i8*%cd to i8**
%cC=call i8*@sml_save()#0
call void@sml_copyary(i8**%cB,i32 0,i8**%cA,i32%b6,i32%cp)#0
call void@sml_unsave()#0
br label%cD
cD:
%cE=add nsw i32%cp,%b6
%cF=call i8*@sml_alloc(i32 inreg 20)#0
%cG=bitcast i8*%cF to i32*
%cH=getelementptr inbounds i8,i8*%cF,i64 -4
%cI=bitcast i8*%cH to i32*
store i32 1342177296,i32*%cI,align 4
%cJ=getelementptr inbounds i8,i8*%cF,i64 4
%cK=bitcast i8*%cJ to i32*
store i32 0,i32*%cK,align 1
store i32%cE,i32*%cG,align 4
br label%bS
cL:
%cM=load i8*,i8**%d,align 8
ret i8*%cM
}
define fastcc i8*@_SMLFN6Vector6concatE(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*)*@_SMLLLN6Vector6concatE_149 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*)*@_SMLLLN6Vector6concatE_149 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@_SMLLLN6Vector4appiE_152(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
G:
%c=alloca i8*,align 8
%d=alloca i8*,align 8
%e=alloca i8*,align 8
%f=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
store i8*%a,i8**%e,align 8
store i8*%b,i8**%c,align 8
%g=getelementptr inbounds i8,i8*%a,i64 12
%h=bitcast i8*%g to i32*
%i=load i32,i32*%h,align 4
%j=add i32%i,3
%k=sub i32 0,%i
%l=and i32%j,%k
%m=add i32%i,7
%n=add i32%m,%l
%o=and i32%n,-8
%p=lshr i32%l,3
%q=getelementptr inbounds i8,i8*%a,i64 8
%r=bitcast i8*%q to i32*
%s=load i32,i32*%r,align 4
%t=shl i32%s,%p
%u=or i32%o,4
%v=getelementptr inbounds i8,i8*%b,i64 -4
%w=bitcast i8*%v to i32*
%x=load i32,i32*%w,align 4
%y=and i32%x,268435455
%z=udiv i32%y,%i
%A=bitcast i8**%e to i8***
%B=or i32%o,1342177280
%C=sext i32%l to i64
%D=sext i32%o to i64
br label%E
E:
%F=phi i32[0,%G],[%aU,%aP]
%H=load atomic i32,i32*@sml_check_flag unordered,align 4
%I=icmp eq i32%H,0
br i1%I,label%K,label%J
J:
call void@sml_check(i32 inreg%H)
br label%K
K:
%L=icmp slt i32%F,%z
br i1%L,label%N,label%M
M:
ret void
N:
%O=load i8*,i8**%e,align 8
%P=getelementptr inbounds i8,i8*%O,i64 12
%Q=bitcast i8*%P to i32*
%R=load i32,i32*%Q,align 4
%S=getelementptr inbounds i8,i8*%O,i64 8
%T=bitcast i8*%S to i32*
%U=load i32,i32*%T,align 4
%V=icmp eq i32%U,0
br i1%V,label%ae,label%W
W:
%X=bitcast i8*%O to i8**
%Y=load i8*,i8**%c,align 8
%Z=mul i32%R,%F
%aa=sext i32%Z to i64
%ab=getelementptr inbounds i8,i8*%Y,i64%aa
%ac=bitcast i8*%ab to i8**
%ad=load i8*,i8**%ac,align 8
br label%au
ae:
%af=call i8*@sml_alloc(i32 inreg%R)#0
%ag=getelementptr inbounds i8,i8*%af,i64 -4
%ah=bitcast i8*%ag to i32*
store i32%R,i32*%ah,align 4
%ai=load i8*,i8**%c,align 8
%aj=mul i32%R,%F
%ak=sext i32%aj to i64
%al=getelementptr inbounds i8,i8*%ai,i64%ak
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%af,i8*%al,i32%R,i1 false)
%am=load i8**,i8***%A,align 8
%an=bitcast i8**%am to i8*
%ao=getelementptr inbounds i8,i8*%an,i64 12
%ap=bitcast i8*%ao to i32*
%aq=load i32,i32*%ap,align 4
%ar=getelementptr inbounds i8*,i8**%am,i64 1
%as=bitcast i8**%ar to i32*
%at=load i32,i32*%as,align 4
br label%au
au:
%av=phi i32[%at,%ae],[%U,%W]
%aw=phi i32[%aq,%ae],[%R,%W]
%ax=phi i8**[%am,%ae],[%X,%W]
%ay=phi i8*[%af,%ae],[%ad,%W]
store i8*%ay,i8**%d,align 8
%az=load i8*,i8**%ax,align 8
%aA=getelementptr inbounds i8,i8*%az,i64 16
%aB=bitcast i8*%aA to i8*(i8*,i8*)**
%aC=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%aB,align 8
%aD=bitcast i8*%az to i8**
%aE=load i8*,i8**%aD,align 8
store i8*%aE,i8**%f,align 8
%aF=call i8*@sml_alloc(i32 inreg%u)#0
%aG=bitcast i8*%aF to i32*
%aH=getelementptr inbounds i8,i8*%aF,i64 -4
%aI=bitcast i8*%aH to i32*
store i32%B,i32*%aI,align 4
call void@llvm.memset.p0i8.i32(i8*%aF,i8 0,i32%u,i1 false)
store i32%F,i32*%aG,align 4
%aJ=icmp eq i32%av,0
%aK=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%aL=getelementptr inbounds i8,i8*%aF,i64%C
br i1%aJ,label%aM,label%aN
aM:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%aL,i8*%aK,i32%aw,i1 false)
br label%aP
aN:
%aO=bitcast i8*%aL to i8**
store i8*%aK,i8**%aO,align 8
br label%aP
aP:
%aQ=getelementptr inbounds i8,i8*%aF,i64%D
%aR=bitcast i8*%aQ to i32*
store i32%t,i32*%aR,align 4
%aS=load i8*,i8**%f,align 8
store i8*null,i8**%f,align 8
%aT=call fastcc i8*%aC(i8*inreg%aS,i8*inreg%aF)
%aU=add nuw nsw i32%F,1
br label%E
}
define internal fastcc i8*@_SMLLLN6Vector4appiE_153(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*)*@_SMLLLN6Vector4appiE_152 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*)*@_SMLLLN6Vector4appiE_212 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*@_SMLFN6Vector4appiE(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*)*@_SMLLLN6Vector4appiE_153 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*)*@_SMLLLN6Vector4appiE_153 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@_SMLLLN6Vector3appE_156(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
p:
%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*%a,i8**%d,align 8
store i8*%b,i8**%c,align 8
%e=getelementptr inbounds i8,i8*%b,i64 -4
%f=bitcast i8*%e to i32*
%g=load i32,i32*%f,align 4
%h=and i32%g,268435455
%i=getelementptr inbounds i8,i8*%a,i64 12
%j=bitcast i8*%i to i32*
%k=load i32,i32*%j,align 4
%l=udiv i32%h,%k
%m=bitcast i8**%d to i8***
br label%n
n:
%o=phi i32[0,%p],[%ag,%W]
%q=load atomic i32,i32*@sml_check_flag unordered,align 4
%r=icmp eq i32%q,0
br i1%r,label%t,label%s
s:
call void@sml_check(i32 inreg%q)
br label%t
t:
%u=icmp slt i32%o,%l
br i1%u,label%w,label%v
v:
ret void
w:
%x=load i8*,i8**%d,align 8
%y=getelementptr inbounds i8,i8*%x,i64 12
%z=bitcast i8*%y to i32*
%A=load i32,i32*%z,align 4
%B=getelementptr inbounds i8,i8*%x,i64 8
%C=bitcast i8*%B to i32*
%D=load i32,i32*%C,align 4
%E=icmp eq i32%D,0
br i1%E,label%N,label%F
F:
%G=bitcast i8*%x to i8**
%H=load i8*,i8**%c,align 8
%I=mul i32%A,%o
%J=sext i32%I to i64
%K=getelementptr inbounds i8,i8*%H,i64%J
%L=bitcast i8*%K to i8**
%M=load i8*,i8**%L,align 8
br label%W
N:
%O=call i8*@sml_alloc(i32 inreg%A)#0
%P=getelementptr inbounds i8,i8*%O,i64 -4
%Q=bitcast i8*%P to i32*
store i32%A,i32*%Q,align 4
%R=load i8*,i8**%c,align 8
%S=mul i32%A,%o
%T=sext i32%S to i64
%U=getelementptr inbounds i8,i8*%R,i64%T
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%O,i8*%U,i32%A,i1 false)
%V=load i8**,i8***%m,align 8
br label%W
W:
%X=phi i8**[%G,%F],[%V,%N]
%Y=phi i8*[%M,%F],[%O,%N]
%Z=load i8*,i8**%X,align 8
%aa=getelementptr inbounds i8,i8*%Z,i64 16
%ab=bitcast i8*%aa to i8*(i8*,i8*)**
%ac=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%ab,align 8
%ad=bitcast i8*%Z to i8**
%ae=load i8*,i8**%ad,align 8
%af=call fastcc i8*%ac(i8*inreg%ae,i8*inreg%Y)
%ag=add nuw nsw i32%o,1
br label%n
}
define internal fastcc i8*@_SMLLLN6Vector3appE_157(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*)*@_SMLLLN6Vector3appE_156 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*)*@_SMLLLN6Vector3appE_214 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*@_SMLFN6Vector3appE(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*)*@_SMLLLN6Vector3appE_157 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*)*@_SMLLLN6Vector3appE_157 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*@_SMLLLN6Vector4mapiE_160(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 i32*
br label%p
l:
call void@sml_check(i32 inreg%h)
%m=bitcast i8**%c to i32**
%n=load i32*,i32**%m,align 8
%o=load i8*,i8**%f,align 8
br label%p
p:
%q=phi i8*[%o,%l],[%a,%j]
%r=phi i32*[%n,%l],[%k,%j]
%s=getelementptr inbounds i8,i8*%q,i64 12
%t=bitcast i8*%s to i32*
%u=load i32,i32*%t,align 4
%v=add i32%u,3
%w=sub i32 0,%u
%x=and i32%v,%w
%y=add i32%u,7
%z=add i32%y,%x
%A=and i32%z,-8
%B=lshr i32%x,3
%C=getelementptr inbounds i8,i8*%q,i64 8
%D=bitcast i8*%C to i32*
%E=load i32,i32*%D,align 4
%F=shl i32%E,%B
%G=or i32%A,4
%H=getelementptr inbounds i32,i32*%r,i64 -1
%I=load i32,i32*%H,align 4
%J=and i32%I,268435455
%K=udiv i32%J,%u
%L=getelementptr inbounds i8,i8*%q,i64 16
%M=bitcast i8*%L to i32*
%N=load i32,i32*%M,align 4
%O=getelementptr inbounds i8,i8*%q,i64 20
%P=bitcast i8*%O to i32*
%Q=load i32,i32*%P,align 4
%R=mul nsw i32%Q,%K
%S=call i8*@sml_alloc(i32 inreg%R)#0
%T=shl i32%N,28
%U=or i32%R,%T
%V=getelementptr inbounds i8,i8*%S,i64 -4
%W=bitcast i8*%V to i32*
store i32%U,i32*%W,align 4
store i8*%S,i8**%d,align 8
%X=icmp eq i32%N,0
br i1%X,label%Z,label%Y
Y:
call void@llvm.memset.p0i8.i32(i8*%S,i8 0,i32%R,i1 false)
br label%Z
Z:
%aa=bitcast i8**%f to i8***
%ab=or i32%A,1342177280
%ac=sext i32%x to i64
%ad=sext i32%A to i64
br label%ae
ae:
%af=phi i32[0,%Z],[%bu,%bt]
%ag=icmp slt i32%af,%K
br i1%ag,label%ah,label%bv
ah:
%ai=load i8*,i8**%f,align 8
%aj=getelementptr inbounds i8,i8*%ai,i64 12
%ak=bitcast i8*%aj to i32*
%al=load i32,i32*%ak,align 4
%am=getelementptr inbounds i8,i8*%ai,i64 8
%an=bitcast i8*%am to i32*
%ao=load i32,i32*%an,align 4
%ap=icmp eq i32%ao,0
br i1%ap,label%ay,label%aq
aq:
%ar=bitcast i8*%ai to i8**
%as=load i8*,i8**%c,align 8
%at=mul i32%al,%af
%au=sext i32%at to i64
%av=getelementptr inbounds i8,i8*%as,i64%au
%aw=bitcast i8*%av to i8**
%ax=load i8*,i8**%aw,align 8
br label%aO
ay:
%az=call i8*@sml_alloc(i32 inreg%al)#0
%aA=getelementptr inbounds i8,i8*%az,i64 -4
%aB=bitcast i8*%aA to i32*
store i32%al,i32*%aB,align 4
%aC=load i8*,i8**%c,align 8
%aD=mul i32%al,%af
%aE=sext i32%aD to i64
%aF=getelementptr inbounds i8,i8*%aC,i64%aE
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%az,i8*%aF,i32%al,i1 false)
%aG=load i8**,i8***%aa,align 8
%aH=bitcast i8**%aG to i8*
%aI=getelementptr inbounds i8,i8*%aH,i64 12
%aJ=bitcast i8*%aI to i32*
%aK=load i32,i32*%aJ,align 4
%aL=getelementptr inbounds i8*,i8**%aG,i64 1
%aM=bitcast i8**%aL to i32*
%aN=load i32,i32*%aM,align 4
br label%aO
aO:
%aP=phi i32[%aN,%ay],[%ao,%aq]
%aQ=phi i32[%aK,%ay],[%al,%aq]
%aR=phi i8**[%aG,%ay],[%ar,%aq]
%aS=phi i8*[%az,%ay],[%ax,%aq]
store i8*%aS,i8**%e,align 8
%aT=load i8*,i8**%aR,align 8
%aU=getelementptr inbounds i8,i8*%aT,i64 16
%aV=bitcast i8*%aU to i8*(i8*,i8*)**
%aW=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%aV,align 8
%aX=bitcast i8*%aT to i8**
%aY=load i8*,i8**%aX,align 8
store i8*%aY,i8**%g,align 8
%aZ=call i8*@sml_alloc(i32 inreg%G)#0
%a0=bitcast i8*%aZ to i32*
%a1=getelementptr inbounds i8,i8*%aZ,i64 -4
%a2=bitcast i8*%a1 to i32*
store i32%ab,i32*%a2,align 4
call void@llvm.memset.p0i8.i32(i8*%aZ,i8 0,i32%G,i1 false)
store i32%af,i32*%a0,align 4
%a3=icmp eq i32%aP,0
%a4=load i8*,i8**%e,align 8
store i8*null,i8**%e,align 8
%a5=getelementptr inbounds i8,i8*%aZ,i64%ac
br i1%a3,label%a6,label%a7
a6:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%a5,i8*%a4,i32%aQ,i1 false)
br label%a9
a7:
%a8=bitcast i8*%a5 to i8**
store i8*%a4,i8**%a8,align 8
br label%a9
a9:
%ba=getelementptr inbounds i8,i8*%aZ,i64%ad
%bb=bitcast i8*%ba to i32*
store i32%F,i32*%bb,align 4
%bc=load i8*,i8**%g,align 8
store i8*null,i8**%g,align 8
%bd=call fastcc i8*%aW(i8*inreg%bc,i8*inreg%aZ)
%be=load i8*,i8**%f,align 8
%bf=getelementptr inbounds i8,i8*%be,i64 20
%bg=bitcast i8*%bf to i32*
%bh=load i32,i32*%bg,align 4
%bi=getelementptr inbounds i8,i8*%be,i64 16
%bj=bitcast i8*%bi to i32*
%bk=load i32,i32*%bj,align 4
%bl=icmp eq i32%bk,0
%bm=load i8*,i8**%d,align 8
%bn=mul i32%bh,%af
%bo=sext i32%bn to i64
%bp=getelementptr inbounds i8,i8*%bm,i64%bo
br i1%bl,label%bs,label%bq
bq:
%br=bitcast i8*%bp to i8**
call void@sml_write(i8*inreg%bm,i8**inreg%br,i8*inreg%bd)#0
br label%bt
bs:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bp,i8*%bd,i32%bh,i1 false)
br label%bt
bt:
%bu=add nuw nsw i32%af,1
br label%ae
bv:
%bw=load i8*,i8**%d,align 8
ret i8*%bw
}
define internal fastcc i8*@_SMLLLN6Vector4mapiE_161(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=getelementptr inbounds i8,i8*%a,i64 8
%k=bitcast i8*%j to i32*
%l=load i32,i32*%k,align 4
%m=getelementptr inbounds i8,i8*%a,i64 12
%n=bitcast i8*%m to i32*
%o=load i32,i32*%n,align 4
%p=call i8*@sml_alloc(i32 inreg 28)#0
%q=getelementptr inbounds i8,i8*%p,i64 -4
%r=bitcast i8*%q to i32*
store i32 1342177304,i32*%r,align 4
store i8*%p,i8**%d,align 8
%s=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%t=bitcast i8*%p to i8**
store i8*%s,i8**%t,align 8
%u=getelementptr inbounds i8,i8*%p,i64 8
%v=bitcast i8*%u to i32*
store i32%f,i32*%v,align 4
%w=getelementptr inbounds i8,i8*%p,i64 12
%x=bitcast i8*%w to i32*
store i32%i,i32*%x,align 4
%y=getelementptr inbounds i8,i8*%p,i64 16
%z=bitcast i8*%y to i32*
store i32%l,i32*%z,align 4
%A=getelementptr inbounds i8,i8*%p,i64 20
%B=bitcast i8*%A to i32*
store i32%o,i32*%B,align 4
%C=getelementptr inbounds i8,i8*%p,i64 24
%D=bitcast i8*%C to i32*
store i32 1,i32*%D,align 4
%E=call i8*@sml_alloc(i32 inreg 28)#0
%F=getelementptr inbounds i8,i8*%E,i64 -4
%G=bitcast i8*%F to i32*
store i32 1342177304,i32*%G,align 4
%H=load i8*,i8**%d,align 8
%I=bitcast i8*%E to i8**
store i8*%H,i8**%I,align 8
%J=getelementptr inbounds i8,i8*%E,i64 8
%K=bitcast i8*%J to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector4mapiE_160 to void(...)*),void(...)**%K,align 8
%L=getelementptr inbounds i8,i8*%E,i64 16
%M=bitcast i8*%L to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector4mapiE_160 to void(...)*),void(...)**%M,align 8
%N=getelementptr inbounds i8,i8*%E,i64 24
%O=bitcast i8*%N to i32*
store i32 -2147483647,i32*%O,align 4
ret i8*%E
}
define fastcc i8*@_SMLFN6Vector4mapiE(i32 inreg%a,i32 inreg%b,i32 inreg%c,i32 inreg%d)#3 gc"smlsharp"{
%e=alloca i8*,align 8
call void@llvm.gcroot(i8**%e,i8*null)#0
%f=call i8*@sml_alloc(i32 inreg 20)#0
%g=bitcast i8*%f to i32*
%h=getelementptr inbounds i8,i8*%f,i64 -4
%i=bitcast i8*%h to i32*
store i32 1342177296,i32*%i,align 4
store i8*%f,i8**%e,align 8
store i32%a,i32*%g,align 4
%j=getelementptr inbounds i8,i8*%f,i64 4
%k=bitcast i8*%j to i32*
store i32%b,i32*%k,align 4
%l=getelementptr inbounds i8,i8*%f,i64 8
%m=bitcast i8*%l to i32*
store i32%c,i32*%m,align 4
%n=getelementptr inbounds i8,i8*%f,i64 12
%o=bitcast i8*%n to i32*
store i32%d,i32*%o,align 4
%p=getelementptr inbounds i8,i8*%f,i64 16
%q=bitcast i8*%p to i32*
store i32 0,i32*%q,align 4
%r=call i8*@sml_alloc(i32 inreg 28)#0
%s=getelementptr inbounds i8,i8*%r,i64 -4
%t=bitcast i8*%s to i32*
store i32 1342177304,i32*%t,align 4
%u=load i8*,i8**%e,align 8
%v=bitcast i8*%r to i8**
store i8*%u,i8**%v,align 8
%w=getelementptr inbounds i8,i8*%r,i64 8
%x=bitcast i8*%w to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector4mapiE_161 to void(...)*),void(...)**%x,align 8
%y=getelementptr inbounds i8,i8*%r,i64 16
%z=bitcast i8*%y to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector4mapiE_161 to void(...)*),void(...)**%z,align 8
%A=getelementptr inbounds i8,i8*%r,i64 24
%B=bitcast i8*%A to i32*
store i32 -2147483647,i32*%B,align 4
ret i8*%r
}
define internal fastcc i8*@_SMLLLN6Vector3mapE_164(i8*inreg%a,i8*inreg%b)#4 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**%e,align 8
store i8*%b,i8**%c,align 8
%f=load atomic i32,i32*@sml_check_flag unordered,align 4
%g=icmp eq i32%f,0
br i1%g,label%h,label%j
h:
%i=bitcast i8*%b to i32*
br label%n
j:
call void@sml_check(i32 inreg%f)
%k=bitcast i8**%c to i32**
%l=load i32*,i32**%k,align 8
%m=load i8*,i8**%e,align 8
br label%n
n:
%o=phi i8*[%m,%j],[%a,%h]
%p=phi i32*[%l,%j],[%i,%h]
%q=getelementptr inbounds i32,i32*%p,i64 -1
%r=load i32,i32*%q,align 4
%s=and i32%r,268435455
%t=getelementptr inbounds i8,i8*%o,i64 12
%u=bitcast i8*%t to i32*
%v=load i32,i32*%u,align 4
%w=udiv i32%s,%v
%x=getelementptr inbounds i8,i8*%o,i64 16
%y=bitcast i8*%x to i32*
%z=load i32,i32*%y,align 4
%A=getelementptr inbounds i8,i8*%o,i64 20
%B=bitcast i8*%A to i32*
%C=load i32,i32*%B,align 4
%D=mul nsw i32%C,%w
%E=call i8*@sml_alloc(i32 inreg%D)#0
%F=shl i32%z,28
%G=or i32%D,%F
%H=getelementptr inbounds i8,i8*%E,i64 -4
%I=bitcast i8*%H to i32*
store i32%G,i32*%I,align 4
store i8*%E,i8**%d,align 8
%J=icmp eq i32%z,0
br i1%J,label%L,label%K
K:
call void@llvm.memset.p0i8.i32(i8*%E,i8 0,i32%D,i1 false)
br label%L
L:
%M=bitcast i8**%e to i8***
br label%N
N:
%O=phi i32[0,%L],[%aQ,%aP]
%P=icmp slt i32%O,%w
br i1%P,label%Q,label%aR
Q:
%R=load i8*,i8**%e,align 8
%S=getelementptr inbounds i8,i8*%R,i64 12
%T=bitcast i8*%S to i32*
%U=load i32,i32*%T,align 4
%V=getelementptr inbounds i8,i8*%R,i64 8
%W=bitcast i8*%V to i32*
%X=load i32,i32*%W,align 4
%Y=icmp eq i32%X,0
br i1%Y,label%ah,label%Z
Z:
%aa=bitcast i8*%R to i8**
%ab=load i8*,i8**%c,align 8
%ac=mul i32%U,%O
%ad=sext i32%ac to i64
%ae=getelementptr inbounds i8,i8*%ab,i64%ad
%af=bitcast i8*%ae to i8**
%ag=load i8*,i8**%af,align 8
br label%aq
ah:
%ai=call i8*@sml_alloc(i32 inreg%U)#0
%aj=getelementptr inbounds i8,i8*%ai,i64 -4
%ak=bitcast i8*%aj to i32*
store i32%U,i32*%ak,align 4
%al=load i8*,i8**%c,align 8
%am=mul i32%U,%O
%an=sext i32%am to i64
%ao=getelementptr inbounds i8,i8*%al,i64%an
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%ai,i8*%ao,i32%U,i1 false)
%ap=load i8**,i8***%M,align 8
br label%aq
aq:
%ar=phi i8**[%aa,%Z],[%ap,%ah]
%as=phi i8*[%ag,%Z],[%ai,%ah]
%at=load i8*,i8**%ar,align 8
%au=getelementptr inbounds i8,i8*%at,i64 16
%av=bitcast i8*%au to i8*(i8*,i8*)**
%aw=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%av,align 8
%ax=bitcast i8*%at to i8**
%ay=load i8*,i8**%ax,align 8
%az=call fastcc i8*%aw(i8*inreg%ay,i8*inreg%as)
%aA=load i8*,i8**%e,align 8
%aB=getelementptr inbounds i8,i8*%aA,i64 20
%aC=bitcast i8*%aB to i32*
%aD=load i32,i32*%aC,align 4
%aE=getelementptr inbounds i8,i8*%aA,i64 16
%aF=bitcast i8*%aE to i32*
%aG=load i32,i32*%aF,align 4
%aH=icmp eq i32%aG,0
%aI=load i8*,i8**%d,align 8
%aJ=mul i32%aD,%O
%aK=sext i32%aJ to i64
%aL=getelementptr inbounds i8,i8*%aI,i64%aK
br i1%aH,label%aO,label%aM
aM:
%aN=bitcast i8*%aL to i8**
call void@sml_write(i8*inreg%aI,i8**inreg%aN,i8*inreg%az)#0
br label%aP
aO:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%aL,i8*%az,i32%aD,i1 false)
br label%aP
aP:
%aQ=add nuw nsw i32%O,1
br label%N
aR:
%aS=load i8*,i8**%d,align 8
ret i8*%aS
}
define internal fastcc i8*@_SMLLLN6Vector3mapE_165(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=getelementptr inbounds i8,i8*%a,i64 8
%k=bitcast i8*%j to i32*
%l=load i32,i32*%k,align 4
%m=getelementptr inbounds i8,i8*%a,i64 12
%n=bitcast i8*%m to i32*
%o=load i32,i32*%n,align 4
%p=call i8*@sml_alloc(i32 inreg 28)#0
%q=getelementptr inbounds i8,i8*%p,i64 -4
%r=bitcast i8*%q to i32*
store i32 1342177304,i32*%r,align 4
store i8*%p,i8**%d,align 8
%s=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%t=bitcast i8*%p to i8**
store i8*%s,i8**%t,align 8
%u=getelementptr inbounds i8,i8*%p,i64 8
%v=bitcast i8*%u to i32*
store i32%f,i32*%v,align 4
%w=getelementptr inbounds i8,i8*%p,i64 12
%x=bitcast i8*%w to i32*
store i32%i,i32*%x,align 4
%y=getelementptr inbounds i8,i8*%p,i64 16
%z=bitcast i8*%y to i32*
store i32%l,i32*%z,align 4
%A=getelementptr inbounds i8,i8*%p,i64 20
%B=bitcast i8*%A to i32*
store i32%o,i32*%B,align 4
%C=getelementptr inbounds i8,i8*%p,i64 24
%D=bitcast i8*%C to i32*
store i32 1,i32*%D,align 4
%E=call i8*@sml_alloc(i32 inreg 28)#0
%F=getelementptr inbounds i8,i8*%E,i64 -4
%G=bitcast i8*%F to i32*
store i32 1342177304,i32*%G,align 4
%H=load i8*,i8**%d,align 8
%I=bitcast i8*%E to i8**
store i8*%H,i8**%I,align 8
%J=getelementptr inbounds i8,i8*%E,i64 8
%K=bitcast i8*%J to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector3mapE_164 to void(...)*),void(...)**%K,align 8
%L=getelementptr inbounds i8,i8*%E,i64 16
%M=bitcast i8*%L to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector3mapE_164 to void(...)*),void(...)**%M,align 8
%N=getelementptr inbounds i8,i8*%E,i64 24
%O=bitcast i8*%N to i32*
store i32 -2147483647,i32*%O,align 4
ret i8*%E
}
define fastcc i8*@_SMLFN6Vector3mapE(i32 inreg%a,i32 inreg%b,i32 inreg%c,i32 inreg%d)#3 gc"smlsharp"{
%e=alloca i8*,align 8
call void@llvm.gcroot(i8**%e,i8*null)#0
%f=call i8*@sml_alloc(i32 inreg 20)#0
%g=bitcast i8*%f to i32*
%h=getelementptr inbounds i8,i8*%f,i64 -4
%i=bitcast i8*%h to i32*
store i32 1342177296,i32*%i,align 4
store i8*%f,i8**%e,align 8
store i32%a,i32*%g,align 4
%j=getelementptr inbounds i8,i8*%f,i64 4
%k=bitcast i8*%j to i32*
store i32%b,i32*%k,align 4
%l=getelementptr inbounds i8,i8*%f,i64 8
%m=bitcast i8*%l to i32*
store i32%c,i32*%m,align 4
%n=getelementptr inbounds i8,i8*%f,i64 12
%o=bitcast i8*%n to i32*
store i32%d,i32*%o,align 4
%p=getelementptr inbounds i8,i8*%f,i64 16
%q=bitcast i8*%p to i32*
store i32 0,i32*%q,align 4
%r=call i8*@sml_alloc(i32 inreg 28)#0
%s=getelementptr inbounds i8,i8*%r,i64 -4
%t=bitcast i8*%s to i32*
store i32 1342177304,i32*%t,align 4
%u=load i8*,i8**%e,align 8
%v=bitcast i8*%r to i8**
store i8*%u,i8**%v,align 8
%w=getelementptr inbounds i8,i8*%r,i64 8
%x=bitcast i8*%w to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector3mapE_165 to void(...)*),void(...)**%x,align 8
%y=getelementptr inbounds i8,i8*%r,i64 16
%z=bitcast i8*%y to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector3mapE_165 to void(...)*),void(...)**%z,align 8
%A=getelementptr inbounds i8,i8*%r,i64 24
%B=bitcast i8*%A to i32*
store i32 -2147483647,i32*%B,align 4
ret i8*%r
}
define internal fastcc i8*@_SMLLLN6Vector6foldliE_168(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 i32*
br label%p
l:
call void@sml_check(i32 inreg%h)
%m=bitcast i8**%c to i32**
%n=load i32*,i32**%m,align 8
%o=load i8*,i8**%f,align 8
br label%p
p:
%q=phi i8*[%o,%l],[%a,%j]
%r=phi i32*[%n,%l],[%k,%j]
%s=getelementptr inbounds i8,i8*%q,i64 28
%t=bitcast i8*%s to i32*
%u=load i32,i32*%t,align 4
%v=add i32%u,3
%w=sub i32 0,%u
%x=and i32%v,%w
%y=add i32%u,7
%z=add i32%y,%x
%A=and i32%z,-8
%B=lshr i32%x,3
%C=getelementptr inbounds i8,i8*%q,i64 24
%D=bitcast i8*%C to i32*
%E=load i32,i32*%D,align 4
%F=shl i32%E,%B
%G=or i32%A,4
%H=getelementptr inbounds i8,i8*%q,i64 20
%I=bitcast i8*%H to i32*
%J=load i32,i32*%I,align 4
%K=add i32%J,3
%L=sub i32 0,%J
%M=and i32%K,%L
%N=add i32%u,-1
%O=add i32%N,%J
%P=add i32%O,%M
%Q=and i32%P,%w
%R=add i32%y,%Q
%S=and i32%R,-8
%T=lshr i32%Q,3
%U=lshr i32%M,3
%V=sub nsw i32%T,%U
%W=shl i32%E,%V
%X=getelementptr inbounds i8,i8*%q,i64 16
%Y=bitcast i8*%X to i32*
%Z=load i32,i32*%Y,align 4
%aa=or i32%W,%Z
%ab=shl i32%aa,%U
%ac=or i32%S,4
%ad=getelementptr inbounds i32,i32*%r,i64 -1
%ae=load i32,i32*%ad,align 4
%af=and i32%ae,268435455
%ag=udiv i32%af,%J
%ah=icmp eq i32%E,0
br i1%ah,label%am,label%ai
ai:
%aj=getelementptr inbounds i8,i8*%q,i64 8
%ak=bitcast i8*%aj to i8**
%al=load i8*,i8**%ak,align 8
br label%ay
am:
%an=call i8*@sml_alloc(i32 inreg%u)#0
%ao=getelementptr inbounds i8,i8*%an,i64 -4
%ap=bitcast i8*%ao to i32*
store i32%u,i32*%ap,align 4
%aq=load i8*,i8**%f,align 8
%ar=getelementptr inbounds i8,i8*%aq,i64 8
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%an,i8*%ar,i32%u,i1 false)
%as=getelementptr inbounds i8,i8*%aq,i64 28
%at=bitcast i8*%as to i32*
%au=load i32,i32*%at,align 4
%av=getelementptr inbounds i8,i8*%aq,i64 24
%aw=bitcast i8*%av to i32*
%ax=load i32,i32*%aw,align 4
br label%ay
ay:
%az=phi i32[%ax,%am],[%E,%ai]
%aA=phi i32[%au,%am],[%u,%ai]
%aB=phi i8*[%an,%am],[%al,%ai]
store i8*%aB,i8**%d,align 8
%aC=call i8*@sml_alloc(i32 inreg%G)#0
%aD=or i32%A,1342177280
%aE=bitcast i8*%aC to i32*
%aF=getelementptr inbounds i8,i8*%aC,i64 -4
%aG=bitcast i8*%aF to i32*
store i32%aD,i32*%aG,align 4
call void@llvm.memset.p0i8.i32(i8*%aC,i8 0,i32%G,i1 false)
store i32 0,i32*%aE,align 4
%aH=icmp eq i32%az,0
%aI=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%aJ=sext i32%x to i64
%aK=getelementptr inbounds i8,i8*%aC,i64%aJ
br i1%aH,label%aL,label%aM
aL:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%aK,i8*%aI,i32%aA,i1 false)
br label%aO
aM:
%aN=bitcast i8*%aK to i8**
store i8*%aI,i8**%aN,align 8
br label%aO
aO:
%aP=sext i32%A to i64
%aQ=getelementptr inbounds i8,i8*%aC,i64%aP
%aR=bitcast i8*%aQ to i32*
store i32%F,i32*%aR,align 4
%aS=bitcast i8**%f to i8***
%aT=or i32%S,1342177280
%aU=sext i32%M to i64
%aV=sext i32%Q to i64
%aW=sext i32%S to i64
br label%aX
aX:
%aY=phi i8*[%cG,%cQ],[%aC,%aO]
store i8*%aY,i8**%d,align 8
%aZ=bitcast i8*%aY to i32*
%a0=load i32,i32*%aZ,align 4
%a1=load i8*,i8**%f,align 8
%a2=getelementptr inbounds i8,i8*%a1,i64 24
%a3=bitcast i8*%a2 to i32*
%a4=load i32,i32*%a3,align 4
%a5=icmp eq i32%a4,0
br i1%a5,label%ba,label%a6
a6:
store i8*null,i8**%d,align 8
%a7=getelementptr inbounds i8,i8*%aY,i64%aJ
%a8=bitcast i8*%a7 to i8**
%a9=load i8*,i8**%a8,align 8
br label%bj
ba:
%bb=getelementptr inbounds i8,i8*%a1,i64 28
%bc=bitcast i8*%bb to i32*
%bd=load i32,i32*%bc,align 4
%be=call i8*@sml_alloc(i32 inreg%bd)#0
%bf=getelementptr inbounds i8,i8*%be,i64 -4
%bg=bitcast i8*%bf to i32*
store i32%bd,i32*%bg,align 4
%bh=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%bi=getelementptr inbounds i8,i8*%bh,i64%aJ
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%be,i8*%bi,i32%bd,i1 false)
br label%bj
bj:
%bk=phi i8*[%be,%ba],[%a9,%a6]
store i8*%bk,i8**%d,align 8
%bl=icmp slt i32%a0,%ag
br i1%bl,label%bn,label%bm
bm:
ret i8*%bk
bn:
%bo=load i8*,i8**%f,align 8
%bp=getelementptr inbounds i8,i8*%bo,i64 20
%bq=bitcast i8*%bp to i32*
%br=load i32,i32*%bq,align 4
%bs=getelementptr inbounds i8,i8*%bo,i64 16
%bt=bitcast i8*%bs to i32*
%bu=load i32,i32*%bt,align 4
%bv=icmp eq i32%bu,0
br i1%bv,label%bE,label%bw
bw:
%bx=bitcast i8*%bo to i8**
%by=load i8*,i8**%c,align 8
%bz=mul i32%br,%a0
%bA=sext i32%bz to i64
%bB=getelementptr inbounds i8,i8*%by,i64%bA
%bC=bitcast i8*%bB to i8**
%bD=load i8*,i8**%bC,align 8
br label%bU
bE:
%bF=call i8*@sml_alloc(i32 inreg%br)#0
%bG=getelementptr inbounds i8,i8*%bF,i64 -4
%bH=bitcast i8*%bG to i32*
store i32%br,i32*%bH,align 4
%bI=load i8*,i8**%c,align 8
%bJ=mul i32%br,%a0
%bK=sext i32%bJ to i64
%bL=getelementptr inbounds i8,i8*%bI,i64%bK
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bF,i8*%bL,i32%br,i1 false)
%bM=load i8**,i8***%aS,align 8
%bN=bitcast i8**%bM to i8*
%bO=getelementptr inbounds i8,i8*%bN,i64 20
%bP=bitcast i8*%bO to i32*
%bQ=load i32,i32*%bP,align 4
%bR=getelementptr inbounds i8*,i8**%bM,i64 2
%bS=bitcast i8**%bR to i32*
%bT=load i32,i32*%bS,align 4
br label%bU
bU:
%bV=phi i32[%bT,%bE],[%bu,%bw]
%bW=phi i32[%bQ,%bE],[%br,%bw]
%bX=phi i8*[%bN,%bE],[%bo,%bw]
%bY=phi i8**[%bM,%bE],[%bx,%bw]
%bZ=phi i8*[%bF,%bE],[%bD,%bw]
store i8*%bZ,i8**%e,align 8
%b0=add nsw i32%a0,1
%b1=load i8*,i8**%bY,align 8
%b2=getelementptr inbounds i8,i8*%b1,i64 16
%b3=bitcast i8*%b2 to i8*(i8*,i8*)**
%b4=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%b3,align 8
%b5=bitcast i8*%b1 to i8**
%b6=load i8*,i8**%b5,align 8
store i8*%b6,i8**%g,align 8
%b7=getelementptr inbounds i8,i8*%bX,i64 28
%b8=bitcast i8*%b7 to i32*
%b9=load i32,i32*%b8,align 4
%ca=getelementptr inbounds i8,i8*%bX,i64 24
%cb=bitcast i8*%ca to i32*
%cc=load i32,i32*%cb,align 4
%cd=call i8*@sml_alloc(i32 inreg%ac)#0
%ce=bitcast i8*%cd to i32*
%cf=getelementptr inbounds i8,i8*%cd,i64 -4
%cg=bitcast i8*%cf to i32*
store i32%aT,i32*%cg,align 4
call void@llvm.memset.p0i8.i32(i8*%cd,i8 0,i32%ac,i1 false)
store i32%a0,i32*%ce,align 4
%ch=icmp eq i32%bV,0
%ci=load i8*,i8**%e,align 8
store i8*null,i8**%e,align 8
%cj=getelementptr inbounds i8,i8*%cd,i64%aU
br i1%ch,label%ck,label%cl
ck:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cj,i8*%ci,i32%bW,i1 false)
br label%cn
cl:
%cm=bitcast i8*%cj to i8**
store i8*%ci,i8**%cm,align 8
br label%cn
cn:
%co=icmp eq i32%cc,0
%cp=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%cq=getelementptr inbounds i8,i8*%cd,i64%aV
br i1%co,label%cr,label%cs
cr:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cq,i8*%cp,i32%b9,i1 false)
br label%cu
cs:
%ct=bitcast i8*%cq to i8**
store i8*%cp,i8**%ct,align 8
br label%cu
cu:
%cv=getelementptr inbounds i8,i8*%cd,i64%aW
%cw=bitcast i8*%cv to i32*
store i32%ab,i32*%cw,align 4
%cx=load i8*,i8**%g,align 8
store i8*null,i8**%g,align 8
%cy=call fastcc i8*%b4(i8*inreg%cx,i8*inreg%cd)
store i8*%cy,i8**%d,align 8
%cz=load i8*,i8**%f,align 8
%cA=getelementptr inbounds i8,i8*%cz,i64 28
%cB=bitcast i8*%cA to i32*
%cC=load i32,i32*%cB,align 4
%cD=getelementptr inbounds i8,i8*%cz,i64 24
%cE=bitcast i8*%cD to i32*
%cF=load i32,i32*%cE,align 4
%cG=call i8*@sml_alloc(i32 inreg%G)#0
%cH=bitcast i8*%cG to i32*
%cI=getelementptr inbounds i8,i8*%cG,i64 -4
%cJ=bitcast i8*%cI to i32*
store i32%aD,i32*%cJ,align 4
call void@llvm.memset.p0i8.i32(i8*%cG,i8 0,i32%G,i1 false)
store i32%b0,i32*%cH,align 4
%cK=icmp eq i32%cF,0
%cL=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%cM=getelementptr inbounds i8,i8*%cG,i64%aJ
br i1%cK,label%cN,label%cO
cN:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cM,i8*%cL,i32%cC,i1 false)
br label%cQ
cO:
%cP=bitcast i8*%cM to i8**
store i8*%cL,i8**%cP,align 8
br label%cQ
cQ:
%cR=getelementptr inbounds i8,i8*%cG,i64%aP
%cS=bitcast i8*%cR to i32*
store i32%F,i32*%cS,align 4
br label%aX
}
define internal fastcc i8*@_SMLLLN6Vector6foldliE_169(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*%b,i8**%c,align 8
%f=getelementptr inbounds i8,i8*%a,i64 16
%g=bitcast i8*%f to i32*
%h=load i32,i32*%g,align 4
%i=shl i32%h,1
%j=or i32%i,1
%k=bitcast i8*%a to i8**
%l=load i8*,i8**%k,align 8
store i8*%l,i8**%d,align 8
%m=getelementptr inbounds i8,i8*%a,i64 20
%n=bitcast i8*%m to i32*
%o=load i32,i32*%n,align 4
%p=getelementptr inbounds i8,i8*%a,i64 8
%q=bitcast i8*%p to i32*
%r=load i32,i32*%q,align 4
%s=getelementptr inbounds i8,i8*%a,i64 12
%t=bitcast i8*%s to i32*
%u=load i32,i32*%t,align 4
%v=call i8*@sml_alloc(i32 inreg 36)#0
%w=getelementptr inbounds i8,i8*%v,i64 -4
%x=bitcast i8*%w to i32*
store i32 1342177312,i32*%x,align 4
store i8*%v,i8**%e,align 8
%y=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%z=bitcast i8*%v to i8**
store i8*%y,i8**%z,align 8
%A=icmp eq i32%h,0
%B=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%C=getelementptr inbounds i8,i8*%v,i64 8
br i1%A,label%D,label%E
D:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%C,i8*%B,i32%o,i1 false)
br label%G
E:
%F=bitcast i8*%C to i8**
store i8*%B,i8**%F,align 8
br label%G
G:
%H=getelementptr inbounds i8,i8*%v,i64 16
%I=bitcast i8*%H to i32*
store i32%r,i32*%I,align 4
%J=getelementptr inbounds i8,i8*%v,i64 20
%K=bitcast i8*%J to i32*
store i32%u,i32*%K,align 4
%L=getelementptr inbounds i8,i8*%v,i64 24
%M=bitcast i8*%L to i32*
store i32%h,i32*%M,align 4
%N=getelementptr inbounds i8,i8*%v,i64 28
%O=bitcast i8*%N to i32*
store i32%o,i32*%O,align 4
%P=getelementptr inbounds i8,i8*%v,i64 32
%Q=bitcast i8*%P to i32*
store i32%j,i32*%Q,align 4
%R=call i8*@sml_alloc(i32 inreg 28)#0
%S=getelementptr inbounds i8,i8*%R,i64 -4
%T=bitcast i8*%S to i32*
store i32 1342177304,i32*%T,align 4
%U=load i8*,i8**%e,align 8
%V=bitcast i8*%R to i8**
store i8*%U,i8**%V,align 8
%W=getelementptr inbounds i8,i8*%R,i64 8
%X=bitcast i8*%W to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldliE_168 to void(...)*),void(...)**%X,align 8
%Y=getelementptr inbounds i8,i8*%R,i64 16
%Z=bitcast i8*%Y to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldliE_168 to void(...)*),void(...)**%Z,align 8
%aa=getelementptr inbounds i8,i8*%R,i64 24
%ab=bitcast i8*%aa to i32*
store i32 1,i32*%ab,align 4
ret i8*%R
}
define internal fastcc i8*@_SMLLLN6Vector6foldliE_170(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=getelementptr inbounds i8,i8*%a,i64 8
%k=bitcast i8*%j to i32*
%l=load i32,i32*%k,align 4
%m=getelementptr inbounds i8,i8*%a,i64 12
%n=bitcast i8*%m to i32*
%o=load i32,i32*%n,align 4
%p=call i8*@sml_alloc(i32 inreg 28)#0
%q=getelementptr inbounds i8,i8*%p,i64 -4
%r=bitcast i8*%q to i32*
store i32 1342177304,i32*%r,align 4
store i8*%p,i8**%d,align 8
%s=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%t=bitcast i8*%p to i8**
store i8*%s,i8**%t,align 8
%u=getelementptr inbounds i8,i8*%p,i64 8
%v=bitcast i8*%u to i32*
store i32%f,i32*%v,align 4
%w=getelementptr inbounds i8,i8*%p,i64 12
%x=bitcast i8*%w to i32*
store i32%i,i32*%x,align 4
%y=getelementptr inbounds i8,i8*%p,i64 16
%z=bitcast i8*%y to i32*
store i32%l,i32*%z,align 4
%A=getelementptr inbounds i8,i8*%p,i64 20
%B=bitcast i8*%A to i32*
store i32%o,i32*%B,align 4
%C=getelementptr inbounds i8,i8*%p,i64 24
%D=bitcast i8*%C to i32*
store i32 1,i32*%D,align 4
%E=call i8*@sml_alloc(i32 inreg 28)#0
%F=getelementptr inbounds i8,i8*%E,i64 -4
%G=bitcast i8*%F to i32*
store i32 1342177304,i32*%G,align 4
%H=load i8*,i8**%d,align 8
%I=bitcast i8*%E to i8**
store i8*%H,i8**%I,align 8
%J=getelementptr inbounds i8,i8*%E,i64 8
%K=bitcast i8*%J to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldliE_169 to void(...)*),void(...)**%K,align 8
%L=getelementptr inbounds i8,i8*%E,i64 16
%M=bitcast i8*%L to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldliE_169 to void(...)*),void(...)**%M,align 8
%N=getelementptr inbounds i8,i8*%E,i64 24
%O=bitcast i8*%N to i32*
store i32 1,i32*%O,align 4
ret i8*%E
}
define fastcc i8*@_SMLFN6Vector6foldliE(i32 inreg%a,i32 inreg%b,i32 inreg%c,i32 inreg%d)#3 gc"smlsharp"{
%e=alloca i8*,align 8
call void@llvm.gcroot(i8**%e,i8*null)#0
%f=call i8*@sml_alloc(i32 inreg 20)#0
%g=bitcast i8*%f to i32*
%h=getelementptr inbounds i8,i8*%f,i64 -4
%i=bitcast i8*%h to i32*
store i32 1342177296,i32*%i,align 4
store i8*%f,i8**%e,align 8
store i32%a,i32*%g,align 4
%j=getelementptr inbounds i8,i8*%f,i64 4
%k=bitcast i8*%j to i32*
store i32%b,i32*%k,align 4
%l=getelementptr inbounds i8,i8*%f,i64 8
%m=bitcast i8*%l to i32*
store i32%c,i32*%m,align 4
%n=getelementptr inbounds i8,i8*%f,i64 12
%o=bitcast i8*%n to i32*
store i32%d,i32*%o,align 4
%p=getelementptr inbounds i8,i8*%f,i64 16
%q=bitcast i8*%p to i32*
store i32 0,i32*%q,align 4
%r=call i8*@sml_alloc(i32 inreg 28)#0
%s=getelementptr inbounds i8,i8*%r,i64 -4
%t=bitcast i8*%s to i32*
store i32 1342177304,i32*%t,align 4
%u=load i8*,i8**%e,align 8
%v=bitcast i8*%r to i8**
store i8*%u,i8**%v,align 8
%w=getelementptr inbounds i8,i8*%r,i64 8
%x=bitcast i8*%w to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldliE_170 to void(...)*),void(...)**%x,align 8
%y=getelementptr inbounds i8,i8*%r,i64 16
%z=bitcast i8*%y to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldliE_170 to void(...)*),void(...)**%z,align 8
%A=getelementptr inbounds i8,i8*%r,i64 24
%B=bitcast i8*%A to i32*
store i32 -2147483647,i32*%B,align 4
ret i8*%r
}
define internal fastcc i8*@_SMLLLN6Vector6foldriE_173(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 i32*
br label%p
l:
call void@sml_check(i32 inreg%h)
%m=bitcast i8**%c to i32**
%n=load i32*,i32**%m,align 8
%o=load i8*,i8**%f,align 8
br label%p
p:
%q=phi i8*[%o,%l],[%a,%j]
%r=phi i32*[%n,%l],[%k,%j]
%s=getelementptr inbounds i8,i8*%q,i64 28
%t=bitcast i8*%s to i32*
%u=load i32,i32*%t,align 4
%v=add i32%u,3
%w=sub i32 0,%u
%x=and i32%v,%w
%y=add i32%u,7
%z=add i32%y,%x
%A=and i32%z,-8
%B=lshr i32%x,3
%C=getelementptr inbounds i8,i8*%q,i64 24
%D=bitcast i8*%C to i32*
%E=load i32,i32*%D,align 4
%F=shl i32%E,%B
%G=or i32%A,4
%H=getelementptr inbounds i8,i8*%q,i64 20
%I=bitcast i8*%H to i32*
%J=load i32,i32*%I,align 4
%K=add i32%J,3
%L=sub i32 0,%J
%M=and i32%K,%L
%N=add i32%u,-1
%O=add i32%N,%J
%P=add i32%O,%M
%Q=and i32%P,%w
%R=add i32%y,%Q
%S=and i32%R,-8
%T=lshr i32%Q,3
%U=lshr i32%M,3
%V=sub nsw i32%T,%U
%W=shl i32%E,%V
%X=getelementptr inbounds i8,i8*%q,i64 16
%Y=bitcast i8*%X to i32*
%Z=load i32,i32*%Y,align 4
%aa=or i32%W,%Z
%ab=shl i32%aa,%U
%ac=or i32%S,4
%ad=getelementptr inbounds i32,i32*%r,i64 -1
%ae=load i32,i32*%ad,align 4
%af=and i32%ae,268435455
%ag=udiv i32%af,%J
%ah=add nsw i32%ag,-1
%ai=icmp eq i32%E,0
br i1%ai,label%an,label%aj
aj:
%ak=getelementptr inbounds i8,i8*%q,i64 8
%al=bitcast i8*%ak to i8**
%am=load i8*,i8**%al,align 8
br label%az
an:
%ao=call i8*@sml_alloc(i32 inreg%u)#0
%ap=getelementptr inbounds i8,i8*%ao,i64 -4
%aq=bitcast i8*%ap to i32*
store i32%u,i32*%aq,align 4
%ar=load i8*,i8**%f,align 8
%as=getelementptr inbounds i8,i8*%ar,i64 8
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%ao,i8*%as,i32%u,i1 false)
%at=getelementptr inbounds i8,i8*%ar,i64 28
%au=bitcast i8*%at to i32*
%av=load i32,i32*%au,align 4
%aw=getelementptr inbounds i8,i8*%ar,i64 24
%ax=bitcast i8*%aw to i32*
%ay=load i32,i32*%ax,align 4
br label%az
az:
%aA=phi i32[%ay,%an],[%E,%aj]
%aB=phi i32[%av,%an],[%u,%aj]
%aC=phi i8*[%ao,%an],[%am,%aj]
store i8*%aC,i8**%d,align 8
%aD=call i8*@sml_alloc(i32 inreg%G)#0
%aE=or i32%A,1342177280
%aF=bitcast i8*%aD to i32*
%aG=getelementptr inbounds i8,i8*%aD,i64 -4
%aH=bitcast i8*%aG to i32*
store i32%aE,i32*%aH,align 4
call void@llvm.memset.p0i8.i32(i8*%aD,i8 0,i32%G,i1 false)
store i32%ah,i32*%aF,align 4
%aI=icmp eq i32%aA,0
%aJ=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%aK=sext i32%x to i64
%aL=getelementptr inbounds i8,i8*%aD,i64%aK
br i1%aI,label%aM,label%aN
aM:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%aL,i8*%aJ,i32%aB,i1 false)
br label%aP
aN:
%aO=bitcast i8*%aL to i8**
store i8*%aJ,i8**%aO,align 8
br label%aP
aP:
%aQ=sext i32%A to i64
%aR=getelementptr inbounds i8,i8*%aD,i64%aQ
%aS=bitcast i8*%aR to i32*
store i32%F,i32*%aS,align 4
%aT=bitcast i8**%f to i8***
%aU=or i32%S,1342177280
%aV=sext i32%M to i64
%aW=sext i32%Q to i64
%aX=sext i32%S to i64
br label%aY
aY:
%aZ=phi i8*[%cH,%cR],[%aD,%aP]
store i8*%aZ,i8**%d,align 8
%a0=bitcast i8*%aZ to i32*
%a1=load i32,i32*%a0,align 4
%a2=load i8*,i8**%f,align 8
%a3=getelementptr inbounds i8,i8*%a2,i64 24
%a4=bitcast i8*%a3 to i32*
%a5=load i32,i32*%a4,align 4
%a6=icmp eq i32%a5,0
br i1%a6,label%bb,label%a7
a7:
store i8*null,i8**%d,align 8
%a8=getelementptr inbounds i8,i8*%aZ,i64%aK
%a9=bitcast i8*%a8 to i8**
%ba=load i8*,i8**%a9,align 8
br label%bk
bb:
%bc=getelementptr inbounds i8,i8*%a2,i64 28
%bd=bitcast i8*%bc to i32*
%be=load i32,i32*%bd,align 4
%bf=call i8*@sml_alloc(i32 inreg%be)#0
%bg=getelementptr inbounds i8,i8*%bf,i64 -4
%bh=bitcast i8*%bg to i32*
store i32%be,i32*%bh,align 4
%bi=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%bj=getelementptr inbounds i8,i8*%bi,i64%aK
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bf,i8*%bj,i32%be,i1 false)
br label%bk
bk:
%bl=phi i8*[%bf,%bb],[%ba,%a7]
store i8*%bl,i8**%d,align 8
%bm=icmp sgt i32%a1,-1
br i1%bm,label%bo,label%bn
bn:
ret i8*%bl
bo:
%bp=load i8*,i8**%f,align 8
%bq=getelementptr inbounds i8,i8*%bp,i64 20
%br=bitcast i8*%bq to i32*
%bs=load i32,i32*%br,align 4
%bt=getelementptr inbounds i8,i8*%bp,i64 16
%bu=bitcast i8*%bt to i32*
%bv=load i32,i32*%bu,align 4
%bw=icmp eq i32%bv,0
br i1%bw,label%bF,label%bx
bx:
%by=bitcast i8*%bp to i8**
%bz=load i8*,i8**%c,align 8
%bA=mul i32%bs,%a1
%bB=sext i32%bA to i64
%bC=getelementptr inbounds i8,i8*%bz,i64%bB
%bD=bitcast i8*%bC to i8**
%bE=load i8*,i8**%bD,align 8
br label%bV
bF:
%bG=call i8*@sml_alloc(i32 inreg%bs)#0
%bH=getelementptr inbounds i8,i8*%bG,i64 -4
%bI=bitcast i8*%bH to i32*
store i32%bs,i32*%bI,align 4
%bJ=load i8*,i8**%c,align 8
%bK=mul i32%bs,%a1
%bL=sext i32%bK to i64
%bM=getelementptr inbounds i8,i8*%bJ,i64%bL
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bG,i8*%bM,i32%bs,i1 false)
%bN=load i8**,i8***%aT,align 8
%bO=bitcast i8**%bN to i8*
%bP=getelementptr inbounds i8,i8*%bO,i64 20
%bQ=bitcast i8*%bP to i32*
%bR=load i32,i32*%bQ,align 4
%bS=getelementptr inbounds i8*,i8**%bN,i64 2
%bT=bitcast i8**%bS to i32*
%bU=load i32,i32*%bT,align 4
br label%bV
bV:
%bW=phi i32[%bU,%bF],[%bv,%bx]
%bX=phi i32[%bR,%bF],[%bs,%bx]
%bY=phi i8*[%bO,%bF],[%bp,%bx]
%bZ=phi i8**[%bN,%bF],[%by,%bx]
%b0=phi i8*[%bG,%bF],[%bE,%bx]
store i8*%b0,i8**%e,align 8
%b1=add nsw i32%a1,-1
%b2=load i8*,i8**%bZ,align 8
%b3=getelementptr inbounds i8,i8*%b2,i64 16
%b4=bitcast i8*%b3 to i8*(i8*,i8*)**
%b5=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%b4,align 8
%b6=bitcast i8*%b2 to i8**
%b7=load i8*,i8**%b6,align 8
store i8*%b7,i8**%g,align 8
%b8=getelementptr inbounds i8,i8*%bY,i64 28
%b9=bitcast i8*%b8 to i32*
%ca=load i32,i32*%b9,align 4
%cb=getelementptr inbounds i8,i8*%bY,i64 24
%cc=bitcast i8*%cb to i32*
%cd=load i32,i32*%cc,align 4
%ce=call i8*@sml_alloc(i32 inreg%ac)#0
%cf=bitcast i8*%ce to i32*
%cg=getelementptr inbounds i8,i8*%ce,i64 -4
%ch=bitcast i8*%cg to i32*
store i32%aU,i32*%ch,align 4
call void@llvm.memset.p0i8.i32(i8*%ce,i8 0,i32%ac,i1 false)
store i32%a1,i32*%cf,align 4
%ci=icmp eq i32%bW,0
%cj=load i8*,i8**%e,align 8
store i8*null,i8**%e,align 8
%ck=getelementptr inbounds i8,i8*%ce,i64%aV
br i1%ci,label%cl,label%cm
cl:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%ck,i8*%cj,i32%bX,i1 false)
br label%co
cm:
%cn=bitcast i8*%ck to i8**
store i8*%cj,i8**%cn,align 8
br label%co
co:
%cp=icmp eq i32%cd,0
%cq=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%cr=getelementptr inbounds i8,i8*%ce,i64%aW
br i1%cp,label%cs,label%ct
cs:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cr,i8*%cq,i32%ca,i1 false)
br label%cv
ct:
%cu=bitcast i8*%cr to i8**
store i8*%cq,i8**%cu,align 8
br label%cv
cv:
%cw=getelementptr inbounds i8,i8*%ce,i64%aX
%cx=bitcast i8*%cw to i32*
store i32%ab,i32*%cx,align 4
%cy=load i8*,i8**%g,align 8
store i8*null,i8**%g,align 8
%cz=call fastcc i8*%b5(i8*inreg%cy,i8*inreg%ce)
store i8*%cz,i8**%d,align 8
%cA=load i8*,i8**%f,align 8
%cB=getelementptr inbounds i8,i8*%cA,i64 28
%cC=bitcast i8*%cB to i32*
%cD=load i32,i32*%cC,align 4
%cE=getelementptr inbounds i8,i8*%cA,i64 24
%cF=bitcast i8*%cE to i32*
%cG=load i32,i32*%cF,align 4
%cH=call i8*@sml_alloc(i32 inreg%G)#0
%cI=bitcast i8*%cH to i32*
%cJ=getelementptr inbounds i8,i8*%cH,i64 -4
%cK=bitcast i8*%cJ to i32*
store i32%aE,i32*%cK,align 4
call void@llvm.memset.p0i8.i32(i8*%cH,i8 0,i32%G,i1 false)
store i32%b1,i32*%cI,align 4
%cL=icmp eq i32%cG,0
%cM=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%cN=getelementptr inbounds i8,i8*%cH,i64%aK
br i1%cL,label%cO,label%cP
cO:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cN,i8*%cM,i32%cD,i1 false)
br label%cR
cP:
%cQ=bitcast i8*%cN to i8**
store i8*%cM,i8**%cQ,align 8
br label%cR
cR:
%cS=getelementptr inbounds i8,i8*%cH,i64%aQ
%cT=bitcast i8*%cS to i32*
store i32%F,i32*%cT,align 4
br label%aY
}
define internal fastcc i8*@_SMLLLN6Vector6foldriE_174(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*%b,i8**%c,align 8
%f=getelementptr inbounds i8,i8*%a,i64 16
%g=bitcast i8*%f to i32*
%h=load i32,i32*%g,align 4
%i=shl i32%h,1
%j=or i32%i,1
%k=bitcast i8*%a to i8**
%l=load i8*,i8**%k,align 8
store i8*%l,i8**%d,align 8
%m=getelementptr inbounds i8,i8*%a,i64 20
%n=bitcast i8*%m to i32*
%o=load i32,i32*%n,align 4
%p=getelementptr inbounds i8,i8*%a,i64 8
%q=bitcast i8*%p to i32*
%r=load i32,i32*%q,align 4
%s=getelementptr inbounds i8,i8*%a,i64 12
%t=bitcast i8*%s to i32*
%u=load i32,i32*%t,align 4
%v=call i8*@sml_alloc(i32 inreg 36)#0
%w=getelementptr inbounds i8,i8*%v,i64 -4
%x=bitcast i8*%w to i32*
store i32 1342177312,i32*%x,align 4
store i8*%v,i8**%e,align 8
%y=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%z=bitcast i8*%v to i8**
store i8*%y,i8**%z,align 8
%A=icmp eq i32%h,0
%B=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%C=getelementptr inbounds i8,i8*%v,i64 8
br i1%A,label%D,label%E
D:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%C,i8*%B,i32%o,i1 false)
br label%G
E:
%F=bitcast i8*%C to i8**
store i8*%B,i8**%F,align 8
br label%G
G:
%H=getelementptr inbounds i8,i8*%v,i64 16
%I=bitcast i8*%H to i32*
store i32%r,i32*%I,align 4
%J=getelementptr inbounds i8,i8*%v,i64 20
%K=bitcast i8*%J to i32*
store i32%u,i32*%K,align 4
%L=getelementptr inbounds i8,i8*%v,i64 24
%M=bitcast i8*%L to i32*
store i32%h,i32*%M,align 4
%N=getelementptr inbounds i8,i8*%v,i64 28
%O=bitcast i8*%N to i32*
store i32%o,i32*%O,align 4
%P=getelementptr inbounds i8,i8*%v,i64 32
%Q=bitcast i8*%P to i32*
store i32%j,i32*%Q,align 4
%R=call i8*@sml_alloc(i32 inreg 28)#0
%S=getelementptr inbounds i8,i8*%R,i64 -4
%T=bitcast i8*%S to i32*
store i32 1342177304,i32*%T,align 4
%U=load i8*,i8**%e,align 8
%V=bitcast i8*%R to i8**
store i8*%U,i8**%V,align 8
%W=getelementptr inbounds i8,i8*%R,i64 8
%X=bitcast i8*%W to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldriE_173 to void(...)*),void(...)**%X,align 8
%Y=getelementptr inbounds i8,i8*%R,i64 16
%Z=bitcast i8*%Y to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldriE_173 to void(...)*),void(...)**%Z,align 8
%aa=getelementptr inbounds i8,i8*%R,i64 24
%ab=bitcast i8*%aa to i32*
store i32 1,i32*%ab,align 4
ret i8*%R
}
define internal fastcc i8*@_SMLLLN6Vector6foldriE_175(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=getelementptr inbounds i8,i8*%a,i64 8
%k=bitcast i8*%j to i32*
%l=load i32,i32*%k,align 4
%m=getelementptr inbounds i8,i8*%a,i64 12
%n=bitcast i8*%m to i32*
%o=load i32,i32*%n,align 4
%p=call i8*@sml_alloc(i32 inreg 28)#0
%q=getelementptr inbounds i8,i8*%p,i64 -4
%r=bitcast i8*%q to i32*
store i32 1342177304,i32*%r,align 4
store i8*%p,i8**%d,align 8
%s=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%t=bitcast i8*%p to i8**
store i8*%s,i8**%t,align 8
%u=getelementptr inbounds i8,i8*%p,i64 8
%v=bitcast i8*%u to i32*
store i32%f,i32*%v,align 4
%w=getelementptr inbounds i8,i8*%p,i64 12
%x=bitcast i8*%w to i32*
store i32%i,i32*%x,align 4
%y=getelementptr inbounds i8,i8*%p,i64 16
%z=bitcast i8*%y to i32*
store i32%l,i32*%z,align 4
%A=getelementptr inbounds i8,i8*%p,i64 20
%B=bitcast i8*%A to i32*
store i32%o,i32*%B,align 4
%C=getelementptr inbounds i8,i8*%p,i64 24
%D=bitcast i8*%C to i32*
store i32 1,i32*%D,align 4
%E=call i8*@sml_alloc(i32 inreg 28)#0
%F=getelementptr inbounds i8,i8*%E,i64 -4
%G=bitcast i8*%F to i32*
store i32 1342177304,i32*%G,align 4
%H=load i8*,i8**%d,align 8
%I=bitcast i8*%E to i8**
store i8*%H,i8**%I,align 8
%J=getelementptr inbounds i8,i8*%E,i64 8
%K=bitcast i8*%J to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldriE_174 to void(...)*),void(...)**%K,align 8
%L=getelementptr inbounds i8,i8*%E,i64 16
%M=bitcast i8*%L to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldriE_174 to void(...)*),void(...)**%M,align 8
%N=getelementptr inbounds i8,i8*%E,i64 24
%O=bitcast i8*%N to i32*
store i32 1,i32*%O,align 4
ret i8*%E
}
define fastcc i8*@_SMLFN6Vector6foldriE(i32 inreg%a,i32 inreg%b,i32 inreg%c,i32 inreg%d)#3 gc"smlsharp"{
%e=alloca i8*,align 8
call void@llvm.gcroot(i8**%e,i8*null)#0
%f=call i8*@sml_alloc(i32 inreg 20)#0
%g=bitcast i8*%f to i32*
%h=getelementptr inbounds i8,i8*%f,i64 -4
%i=bitcast i8*%h to i32*
store i32 1342177296,i32*%i,align 4
store i8*%f,i8**%e,align 8
store i32%a,i32*%g,align 4
%j=getelementptr inbounds i8,i8*%f,i64 4
%k=bitcast i8*%j to i32*
store i32%b,i32*%k,align 4
%l=getelementptr inbounds i8,i8*%f,i64 8
%m=bitcast i8*%l to i32*
store i32%c,i32*%m,align 4
%n=getelementptr inbounds i8,i8*%f,i64 12
%o=bitcast i8*%n to i32*
store i32%d,i32*%o,align 4
%p=getelementptr inbounds i8,i8*%f,i64 16
%q=bitcast i8*%p to i32*
store i32 0,i32*%q,align 4
%r=call i8*@sml_alloc(i32 inreg 28)#0
%s=getelementptr inbounds i8,i8*%r,i64 -4
%t=bitcast i8*%s to i32*
store i32 1342177304,i32*%t,align 4
%u=load i8*,i8**%e,align 8
%v=bitcast i8*%r to i8**
store i8*%u,i8**%v,align 8
%w=getelementptr inbounds i8,i8*%r,i64 8
%x=bitcast i8*%w to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldriE_175 to void(...)*),void(...)**%x,align 8
%y=getelementptr inbounds i8,i8*%r,i64 16
%z=bitcast i8*%y to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector6foldriE_175 to void(...)*),void(...)**%z,align 8
%A=getelementptr inbounds i8,i8*%r,i64 24
%B=bitcast i8*%A to i32*
store i32 -2147483647,i32*%B,align 4
ret i8*%r
}
define internal fastcc i8*@_SMLLLN6Vector5foldlE_178(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 i32*
br label%p
l:
call void@sml_check(i32 inreg%h)
%m=bitcast i8**%c to i32**
%n=load i32*,i32**%m,align 8
%o=load i8*,i8**%f,align 8
br label%p
p:
%q=phi i8*[%o,%l],[%a,%j]
%r=phi i32*[%n,%l],[%k,%j]
%s=getelementptr inbounds i8,i8*%q,i64 28
%t=bitcast i8*%s to i32*
%u=load i32,i32*%t,align 4
%v=add i32%u,3
%w=sub i32 0,%u
%x=and i32%v,%w
%y=add i32%u,7
%z=add i32%y,%x
%A=and i32%z,-8
%B=lshr i32%x,3
%C=getelementptr inbounds i8,i8*%q,i64 24
%D=bitcast i8*%C to i32*
%E=load i32,i32*%D,align 4
%F=shl i32%E,%B
%G=or i32%A,4
%H=getelementptr inbounds i8,i8*%q,i64 20
%I=bitcast i8*%H to i32*
%J=load i32,i32*%I,align 4
%K=add i32%J,-1
%L=sub i32 0,%J
%M=and i32%K,%L
%N=add i32%K,%u
%O=add i32%N,%M
%P=and i32%O,%w
%Q=add i32%y,%P
%R=and i32%Q,-8
%S=lshr i32%P,3
%T=lshr i32%M,3
%U=sub nsw i32%S,%T
%V=shl i32%E,%U
%W=getelementptr inbounds i8,i8*%q,i64 16
%X=bitcast i8*%W to i32*
%Y=load i32,i32*%X,align 4
%Z=or i32%V,%Y
%aa=or i32%R,4
%ab=getelementptr inbounds i32,i32*%r,i64 -1
%ac=load i32,i32*%ab,align 4
%ad=and i32%ac,268435455
%ae=udiv i32%ad,%J
%af=icmp eq i32%E,0
br i1%af,label%ak,label%ag
ag:
%ah=getelementptr inbounds i8,i8*%q,i64 8
%ai=bitcast i8*%ah to i8**
%aj=load i8*,i8**%ai,align 8
br label%aw
ak:
%al=call i8*@sml_alloc(i32 inreg%u)#0
%am=getelementptr inbounds i8,i8*%al,i64 -4
%an=bitcast i8*%am to i32*
store i32%u,i32*%an,align 4
%ao=load i8*,i8**%f,align 8
%ap=getelementptr inbounds i8,i8*%ao,i64 8
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%al,i8*%ap,i32%u,i1 false)
%aq=getelementptr inbounds i8,i8*%ao,i64 28
%ar=bitcast i8*%aq to i32*
%as=load i32,i32*%ar,align 4
%at=getelementptr inbounds i8,i8*%ao,i64 24
%au=bitcast i8*%at to i32*
%av=load i32,i32*%au,align 4
br label%aw
aw:
%ax=phi i32[%av,%ak],[%E,%ag]
%ay=phi i32[%as,%ak],[%u,%ag]
%az=phi i8*[%al,%ak],[%aj,%ag]
store i8*%az,i8**%d,align 8
%aA=call i8*@sml_alloc(i32 inreg%G)#0
%aB=or i32%A,1342177280
%aC=bitcast i8*%aA to i32*
%aD=getelementptr inbounds i8,i8*%aA,i64 -4
%aE=bitcast i8*%aD to i32*
store i32%aB,i32*%aE,align 4
call void@llvm.memset.p0i8.i32(i8*%aA,i8 0,i32%G,i1 false)
store i32 0,i32*%aC,align 4
%aF=icmp eq i32%ax,0
%aG=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%aH=sext i32%x to i64
%aI=getelementptr inbounds i8,i8*%aA,i64%aH
br i1%aF,label%aJ,label%aK
aJ:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%aI,i8*%aG,i32%ay,i1 false)
br label%aM
aK:
%aL=bitcast i8*%aI to i8**
store i8*%aG,i8**%aL,align 8
br label%aM
aM:
%aN=sext i32%A to i64
%aO=getelementptr inbounds i8,i8*%aA,i64%aN
%aP=bitcast i8*%aO to i32*
store i32%F,i32*%aP,align 4
%aQ=bitcast i8**%f to i8***
%aR=or i32%R,1342177280
%aS=sext i32%M to i64
%aT=sext i32%P to i64
%aU=sext i32%R to i64
br label%aV
aV:
%aW=phi i8*[%cD,%cN],[%aA,%aM]
store i8*%aW,i8**%d,align 8
%aX=bitcast i8*%aW to i32*
%aY=load i32,i32*%aX,align 4
%aZ=load i8*,i8**%f,align 8
%a0=getelementptr inbounds i8,i8*%aZ,i64 24
%a1=bitcast i8*%a0 to i32*
%a2=load i32,i32*%a1,align 4
%a3=icmp eq i32%a2,0
br i1%a3,label%a8,label%a4
a4:
store i8*null,i8**%d,align 8
%a5=getelementptr inbounds i8,i8*%aW,i64%aH
%a6=bitcast i8*%a5 to i8**
%a7=load i8*,i8**%a6,align 8
br label%bh
a8:
%a9=getelementptr inbounds i8,i8*%aZ,i64 28
%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**%d,align 8
store i8*null,i8**%d,align 8
%bg=getelementptr inbounds i8,i8*%bf,i64%aH
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bc,i8*%bg,i32%bb,i1 false)
br label%bh
bh:
%bi=phi i8*[%bc,%a8],[%a7,%a4]
store i8*%bi,i8**%d,align 8
%bj=icmp slt i32%aY,%ae
br i1%bj,label%bl,label%bk
bk:
ret i8*%bi
bl:
%bm=load i8*,i8**%f,align 8
%bn=getelementptr inbounds i8,i8*%bm,i64 20
%bo=bitcast i8*%bn to i32*
%bp=load i32,i32*%bo,align 4
%bq=getelementptr inbounds i8,i8*%bm,i64 16
%br=bitcast i8*%bq to i32*
%bs=load i32,i32*%br,align 4
%bt=icmp eq i32%bs,0
br i1%bt,label%bC,label%bu
bu:
%bv=bitcast i8*%bm to i8**
%bw=load i8*,i8**%c,align 8
%bx=mul i32%bp,%aY
%by=sext i32%bx to i64
%bz=getelementptr inbounds i8,i8*%bw,i64%by
%bA=bitcast i8*%bz to i8**
%bB=load i8*,i8**%bA,align 8
br label%bS
bC:
%bD=call i8*@sml_alloc(i32 inreg%bp)#0
%bE=getelementptr inbounds i8,i8*%bD,i64 -4
%bF=bitcast i8*%bE to i32*
store i32%bp,i32*%bF,align 4
%bG=load i8*,i8**%c,align 8
%bH=mul i32%bp,%aY
%bI=sext i32%bH to i64
%bJ=getelementptr inbounds i8,i8*%bG,i64%bI
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bD,i8*%bJ,i32%bp,i1 false)
%bK=load i8**,i8***%aQ,align 8
%bL=bitcast i8**%bK to i8*
%bM=getelementptr inbounds i8,i8*%bL,i64 20
%bN=bitcast i8*%bM to i32*
%bO=load i32,i32*%bN,align 4
%bP=getelementptr inbounds i8*,i8**%bK,i64 2
%bQ=bitcast i8**%bP to i32*
%bR=load i32,i32*%bQ,align 4
br label%bS
bS:
%bT=phi i32[%bR,%bC],[%bs,%bu]
%bU=phi i32[%bO,%bC],[%bp,%bu]
%bV=phi i8*[%bL,%bC],[%bm,%bu]
%bW=phi i8**[%bK,%bC],[%bv,%bu]
%bX=phi i8*[%bD,%bC],[%bB,%bu]
store i8*%bX,i8**%e,align 8
%bY=add nsw i32%aY,1
%bZ=load i8*,i8**%bW,align 8
%b0=getelementptr inbounds i8,i8*%bZ,i64 16
%b1=bitcast i8*%b0 to i8*(i8*,i8*)**
%b2=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%b1,align 8
%b3=bitcast i8*%bZ to i8**
%b4=load i8*,i8**%b3,align 8
store i8*%b4,i8**%g,align 8
%b5=getelementptr inbounds i8,i8*%bV,i64 28
%b6=bitcast i8*%b5 to i32*
%b7=load i32,i32*%b6,align 4
%b8=getelementptr inbounds i8,i8*%bV,i64 24
%b9=bitcast i8*%b8 to i32*
%ca=load i32,i32*%b9,align 4
%cb=call i8*@sml_alloc(i32 inreg%aa)#0
%cc=getelementptr inbounds i8,i8*%cb,i64 -4
%cd=bitcast i8*%cc to i32*
store i32%aR,i32*%cd,align 4
call void@llvm.memset.p0i8.i32(i8*%cb,i8 0,i32%aa,i1 false)
%ce=icmp eq i32%bT,0
%cf=load i8*,i8**%e,align 8
store i8*null,i8**%e,align 8
%cg=getelementptr inbounds i8,i8*%cb,i64%aS
br i1%ce,label%ch,label%ci
ch:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cg,i8*%cf,i32%bU,i1 false)
br label%ck
ci:
%cj=bitcast i8*%cg to i8**
store i8*%cf,i8**%cj,align 8
br label%ck
ck:
%cl=icmp eq i32%ca,0
%cm=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%cn=getelementptr inbounds i8,i8*%cb,i64%aT
br i1%cl,label%co,label%cp
co:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cn,i8*%cm,i32%b7,i1 false)
br label%cr
cp:
%cq=bitcast i8*%cn to i8**
store i8*%cm,i8**%cq,align 8
br label%cr
cr:
%cs=getelementptr inbounds i8,i8*%cb,i64%aU
%ct=bitcast i8*%cs to i32*
store i32%Z,i32*%ct,align 4
%cu=load i8*,i8**%g,align 8
store i8*null,i8**%g,align 8
%cv=call fastcc i8*%b2(i8*inreg%cu,i8*inreg%cb)
store i8*%cv,i8**%d,align 8
%cw=load i8*,i8**%f,align 8
%cx=getelementptr inbounds i8,i8*%cw,i64 28
%cy=bitcast i8*%cx to i32*
%cz=load i32,i32*%cy,align 4
%cA=getelementptr inbounds i8,i8*%cw,i64 24
%cB=bitcast i8*%cA to i32*
%cC=load i32,i32*%cB,align 4
%cD=call i8*@sml_alloc(i32 inreg%G)#0
%cE=bitcast i8*%cD to i32*
%cF=getelementptr inbounds i8,i8*%cD,i64 -4
%cG=bitcast i8*%cF to i32*
store i32%aB,i32*%cG,align 4
call void@llvm.memset.p0i8.i32(i8*%cD,i8 0,i32%G,i1 false)
store i32%bY,i32*%cE,align 4
%cH=icmp eq i32%cC,0
%cI=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%cJ=getelementptr inbounds i8,i8*%cD,i64%aH
br i1%cH,label%cK,label%cL
cK:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cJ,i8*%cI,i32%cz,i1 false)
br label%cN
cL:
%cM=bitcast i8*%cJ to i8**
store i8*%cI,i8**%cM,align 8
br label%cN
cN:
%cO=getelementptr inbounds i8,i8*%cD,i64%aN
%cP=bitcast i8*%cO to i32*
store i32%F,i32*%cP,align 4
br label%aV
}
define internal fastcc i8*@_SMLLLN6Vector5foldlE_179(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*%b,i8**%c,align 8
%f=getelementptr inbounds i8,i8*%a,i64 16
%g=bitcast i8*%f to i32*
%h=load i32,i32*%g,align 4
%i=shl i32%h,1
%j=or i32%i,1
%k=bitcast i8*%a to i8**
%l=load i8*,i8**%k,align 8
store i8*%l,i8**%d,align 8
%m=getelementptr inbounds i8,i8*%a,i64 20
%n=bitcast i8*%m to i32*
%o=load i32,i32*%n,align 4
%p=getelementptr inbounds i8,i8*%a,i64 8
%q=bitcast i8*%p to i32*
%r=load i32,i32*%q,align 4
%s=getelementptr inbounds i8,i8*%a,i64 12
%t=bitcast i8*%s to i32*
%u=load i32,i32*%t,align 4
%v=call i8*@sml_alloc(i32 inreg 36)#0
%w=getelementptr inbounds i8,i8*%v,i64 -4
%x=bitcast i8*%w to i32*
store i32 1342177312,i32*%x,align 4
store i8*%v,i8**%e,align 8
%y=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%z=bitcast i8*%v to i8**
store i8*%y,i8**%z,align 8
%A=icmp eq i32%h,0
%B=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%C=getelementptr inbounds i8,i8*%v,i64 8
br i1%A,label%D,label%E
D:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%C,i8*%B,i32%o,i1 false)
br label%G
E:
%F=bitcast i8*%C to i8**
store i8*%B,i8**%F,align 8
br label%G
G:
%H=getelementptr inbounds i8,i8*%v,i64 16
%I=bitcast i8*%H to i32*
store i32%r,i32*%I,align 4
%J=getelementptr inbounds i8,i8*%v,i64 20
%K=bitcast i8*%J to i32*
store i32%u,i32*%K,align 4
%L=getelementptr inbounds i8,i8*%v,i64 24
%M=bitcast i8*%L to i32*
store i32%h,i32*%M,align 4
%N=getelementptr inbounds i8,i8*%v,i64 28
%O=bitcast i8*%N to i32*
store i32%o,i32*%O,align 4
%P=getelementptr inbounds i8,i8*%v,i64 32
%Q=bitcast i8*%P to i32*
store i32%j,i32*%Q,align 4
%R=call i8*@sml_alloc(i32 inreg 28)#0
%S=getelementptr inbounds i8,i8*%R,i64 -4
%T=bitcast i8*%S to i32*
store i32 1342177304,i32*%T,align 4
%U=load i8*,i8**%e,align 8
%V=bitcast i8*%R to i8**
store i8*%U,i8**%V,align 8
%W=getelementptr inbounds i8,i8*%R,i64 8
%X=bitcast i8*%W to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldlE_178 to void(...)*),void(...)**%X,align 8
%Y=getelementptr inbounds i8,i8*%R,i64 16
%Z=bitcast i8*%Y to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldlE_178 to void(...)*),void(...)**%Z,align 8
%aa=getelementptr inbounds i8,i8*%R,i64 24
%ab=bitcast i8*%aa to i32*
store i32 1,i32*%ab,align 4
ret i8*%R
}
define internal fastcc i8*@_SMLLLN6Vector5foldlE_180(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=getelementptr inbounds i8,i8*%a,i64 8
%k=bitcast i8*%j to i32*
%l=load i32,i32*%k,align 4
%m=getelementptr inbounds i8,i8*%a,i64 12
%n=bitcast i8*%m to i32*
%o=load i32,i32*%n,align 4
%p=call i8*@sml_alloc(i32 inreg 28)#0
%q=getelementptr inbounds i8,i8*%p,i64 -4
%r=bitcast i8*%q to i32*
store i32 1342177304,i32*%r,align 4
store i8*%p,i8**%d,align 8
%s=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%t=bitcast i8*%p to i8**
store i8*%s,i8**%t,align 8
%u=getelementptr inbounds i8,i8*%p,i64 8
%v=bitcast i8*%u to i32*
store i32%f,i32*%v,align 4
%w=getelementptr inbounds i8,i8*%p,i64 12
%x=bitcast i8*%w to i32*
store i32%i,i32*%x,align 4
%y=getelementptr inbounds i8,i8*%p,i64 16
%z=bitcast i8*%y to i32*
store i32%l,i32*%z,align 4
%A=getelementptr inbounds i8,i8*%p,i64 20
%B=bitcast i8*%A to i32*
store i32%o,i32*%B,align 4
%C=getelementptr inbounds i8,i8*%p,i64 24
%D=bitcast i8*%C to i32*
store i32 1,i32*%D,align 4
%E=call i8*@sml_alloc(i32 inreg 28)#0
%F=getelementptr inbounds i8,i8*%E,i64 -4
%G=bitcast i8*%F to i32*
store i32 1342177304,i32*%G,align 4
%H=load i8*,i8**%d,align 8
%I=bitcast i8*%E to i8**
store i8*%H,i8**%I,align 8
%J=getelementptr inbounds i8,i8*%E,i64 8
%K=bitcast i8*%J to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldlE_179 to void(...)*),void(...)**%K,align 8
%L=getelementptr inbounds i8,i8*%E,i64 16
%M=bitcast i8*%L to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldlE_179 to void(...)*),void(...)**%M,align 8
%N=getelementptr inbounds i8,i8*%E,i64 24
%O=bitcast i8*%N to i32*
store i32 1,i32*%O,align 4
ret i8*%E
}
define fastcc i8*@_SMLFN6Vector5foldlE(i32 inreg%a,i32 inreg%b,i32 inreg%c,i32 inreg%d)#3 gc"smlsharp"{
%e=alloca i8*,align 8
call void@llvm.gcroot(i8**%e,i8*null)#0
%f=call i8*@sml_alloc(i32 inreg 20)#0
%g=bitcast i8*%f to i32*
%h=getelementptr inbounds i8,i8*%f,i64 -4
%i=bitcast i8*%h to i32*
store i32 1342177296,i32*%i,align 4
store i8*%f,i8**%e,align 8
store i32%a,i32*%g,align 4
%j=getelementptr inbounds i8,i8*%f,i64 4
%k=bitcast i8*%j to i32*
store i32%b,i32*%k,align 4
%l=getelementptr inbounds i8,i8*%f,i64 8
%m=bitcast i8*%l to i32*
store i32%c,i32*%m,align 4
%n=getelementptr inbounds i8,i8*%f,i64 12
%o=bitcast i8*%n to i32*
store i32%d,i32*%o,align 4
%p=getelementptr inbounds i8,i8*%f,i64 16
%q=bitcast i8*%p to i32*
store i32 0,i32*%q,align 4
%r=call i8*@sml_alloc(i32 inreg 28)#0
%s=getelementptr inbounds i8,i8*%r,i64 -4
%t=bitcast i8*%s to i32*
store i32 1342177304,i32*%t,align 4
%u=load i8*,i8**%e,align 8
%v=bitcast i8*%r to i8**
store i8*%u,i8**%v,align 8
%w=getelementptr inbounds i8,i8*%r,i64 8
%x=bitcast i8*%w to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldlE_180 to void(...)*),void(...)**%x,align 8
%y=getelementptr inbounds i8,i8*%r,i64 16
%z=bitcast i8*%y to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldlE_180 to void(...)*),void(...)**%z,align 8
%A=getelementptr inbounds i8,i8*%r,i64 24
%B=bitcast i8*%A to i32*
store i32 -2147483647,i32*%B,align 4
ret i8*%r
}
define internal fastcc i8*@_SMLLLN6Vector5foldrE_183(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 i32*
br label%p
l:
call void@sml_check(i32 inreg%h)
%m=bitcast i8**%c to i32**
%n=load i32*,i32**%m,align 8
%o=load i8*,i8**%f,align 8
br label%p
p:
%q=phi i8*[%o,%l],[%a,%j]
%r=phi i32*[%n,%l],[%k,%j]
%s=getelementptr inbounds i8,i8*%q,i64 28
%t=bitcast i8*%s to i32*
%u=load i32,i32*%t,align 4
%v=add i32%u,3
%w=sub i32 0,%u
%x=and i32%v,%w
%y=add i32%u,7
%z=add i32%y,%x
%A=and i32%z,-8
%B=lshr i32%x,3
%C=getelementptr inbounds i8,i8*%q,i64 24
%D=bitcast i8*%C to i32*
%E=load i32,i32*%D,align 4
%F=shl i32%E,%B
%G=or i32%A,4
%H=getelementptr inbounds i8,i8*%q,i64 20
%I=bitcast i8*%H to i32*
%J=load i32,i32*%I,align 4
%K=add i32%J,-1
%L=sub i32 0,%J
%M=and i32%K,%L
%N=add i32%K,%u
%O=add i32%N,%M
%P=and i32%O,%w
%Q=add i32%y,%P
%R=and i32%Q,-8
%S=lshr i32%P,3
%T=lshr i32%M,3
%U=sub nsw i32%S,%T
%V=shl i32%E,%U
%W=getelementptr inbounds i8,i8*%q,i64 16
%X=bitcast i8*%W to i32*
%Y=load i32,i32*%X,align 4
%Z=or i32%V,%Y
%aa=or i32%R,4
%ab=getelementptr inbounds i32,i32*%r,i64 -1
%ac=load i32,i32*%ab,align 4
%ad=and i32%ac,268435455
%ae=udiv i32%ad,%J
%af=add nsw i32%ae,-1
%ag=icmp eq i32%E,0
br i1%ag,label%al,label%ah
ah:
%ai=getelementptr inbounds i8,i8*%q,i64 8
%aj=bitcast i8*%ai to i8**
%ak=load i8*,i8**%aj,align 8
br label%ax
al:
%am=call i8*@sml_alloc(i32 inreg%u)#0
%an=getelementptr inbounds i8,i8*%am,i64 -4
%ao=bitcast i8*%an to i32*
store i32%u,i32*%ao,align 4
%ap=load i8*,i8**%f,align 8
%aq=getelementptr inbounds i8,i8*%ap,i64 8
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%am,i8*%aq,i32%u,i1 false)
%ar=getelementptr inbounds i8,i8*%ap,i64 28
%as=bitcast i8*%ar to i32*
%at=load i32,i32*%as,align 4
%au=getelementptr inbounds i8,i8*%ap,i64 24
%av=bitcast i8*%au to i32*
%aw=load i32,i32*%av,align 4
br label%ax
ax:
%ay=phi i32[%aw,%al],[%E,%ah]
%az=phi i32[%at,%al],[%u,%ah]
%aA=phi i8*[%am,%al],[%ak,%ah]
store i8*%aA,i8**%d,align 8
%aB=call i8*@sml_alloc(i32 inreg%G)#0
%aC=or i32%A,1342177280
%aD=bitcast i8*%aB to i32*
%aE=getelementptr inbounds i8,i8*%aB,i64 -4
%aF=bitcast i8*%aE to i32*
store i32%aC,i32*%aF,align 4
call void@llvm.memset.p0i8.i32(i8*%aB,i8 0,i32%G,i1 false)
store i32%af,i32*%aD,align 4
%aG=icmp eq i32%ay,0
%aH=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%aI=sext i32%x to i64
%aJ=getelementptr inbounds i8,i8*%aB,i64%aI
br i1%aG,label%aK,label%aL
aK:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%aJ,i8*%aH,i32%az,i1 false)
br label%aN
aL:
%aM=bitcast i8*%aJ to i8**
store i8*%aH,i8**%aM,align 8
br label%aN
aN:
%aO=sext i32%A to i64
%aP=getelementptr inbounds i8,i8*%aB,i64%aO
%aQ=bitcast i8*%aP to i32*
store i32%F,i32*%aQ,align 4
%aR=bitcast i8**%f to i8***
%aS=or i32%R,1342177280
%aT=sext i32%M to i64
%aU=sext i32%P to i64
%aV=sext i32%R to i64
br label%aW
aW:
%aX=phi i8*[%cE,%cO],[%aB,%aN]
store i8*%aX,i8**%d,align 8
%aY=bitcast i8*%aX to i32*
%aZ=load i32,i32*%aY,align 4
%a0=load i8*,i8**%f,align 8
%a1=getelementptr inbounds i8,i8*%a0,i64 24
%a2=bitcast i8*%a1 to i32*
%a3=load i32,i32*%a2,align 4
%a4=icmp eq i32%a3,0
br i1%a4,label%a9,label%a5
a5:
store i8*null,i8**%d,align 8
%a6=getelementptr inbounds i8,i8*%aX,i64%aI
%a7=bitcast i8*%a6 to i8**
%a8=load i8*,i8**%a7,align 8
br label%bi
a9:
%ba=getelementptr inbounds i8,i8*%a0,i64 28
%bb=bitcast i8*%ba to i32*
%bc=load i32,i32*%bb,align 4
%bd=call i8*@sml_alloc(i32 inreg%bc)#0
%be=getelementptr inbounds i8,i8*%bd,i64 -4
%bf=bitcast i8*%be to i32*
store i32%bc,i32*%bf,align 4
%bg=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%bh=getelementptr inbounds i8,i8*%bg,i64%aI
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bd,i8*%bh,i32%bc,i1 false)
br label%bi
bi:
%bj=phi i8*[%bd,%a9],[%a8,%a5]
store i8*%bj,i8**%d,align 8
%bk=icmp sgt i32%aZ,-1
br i1%bk,label%bm,label%bl
bl:
ret i8*%bj
bm:
%bn=load i8*,i8**%f,align 8
%bo=getelementptr inbounds i8,i8*%bn,i64 20
%bp=bitcast i8*%bo to i32*
%bq=load i32,i32*%bp,align 4
%br=getelementptr inbounds i8,i8*%bn,i64 16
%bs=bitcast i8*%br to i32*
%bt=load i32,i32*%bs,align 4
%bu=icmp eq i32%bt,0
br i1%bu,label%bD,label%bv
bv:
%bw=bitcast i8*%bn to i8**
%bx=load i8*,i8**%c,align 8
%by=mul i32%bq,%aZ
%bz=sext i32%by to i64
%bA=getelementptr inbounds i8,i8*%bx,i64%bz
%bB=bitcast i8*%bA to i8**
%bC=load i8*,i8**%bB,align 8
br label%bT
bD:
%bE=call i8*@sml_alloc(i32 inreg%bq)#0
%bF=getelementptr inbounds i8,i8*%bE,i64 -4
%bG=bitcast i8*%bF to i32*
store i32%bq,i32*%bG,align 4
%bH=load i8*,i8**%c,align 8
%bI=mul i32%bq,%aZ
%bJ=sext i32%bI to i64
%bK=getelementptr inbounds i8,i8*%bH,i64%bJ
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bE,i8*%bK,i32%bq,i1 false)
%bL=load i8**,i8***%aR,align 8
%bM=bitcast i8**%bL to i8*
%bN=getelementptr inbounds i8,i8*%bM,i64 20
%bO=bitcast i8*%bN to i32*
%bP=load i32,i32*%bO,align 4
%bQ=getelementptr inbounds i8*,i8**%bL,i64 2
%bR=bitcast i8**%bQ to i32*
%bS=load i32,i32*%bR,align 4
br label%bT
bT:
%bU=phi i32[%bS,%bD],[%bt,%bv]
%bV=phi i32[%bP,%bD],[%bq,%bv]
%bW=phi i8*[%bM,%bD],[%bn,%bv]
%bX=phi i8**[%bL,%bD],[%bw,%bv]
%bY=phi i8*[%bE,%bD],[%bC,%bv]
store i8*%bY,i8**%e,align 8
%bZ=add nsw i32%aZ,-1
%b0=load i8*,i8**%bX,align 8
%b1=getelementptr inbounds i8,i8*%b0,i64 16
%b2=bitcast i8*%b1 to i8*(i8*,i8*)**
%b3=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%b2,align 8
%b4=bitcast i8*%b0 to i8**
%b5=load i8*,i8**%b4,align 8
store i8*%b5,i8**%g,align 8
%b6=getelementptr inbounds i8,i8*%bW,i64 28
%b7=bitcast i8*%b6 to i32*
%b8=load i32,i32*%b7,align 4
%b9=getelementptr inbounds i8,i8*%bW,i64 24
%ca=bitcast i8*%b9 to i32*
%cb=load i32,i32*%ca,align 4
%cc=call i8*@sml_alloc(i32 inreg%aa)#0
%cd=getelementptr inbounds i8,i8*%cc,i64 -4
%ce=bitcast i8*%cd to i32*
store i32%aS,i32*%ce,align 4
call void@llvm.memset.p0i8.i32(i8*%cc,i8 0,i32%aa,i1 false)
%cf=icmp eq i32%bU,0
%cg=load i8*,i8**%e,align 8
store i8*null,i8**%e,align 8
%ch=getelementptr inbounds i8,i8*%cc,i64%aT
br i1%cf,label%ci,label%cj
ci:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%ch,i8*%cg,i32%bV,i1 false)
br label%cl
cj:
%ck=bitcast i8*%ch to i8**
store i8*%cg,i8**%ck,align 8
br label%cl
cl:
%cm=icmp eq i32%cb,0
%cn=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%co=getelementptr inbounds i8,i8*%cc,i64%aU
br i1%cm,label%cp,label%cq
cp:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%co,i8*%cn,i32%b8,i1 false)
br label%cs
cq:
%cr=bitcast i8*%co to i8**
store i8*%cn,i8**%cr,align 8
br label%cs
cs:
%ct=getelementptr inbounds i8,i8*%cc,i64%aV
%cu=bitcast i8*%ct to i32*
store i32%Z,i32*%cu,align 4
%cv=load i8*,i8**%g,align 8
store i8*null,i8**%g,align 8
%cw=call fastcc i8*%b3(i8*inreg%cv,i8*inreg%cc)
store i8*%cw,i8**%d,align 8
%cx=load i8*,i8**%f,align 8
%cy=getelementptr inbounds i8,i8*%cx,i64 28
%cz=bitcast i8*%cy to i32*
%cA=load i32,i32*%cz,align 4
%cB=getelementptr inbounds i8,i8*%cx,i64 24
%cC=bitcast i8*%cB to i32*
%cD=load i32,i32*%cC,align 4
%cE=call i8*@sml_alloc(i32 inreg%G)#0
%cF=bitcast i8*%cE to i32*
%cG=getelementptr inbounds i8,i8*%cE,i64 -4
%cH=bitcast i8*%cG to i32*
store i32%aC,i32*%cH,align 4
call void@llvm.memset.p0i8.i32(i8*%cE,i8 0,i32%G,i1 false)
store i32%bZ,i32*%cF,align 4
%cI=icmp eq i32%cD,0
%cJ=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%cK=getelementptr inbounds i8,i8*%cE,i64%aI
br i1%cI,label%cL,label%cM
cL:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%cK,i8*%cJ,i32%cA,i1 false)
br label%cO
cM:
%cN=bitcast i8*%cK to i8**
store i8*%cJ,i8**%cN,align 8
br label%cO
cO:
%cP=getelementptr inbounds i8,i8*%cE,i64%aO
%cQ=bitcast i8*%cP to i32*
store i32%F,i32*%cQ,align 4
br label%aW
}
define internal fastcc i8*@_SMLLLN6Vector5foldrE_184(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*%b,i8**%c,align 8
%f=getelementptr inbounds i8,i8*%a,i64 16
%g=bitcast i8*%f to i32*
%h=load i32,i32*%g,align 4
%i=shl i32%h,1
%j=or i32%i,1
%k=bitcast i8*%a to i8**
%l=load i8*,i8**%k,align 8
store i8*%l,i8**%d,align 8
%m=getelementptr inbounds i8,i8*%a,i64 20
%n=bitcast i8*%m to i32*
%o=load i32,i32*%n,align 4
%p=getelementptr inbounds i8,i8*%a,i64 8
%q=bitcast i8*%p to i32*
%r=load i32,i32*%q,align 4
%s=getelementptr inbounds i8,i8*%a,i64 12
%t=bitcast i8*%s to i32*
%u=load i32,i32*%t,align 4
%v=call i8*@sml_alloc(i32 inreg 36)#0
%w=getelementptr inbounds i8,i8*%v,i64 -4
%x=bitcast i8*%w to i32*
store i32 1342177312,i32*%x,align 4
store i8*%v,i8**%e,align 8
%y=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%z=bitcast i8*%v to i8**
store i8*%y,i8**%z,align 8
%A=icmp eq i32%h,0
%B=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%C=getelementptr inbounds i8,i8*%v,i64 8
br i1%A,label%D,label%E
D:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%C,i8*%B,i32%o,i1 false)
br label%G
E:
%F=bitcast i8*%C to i8**
store i8*%B,i8**%F,align 8
br label%G
G:
%H=getelementptr inbounds i8,i8*%v,i64 16
%I=bitcast i8*%H to i32*
store i32%r,i32*%I,align 4
%J=getelementptr inbounds i8,i8*%v,i64 20
%K=bitcast i8*%J to i32*
store i32%u,i32*%K,align 4
%L=getelementptr inbounds i8,i8*%v,i64 24
%M=bitcast i8*%L to i32*
store i32%h,i32*%M,align 4
%N=getelementptr inbounds i8,i8*%v,i64 28
%O=bitcast i8*%N to i32*
store i32%o,i32*%O,align 4
%P=getelementptr inbounds i8,i8*%v,i64 32
%Q=bitcast i8*%P to i32*
store i32%j,i32*%Q,align 4
%R=call i8*@sml_alloc(i32 inreg 28)#0
%S=getelementptr inbounds i8,i8*%R,i64 -4
%T=bitcast i8*%S to i32*
store i32 1342177304,i32*%T,align 4
%U=load i8*,i8**%e,align 8
%V=bitcast i8*%R to i8**
store i8*%U,i8**%V,align 8
%W=getelementptr inbounds i8,i8*%R,i64 8
%X=bitcast i8*%W to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldrE_183 to void(...)*),void(...)**%X,align 8
%Y=getelementptr inbounds i8,i8*%R,i64 16
%Z=bitcast i8*%Y to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldrE_183 to void(...)*),void(...)**%Z,align 8
%aa=getelementptr inbounds i8,i8*%R,i64 24
%ab=bitcast i8*%aa to i32*
store i32 1,i32*%ab,align 4
ret i8*%R
}
define internal fastcc i8*@_SMLLLN6Vector5foldrE_185(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=getelementptr inbounds i8,i8*%a,i64 8
%k=bitcast i8*%j to i32*
%l=load i32,i32*%k,align 4
%m=getelementptr inbounds i8,i8*%a,i64 12
%n=bitcast i8*%m to i32*
%o=load i32,i32*%n,align 4
%p=call i8*@sml_alloc(i32 inreg 28)#0
%q=getelementptr inbounds i8,i8*%p,i64 -4
%r=bitcast i8*%q to i32*
store i32 1342177304,i32*%r,align 4
store i8*%p,i8**%d,align 8
%s=load i8*,i8**%c,align 8
store i8*null,i8**%c,align 8
%t=bitcast i8*%p to i8**
store i8*%s,i8**%t,align 8
%u=getelementptr inbounds i8,i8*%p,i64 8
%v=bitcast i8*%u to i32*
store i32%f,i32*%v,align 4
%w=getelementptr inbounds i8,i8*%p,i64 12
%x=bitcast i8*%w to i32*
store i32%i,i32*%x,align 4
%y=getelementptr inbounds i8,i8*%p,i64 16
%z=bitcast i8*%y to i32*
store i32%l,i32*%z,align 4
%A=getelementptr inbounds i8,i8*%p,i64 20
%B=bitcast i8*%A to i32*
store i32%o,i32*%B,align 4
%C=getelementptr inbounds i8,i8*%p,i64 24
%D=bitcast i8*%C to i32*
store i32 1,i32*%D,align 4
%E=call i8*@sml_alloc(i32 inreg 28)#0
%F=getelementptr inbounds i8,i8*%E,i64 -4
%G=bitcast i8*%F to i32*
store i32 1342177304,i32*%G,align 4
%H=load i8*,i8**%d,align 8
%I=bitcast i8*%E to i8**
store i8*%H,i8**%I,align 8
%J=getelementptr inbounds i8,i8*%E,i64 8
%K=bitcast i8*%J to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldrE_184 to void(...)*),void(...)**%K,align 8
%L=getelementptr inbounds i8,i8*%E,i64 16
%M=bitcast i8*%L to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldrE_184 to void(...)*),void(...)**%M,align 8
%N=getelementptr inbounds i8,i8*%E,i64 24
%O=bitcast i8*%N to i32*
store i32 1,i32*%O,align 4
ret i8*%E
}
define fastcc i8*@_SMLFN6Vector5foldrE(i32 inreg%a,i32 inreg%b,i32 inreg%c,i32 inreg%d)#3 gc"smlsharp"{
%e=alloca i8*,align 8
call void@llvm.gcroot(i8**%e,i8*null)#0
%f=call i8*@sml_alloc(i32 inreg 20)#0
%g=bitcast i8*%f to i32*
%h=getelementptr inbounds i8,i8*%f,i64 -4
%i=bitcast i8*%h to i32*
store i32 1342177296,i32*%i,align 4
store i8*%f,i8**%e,align 8
store i32%a,i32*%g,align 4
%j=getelementptr inbounds i8,i8*%f,i64 4
%k=bitcast i8*%j to i32*
store i32%b,i32*%k,align 4
%l=getelementptr inbounds i8,i8*%f,i64 8
%m=bitcast i8*%l to i32*
store i32%c,i32*%m,align 4
%n=getelementptr inbounds i8,i8*%f,i64 12
%o=bitcast i8*%n to i32*
store i32%d,i32*%o,align 4
%p=getelementptr inbounds i8,i8*%f,i64 16
%q=bitcast i8*%p to i32*
store i32 0,i32*%q,align 4
%r=call i8*@sml_alloc(i32 inreg 28)#0
%s=getelementptr inbounds i8,i8*%r,i64 -4
%t=bitcast i8*%s to i32*
store i32 1342177304,i32*%t,align 4
%u=load i8*,i8**%e,align 8
%v=bitcast i8*%r to i8**
store i8*%u,i8**%v,align 8
%w=getelementptr inbounds i8,i8*%r,i64 8
%x=bitcast i8*%w to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldrE_185 to void(...)*),void(...)**%x,align 8
%y=getelementptr inbounds i8,i8*%r,i64 16
%z=bitcast i8*%y to void(...)**
store void(...)*bitcast(i8*(i8*,i8*)*@_SMLLLN6Vector5foldrE_185 to void(...)*),void(...)**%z,align 8
%A=getelementptr inbounds i8,i8*%r,i64 24
%B=bitcast i8*%A to i32*
store i32 -2147483647,i32*%B,align 4
ret i8*%r
}
define internal fastcc i8*@_SMLLLN6Vector5findiE_188(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
G:
%c=alloca i8*,align 8
%d=alloca i8*,align 8
%e=alloca i8*,align 8
%f=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
store i8*%a,i8**%e,align 8
store i8*%b,i8**%c,align 8
%g=getelementptr inbounds i8,i8*%a,i64 12
%h=bitcast i8*%g to i32*
%i=load i32,i32*%h,align 4
%j=add i32%i,3
%k=sub i32 0,%i
%l=and i32%j,%k
%m=add i32%i,7
%n=add i32%m,%l
%o=and i32%n,-8
%p=lshr i32%l,3
%q=getelementptr inbounds i8,i8*%a,i64 8
%r=bitcast i8*%q to i32*
%s=load i32,i32*%r,align 4
%t=shl i32%s,%p
%u=or i32%o,4
%v=getelementptr inbounds i8,i8*%b,i64 -4
%w=bitcast i8*%v to i32*
%x=load i32,i32*%w,align 4
%y=and i32%x,268435455
%z=udiv i32%y,%i
%A=bitcast i8**%e to i8***
%B=or i32%o,1342177280
%C=sext i32%l to i64
%D=sext i32%o to i64
br label%E
E:
%F=phi i32[0,%G],[%bq,%bp]
%H=load atomic i32,i32*@sml_check_flag unordered,align 4
%I=icmp eq i32%H,0
br i1%I,label%K,label%J
J:
call void@sml_check(i32 inreg%H)
br label%K
K:
%L=icmp slt i32%F,%z
br i1%L,label%N,label%M
M:
ret i8*null
N:
%O=load i8*,i8**%e,align 8
%P=getelementptr inbounds i8,i8*%O,i64 12
%Q=bitcast i8*%P to i32*
%R=load i32,i32*%Q,align 4
%S=getelementptr inbounds i8,i8*%O,i64 8
%T=bitcast i8*%S to i32*
%U=load i32,i32*%T,align 4
%V=icmp eq i32%U,0
br i1%V,label%ae,label%W
W:
%X=bitcast i8*%O to i8**
%Y=load i8*,i8**%c,align 8
%Z=mul i32%R,%F
%aa=sext i32%Z to i64
%ab=getelementptr inbounds i8,i8*%Y,i64%aa
%ac=bitcast i8*%ab to i8**
%ad=load i8*,i8**%ac,align 8
br label%au
ae:
%af=call i8*@sml_alloc(i32 inreg%R)#0
%ag=getelementptr inbounds i8,i8*%af,i64 -4
%ah=bitcast i8*%ag to i32*
store i32%R,i32*%ah,align 4
%ai=load i8*,i8**%c,align 8
%aj=mul i32%R,%F
%ak=sext i32%aj to i64
%al=getelementptr inbounds i8,i8*%ai,i64%ak
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%af,i8*%al,i32%R,i1 false)
%am=load i8**,i8***%A,align 8
%an=bitcast i8**%am to i8*
%ao=getelementptr inbounds i8,i8*%an,i64 12
%ap=bitcast i8*%ao to i32*
%aq=load i32,i32*%ap,align 4
%ar=getelementptr inbounds i8*,i8**%am,i64 1
%as=bitcast i8**%ar to i32*
%at=load i32,i32*%as,align 4
br label%au
au:
%av=phi i32[%at,%ae],[%U,%W]
%aw=phi i32[%aq,%ae],[%R,%W]
%ax=phi i8**[%am,%ae],[%X,%W]
%ay=phi i8*[%af,%ae],[%ad,%W]
store i8*%ay,i8**%d,align 8
%az=load i8*,i8**%ax,align 8
%aA=getelementptr inbounds i8,i8*%az,i64 16
%aB=bitcast i8*%aA to i8*(i8*,i8*)**
%aC=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%aB,align 8
%aD=bitcast i8*%az to i8**
%aE=load i8*,i8**%aD,align 8
store i8*%aE,i8**%f,align 8
%aF=call i8*@sml_alloc(i32 inreg%u)#0
%aG=bitcast i8*%aF to i32*
%aH=getelementptr inbounds i8,i8*%aF,i64 -4
%aI=bitcast i8*%aH to i32*
store i32%B,i32*%aI,align 4
call void@llvm.memset.p0i8.i32(i8*%aF,i8 0,i32%u,i1 false)
store i32%F,i32*%aG,align 4
%aJ=icmp eq i32%av,0
%aK=load i8*,i8**%d,align 8
%aL=getelementptr inbounds i8,i8*%aF,i64%C
br i1%aJ,label%aM,label%aN
aM:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%aL,i8*%aK,i32%aw,i1 false)
br label%aP
aN:
%aO=bitcast i8*%aL to i8**
store i8*%aK,i8**%aO,align 8
br label%aP
aP:
%aQ=getelementptr inbounds i8,i8*%aF,i64%D
%aR=bitcast i8*%aQ to i32*
store i32%t,i32*%aR,align 4
%aS=load i8*,i8**%f,align 8
store i8*null,i8**%f,align 8
%aT=call fastcc i8*%aC(i8*inreg%aS,i8*inreg%aF)
%aU=bitcast i8*%aT to i32*
%aV=load i32,i32*%aU,align 4
%aW=icmp eq i32%aV,0
br i1%aW,label%bp,label%aX
aX:
store i8*null,i8**%c,align 8
%aY=load i8*,i8**%e,align 8
%aZ=getelementptr inbounds i8,i8*%aY,i64 12
%a0=bitcast i8*%aZ to i32*
%a1=load i32,i32*%a0,align 4
store i8*null,i8**%e,align 8
%a2=getelementptr inbounds i8,i8*%aY,i64 8
%a3=bitcast i8*%a2 to i32*
%a4=load i32,i32*%a3,align 4
%a5=call i8*@sml_alloc(i32 inreg%u)#0
%a6=getelementptr inbounds i8,i8*%a5,i64 -4
%a7=bitcast i8*%a6 to i32*
store i32%B,i32*%a7,align 4
store i8*%a5,i8**%c,align 8
call void@llvm.memset.p0i8.i32(i8*%a5,i8 0,i32%u,i1 false)
%a8=bitcast i8*%a5 to i32*
store i32%F,i32*%a8,align 4
%a9=icmp eq i32%a4,0
%ba=load i8*,i8**%d,align 8
store i8*null,i8**%d,align 8
%bb=getelementptr inbounds i8,i8*%a5,i64%C
br i1%a9,label%bc,label%bd
bc:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bb,i8*%ba,i32%a1,i1 false)
br label%bf
bd:
%be=bitcast i8*%bb to i8**
store i8*%ba,i8**%be,align 8
br label%bf
bf:
%bg=getelementptr inbounds i8,i8*%a5,i64%D
%bh=bitcast i8*%bg to i32*
store i32%t,i32*%bh,align 4
%bi=call i8*@sml_alloc(i32 inreg 12)#0
%bj=getelementptr inbounds i8,i8*%bi,i64 -4
%bk=bitcast i8*%bj to i32*
store i32 1342177288,i32*%bk,align 4
%bl=load i8*,i8**%c,align 8
%bm=bitcast i8*%bi to i8**
store i8*%bl,i8**%bm,align 8
%bn=getelementptr inbounds i8,i8*%bi,i64 8
%bo=bitcast i8*%bn to i32*
store i32 1,i32*%bo,align 4
ret i8*%bi
bp:
store i8*null,i8**%d,align 8
%bq=add nuw nsw i32%F,1
br label%E
}
define internal fastcc i8*@_SMLLLN6Vector5findiE_189(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(i8*(i8*,i8*)*@_SMLLLN6Vector5findiE_188 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*)*@_SMLLLN6Vector5findiE_188 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*@_SMLFN6Vector5findiE(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*)*@_SMLLLN6Vector5findiE_189 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*)*@_SMLLLN6Vector5findiE_189 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*@_SMLLLN6Vector4findE_192(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
A:
%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
store i8*%b,i8**%c,align 8
%f=getelementptr inbounds i8,i8*%a,i64 12
%g=bitcast i8*%f to i32*
%h=load i32,i32*%g,align 4
%i=add i32%h,-1
%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=getelementptr inbounds i8,i8*%a,i64 8
%p=bitcast i8*%o to i32*
%q=load i32,i32*%p,align 4
%r=or i32%n,4
%s=getelementptr inbounds i8,i8*%b,i64 -4
%t=bitcast i8*%s to i32*
%u=load i32,i32*%t,align 4
%v=and i32%u,268435455
%w=udiv i32%v,%h
%x=bitcast i8**%e to i8***
br label%y
y:
%z=phi i32[0,%A],[%aS,%aR]
%B=load atomic i32,i32*@sml_check_flag unordered,align 4
%C=icmp eq i32%B,0
br i1%C,label%E,label%D
D:
call void@sml_check(i32 inreg%B)
br label%E
E:
%F=icmp slt i32%z,%w
br i1%F,label%H,label%G
G:
ret i8*null
H:
%I=load i8*,i8**%e,align 8
%J=getelementptr inbounds i8,i8*%I,i64 12
%K=bitcast i8*%J to i32*
%L=load i32,i32*%K,align 4
%M=getelementptr inbounds i8,i8*%I,i64 8
%N=bitcast i8*%M to i32*
%O=load i32,i32*%N,align 4
%P=icmp eq i32%O,0
br i1%P,label%Y,label%Q
Q:
%R=bitcast i8*%I to i8**
%S=load i8*,i8**%c,align 8
%T=mul i32%L,%z
%U=sext i32%T to i64
%V=getelementptr inbounds i8,i8*%S,i64%U
%W=bitcast i8*%V to i8**
%X=load i8*,i8**%W,align 8
br label%ah
Y:
%Z=call i8*@sml_alloc(i32 inreg%L)#0
%aa=getelementptr inbounds i8,i8*%Z,i64 -4
%ab=bitcast i8*%aa to i32*
store i32%L,i32*%ab,align 4
%ac=load i8*,i8**%c,align 8
%ad=mul i32%L,%z
%ae=sext i32%ad to i64
%af=getelementptr inbounds i8,i8*%ac,i64%ae
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%Z,i8*%af,i32%L,i1 false)
%ag=load i8**,i8***%x,align 8
br label%ah
ah:
%ai=phi i8**[%ag,%Y],[%R,%Q]
%aj=phi i8*[%Z,%Y],[%X,%Q]
store i8*%aj,i8**%d,align 8
%ak=load i8*,i8**%ai,align 8
%al=getelementptr inbounds i8,i8*%ak,i64 16
%am=bitcast i8*%al to i8*(i8*,i8*)**
%an=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%am,align 8
%ao=bitcast i8*%ak to i8**
%ap=load i8*,i8**%ao,align 8
%aq=call fastcc i8*%an(i8*inreg%ap,i8*inreg%aj)
%ar=bitcast i8*%aq to i32*
%as=load i32,i32*%ar,align 4
%at=icmp eq i32%as,0
br i1%at,label%aR,label%au
au:
store i8*null,i8**%c,align 8
%av=load i8*,i8**%e,align 8
%aw=getelementptr inbounds i8,i8*%av,i64 12
%ax=bitcast i8*%aw to i32*
%ay=load i32,i32*%ax,align 4
store i8*null,i8**%e,align 8
%az=getelementptr inbounds i8,i8*%av,i64 8
%aA=bitcast i8*%az to i32*
%aB=load i32,i32*%aA,align 4
%aC=call i8*@sml_alloc(i32 inreg%r)#0
%aD=or i32%n,1342177280
%aE=getelementptr inbounds i8,i8*%aC,i64 -4
%aF=bitcast i8*%aE to i32*
store i32%aD,i32*%aF,align 4
call void@llvm.memset.p0i8.i32(i8*%aC,i8 0,i32%r,i1 false)
%aG=icmp eq i32%aB,0
%aH=load i8*,i8**%d,align 8
%aI=sext i32%k to i64
%aJ=getelementptr inbounds i8,i8*%aC,i64%aI
br i1%aG,label%aK,label%aL
aK:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%aJ,i8*%aH,i32%ay,i1 false)
br label%aN
aL:
%aM=bitcast i8*%aJ to i8**
store i8*%aH,i8**%aM,align 8
br label%aN
aN:
%aO=sext i32%n to i64
%aP=getelementptr inbounds i8,i8*%aC,i64%aO
%aQ=bitcast i8*%aP to i32*
store i32%q,i32*%aQ,align 4
ret i8*%aC
aR:
store i8*null,i8**%d,align 8
%aS=add nuw nsw i32%z,1
br label%y
}
define internal fastcc i8*@_SMLLLN6Vector4findE_193(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(i8*(i8*,i8*)*@_SMLLLN6Vector4findE_192 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*)*@_SMLLLN6Vector4findE_192 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*@_SMLFN6Vector4findE(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*)*@_SMLLLN6Vector4findE_193 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*)*@_SMLLLN6Vector4findE_193 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 i32@_SMLLLN6Vector6existsE_196(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
q:
%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**%d,align 8
store i8*%b,i8**%c,align 8
%f=getelementptr inbounds i8,i8*%b,i64 -4
%g=bitcast i8*%f to i32*
%h=load i32,i32*%g,align 4
%i=and i32%h,268435455
%j=getelementptr inbounds i8,i8*%a,i64 12
%k=bitcast i8*%j to i32*
%l=load i32,i32*%k,align 4
%m=udiv i32%i,%l
%n=bitcast i8**%d to i8***
br label%o
o:
%p=phi i32[0,%q],[%al,%ae]
%r=load atomic i32,i32*@sml_check_flag unordered,align 4
%s=icmp eq i32%r,0
br i1%s,label%u,label%t
t:
call void@sml_check(i32 inreg%r)
br label%u
u:
%v=icmp slt i32%p,%m
br i1%v,label%y,label%w
w:
%x=phi i32[0,%u],[1,%ae]
ret i32%x
y:
%z=load i8**,i8***%n,align 8
%A=load i8*,i8**%z,align 8
%B=getelementptr inbounds i8,i8*%A,i64 16
%C=bitcast i8*%B to i8*(i8*,i8*)**
%D=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%C,align 8
%E=bitcast i8*%A to i8**
%F=load i8*,i8**%E,align 8
store i8*%F,i8**%e,align 8
%G=bitcast i8**%z to i8*
%H=getelementptr inbounds i8,i8*%G,i64 12
%I=bitcast i8*%H to i32*
%J=load i32,i32*%I,align 4
%K=getelementptr inbounds i8*,i8**%z,i64 1
%L=bitcast i8**%K to i32*
%M=load i32,i32*%L,align 4
%N=icmp eq i32%M,0
br i1%N,label%V,label%O
O:
%P=load i8*,i8**%c,align 8
%Q=mul i32%J,%p
%R=sext i32%Q to i64
%S=getelementptr inbounds i8,i8*%P,i64%R
%T=bitcast i8*%S to i8**
%U=load i8*,i8**%T,align 8
br label%ae
V:
%W=call i8*@sml_alloc(i32 inreg%J)#0
%X=getelementptr inbounds i8,i8*%W,i64 -4
%Y=bitcast i8*%X to i32*
store i32%J,i32*%Y,align 4
%Z=load i8*,i8**%c,align 8
%aa=mul i32%J,%p
%ab=sext i32%aa to i64
%ac=getelementptr inbounds i8,i8*%Z,i64%ab
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%W,i8*%ac,i32%J,i1 false)
%ad=load i8*,i8**%e,align 8
br label%ae
ae:
%af=phi i8*[%F,%O],[%ad,%V]
%ag=phi i8*[%U,%O],[%W,%V]
store i8*null,i8**%e,align 8
%ah=call fastcc i8*%D(i8*inreg%af,i8*inreg%ag)
%ai=bitcast i8*%ah to i32*
%aj=load i32,i32*%ai,align 4
%ak=icmp eq i32%aj,0
%al=add nuw nsw i32%p,1
br i1%ak,label%o,label%w
}
define internal fastcc i8*@_SMLLLN6Vector6existsE_197(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*)*@_SMLLLN6Vector6existsE_196 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*)*@_SMLLLN6Vector6existsE_224 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*@_SMLFN6Vector6existsE(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*)*@_SMLLLN6Vector6existsE_197 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*)*@_SMLLLN6Vector6existsE_197 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 i32@_SMLLLN6Vector3allE_200(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
q:
%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**%d,align 8
store i8*%b,i8**%c,align 8
%f=getelementptr inbounds i8,i8*%b,i64 -4
%g=bitcast i8*%f to i32*
%h=load i32,i32*%g,align 4
%i=and i32%h,268435455
%j=getelementptr inbounds i8,i8*%a,i64 12
%k=bitcast i8*%j to i32*
%l=load i32,i32*%k,align 4
%m=udiv i32%i,%l
%n=bitcast i8**%d to i8***
br label%o
o:
%p=phi i32[0,%q],[%al,%ae]
%r=load atomic i32,i32*@sml_check_flag unordered,align 4
%s=icmp eq i32%r,0
br i1%s,label%u,label%t
t:
call void@sml_check(i32 inreg%r)
br label%u
u:
%v=icmp slt i32%p,%m
br i1%v,label%y,label%w
w:
%x=phi i32[1,%u],[0,%ae]
ret i32%x
y:
%z=load i8**,i8***%n,align 8
%A=load i8*,i8**%z,align 8
%B=getelementptr inbounds i8,i8*%A,i64 16
%C=bitcast i8*%B to i8*(i8*,i8*)**
%D=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%C,align 8
%E=bitcast i8*%A to i8**
%F=load i8*,i8**%E,align 8
store i8*%F,i8**%e,align 8
%G=bitcast i8**%z to i8*
%H=getelementptr inbounds i8,i8*%G,i64 12
%I=bitcast i8*%H to i32*
%J=load i32,i32*%I,align 4
%K=getelementptr inbounds i8*,i8**%z,i64 1
%L=bitcast i8**%K to i32*
%M=load i32,i32*%L,align 4
%N=icmp eq i32%M,0
br i1%N,label%V,label%O
O:
%P=load i8*,i8**%c,align 8
%Q=mul i32%J,%p
%R=sext i32%Q to i64
%S=getelementptr inbounds i8,i8*%P,i64%R
%T=bitcast i8*%S to i8**
%U=load i8*,i8**%T,align 8
br label%ae
V:
%W=call i8*@sml_alloc(i32 inreg%J)#0
%X=getelementptr inbounds i8,i8*%W,i64 -4
%Y=bitcast i8*%X to i32*
store i32%J,i32*%Y,align 4
%Z=load i8*,i8**%c,align 8
%aa=mul i32%J,%p
%ab=sext i32%aa to i64
%ac=getelementptr inbounds i8,i8*%Z,i64%ab
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%W,i8*%ac,i32%J,i1 false)
%ad=load i8*,i8**%e,align 8
br label%ae
ae:
%af=phi i8*[%F,%O],[%ad,%V]
%ag=phi i8*[%U,%O],[%W,%V]
store i8*null,i8**%e,align 8
%ah=call fastcc i8*%D(i8*inreg%af,i8*inreg%ag)
%ai=bitcast i8*%ah to i32*
%aj=load i32,i32*%ai,align 4
%ak=icmp eq i32%aj,0
%al=add nuw nsw i32%p,1
br i1%ak,label%w,label%o
}
define internal fastcc i8*@_SMLLLN6Vector3allE_201(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*)*@_SMLLLN6Vector3allE_200 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*)*@_SMLLLN6Vector3allE_226 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*@_SMLFN6Vector3allE(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*)*@_SMLLLN6Vector3allE_201 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*)*@_SMLLLN6Vector3allE_201 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 i32@_SMLLLN6Vector7collateE_204(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
aj:
%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,-1
%m=sub i32 0,%k
%n=and i32%l,%m
%o=shl i32%k,1
%p=add i32%o,-1
%q=add i32%p,%n
%r=and i32%q,%m
%s=add i32%k,7
%t=add i32%s,%r
%u=and i32%t,-8
%v=lshr i32%r,3
%w=lshr i32%n,3
%x=sub nsw i32%v,%w
%y=getelementptr inbounds i8,i8*%a,i64 8
%z=bitcast i8*%y to i32*
%A=load i32,i32*%z,align 4
%B=shl i32%A,%x
%C=or i32%B,%A
%D=or i32%u,4
%E=bitcast i8*%b to i8**
%F=load i8*,i8**%E,align 8
store i8*%F,i8**%c,align 8
%G=getelementptr inbounds i8,i8*%b,i64 8
%H=bitcast i8*%G to i8**
%I=load i8*,i8**%H,align 8
store i8*%I,i8**%d,align 8
%J=getelementptr inbounds i8,i8*%F,i64 -4
%K=bitcast i8*%J to i32*
%L=load i32,i32*%K,align 4
%M=and i32%L,268435455
%N=udiv i32%M,%k
%O=getelementptr inbounds i8,i8*%I,i64 -4
%P=bitcast i8*%O to i32*
%Q=load i32,i32*%P,align 4
%R=and i32%Q,268435455
%S=udiv i32%R,%k
%T=call i8*@sml_alloc(i32 inreg 20)#0
%U=getelementptr inbounds i8,i8*%T,i64 -4
%V=bitcast i8*%U to i32*
store i32 1342177296,i32*%V,align 4
%W=getelementptr inbounds i8,i8*%T,i64 4
%X=bitcast i8*%W to i32*
call void@llvm.memset.p0i8.i64(i8*%T,i8 0,i64 16,i1 false)
store i32%N,i32*%X,align 4
%Y=getelementptr inbounds i8,i8*%T,i64 8
%Z=bitcast i8*%Y to i32*
store i32%S,i32*%Z,align 4
%aa=getelementptr inbounds i8,i8*%T,i64 16
%ab=bitcast i8*%aa to i32*
store i32 0,i32*%ab,align 4
%ac=bitcast i8**%g to i8***
%ad=or i32%u,1342177280
%ae=sext i32%n to i64
%af=sext i32%r to i64
%ag=sext i32%u to i64
br label%ah
ah:
%ai=phi i8*[%cb,%b7],[%T,%aj]
store i8*%ai,i8**%e,align 8
%ak=load atomic i32,i32*@sml_check_flag unordered,align 4
%al=icmp eq i32%ak,0
br i1%al,label%ao,label%am
am:
call void@sml_check(i32 inreg%ak)
%an=load i8*,i8**%e,align 8
br label%ao
ao:
%ap=phi i8*[%an,%am],[%ai,%ah]
%aq=bitcast i8*%ap to i32*
%ar=load i32,i32*%aq,align 4
%as=getelementptr inbounds i8,i8*%ap,i64 4
%at=bitcast i8*%as to i32*
%au=load i32,i32*%at,align 4
%av=icmp eq i32%au,0
br i1%av,label%cn,label%aw
aw:
store i8*null,i8**%e,align 8
%ax=getelementptr inbounds i8,i8*%ap,i64 8
%ay=bitcast i8*%ax to i32*
%az=load i32,i32*%ay,align 4
%aA=icmp eq i32%az,0
br i1%aA,label%b5,label%aB
aB:
%aC=load i8*,i8**%g,align 8
%aD=getelementptr inbounds i8,i8*%aC,i64 12
%aE=bitcast i8*%aD to i32*
%aF=load i32,i32*%aE,align 4
%aG=getelementptr inbounds i8,i8*%aC,i64 8
%aH=bitcast i8*%aG to i32*
%aI=load i32,i32*%aH,align 4
%aJ=icmp eq i32%aI,0
br i1%aJ,label%aR,label%aK
aK:
%aL=load i8*,i8**%c,align 8
%aM=mul i32%aF,%ar
%aN=sext i32%aM to i64
%aO=getelementptr inbounds i8,i8*%aL,i64%aN
%aP=bitcast i8*%aO to i8**
%aQ=load i8*,i8**%aP,align 8
store i8*%aQ,i8**%e,align 8
br label%a7
aR:
%aS=call i8*@sml_alloc(i32 inreg%aF)#0
%aT=getelementptr inbounds i8,i8*%aS,i64 -4
%aU=bitcast i8*%aT to i32*
store i32%aF,i32*%aU,align 4
%aV=load i8*,i8**%c,align 8
%aW=mul i32%aF,%ar
%aX=sext i32%aW to i64
%aY=getelementptr inbounds i8,i8*%aV,i64%aX
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%aS,i8*%aY,i32%aF,i1 false)
%aZ=load i8*,i8**%g,align 8
%a0=getelementptr inbounds i8,i8*%aZ,i64 12
%a1=bitcast i8*%a0 to i32*
%a2=load i32,i32*%a1,align 4
%a3=getelementptr inbounds i8,i8*%aZ,i64 8
%a4=bitcast i8*%a3 to i32*
%a5=load i32,i32*%a4,align 4
store i8*%aS,i8**%e,align 8
%a6=icmp eq i32%a5,0
br i1%a6,label%bi,label%a7
a7:
%a8=phi i32[%aF,%aK],[%a2,%aR]
%a9=phi i32[%aI,%aK],[%a5,%aR]
%ba=phi i8*[%aC,%aK],[%aZ,%aR]
%bb=bitcast i8*%ba to i8**
%bc=load i8*,i8**%d,align 8
%bd=mul i32%a8,%ar
%be=sext i32%bd to i64
%bf=getelementptr inbounds i8,i8*%bc,i64%be
%bg=bitcast i8*%bf to i8**
%bh=load i8*,i8**%bg,align 8
br label%by
bi:
%bj=call i8*@sml_alloc(i32 inreg%a2)#0
%bk=getelementptr inbounds i8,i8*%bj,i64 -4
%bl=bitcast i8*%bk to i32*
store i32%a2,i32*%bl,align 4
%bm=load i8*,i8**%d,align 8
%bn=mul i32%a2,%ar
%bo=sext i32%bn to i64
%bp=getelementptr inbounds i8,i8*%bm,i64%bo
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bj,i8*%bp,i32%a2,i1 false)
%bq=load i8**,i8***%ac,align 8
%br=bitcast i8**%bq to i8*
%bs=getelementptr inbounds i8,i8*%br,i64 12
%bt=bitcast i8*%bs to i32*
%bu=load i32,i32*%bt,align 4
%bv=getelementptr inbounds i8*,i8**%bq,i64 1
%bw=bitcast i8**%bv to i32*
%bx=load i32,i32*%bw,align 4
br label%by
by:
%bz=phi i32[%bx,%bi],[%a9,%a7]
%bA=phi i32[%bu,%bi],[%a8,%a7]
%bB=phi i8**[%bq,%bi],[%bb,%a7]
%bC=phi i8*[%bj,%bi],[%bh,%a7]
store i8*%bC,i8**%f,align 8
%bD=load i8*,i8**%bB,align 8
%bE=getelementptr inbounds i8,i8*%bD,i64 16
%bF=bitcast i8*%bE to i8*(i8*,i8*)**
%bG=load i8*(i8*,i8*)*,i8*(i8*,i8*)**%bF,align 8
%bH=bitcast i8*%bD to i8**
%bI=load i8*,i8**%bH,align 8
store i8*%bI,i8**%h,align 8
%bJ=call i8*@sml_alloc(i32 inreg%D)#0
%bK=getelementptr inbounds i8,i8*%bJ,i64 -4
%bL=bitcast i8*%bK to i32*
store i32%ad,i32*%bL,align 4
call void@llvm.memset.p0i8.i32(i8*%bJ,i8 0,i32%D,i1 false)
%bM=icmp eq i32%bz,0
%bN=load i8*,i8**%e,align 8
store i8*null,i8**%e,align 8
%bO=getelementptr inbounds i8,i8*%bJ,i64%ae
br i1%bM,label%bP,label%bS
bP:
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bO,i8*%bN,i32%bA,i1 false)
%bQ=load i8*,i8**%f,align 8
store i8*null,i8**%f,align 8
%bR=getelementptr inbounds i8,i8*%bJ,i64%af
call void@llvm.memcpy.p0i8.p0i8.i32(i8*%bR,i8*%bQ,i32%bA,i1 false)
br label%bX
bS:
%bT=bitcast i8*%bO to i8**
store i8*%bN,i8**%bT,align 8
%bU=load i8*,i8**%f,align 8
store i8*null,i8**%f,align 8
%bV=getelementptr inbounds i8,i8*%bJ,i64%af
%bW=bitcast i8*%bV to i8**
store i8*%bU,i8**%bW,align 8
br label%bX
bX:
%bY=getelementptr inbounds i8,i8*%bJ,i64%ag
%bZ=bitcast i8*%bY to i32*
store i32%C,i32*%bZ,align 4
%b0=load i8*,i8**%h,align 8
store i8*null,i8**%h,align 8
%b1=call fastcc i8*%bG(i8*inreg%b0,i8*inreg%bJ)
%b2=bitcast i8*%b1 to i32*
%b3=load i32,i32*%b2,align 4
%b4=icmp eq i32%b3,0
br i1%b4,label%b7,label%b5
b5:
%b6=phi i32[%cs,%cn],[1,%aw],[%b3,%bX]
ret i32%b6
b7:
%b8=add nsw i32%ar,1
%b9=add nsw i32%au,-1
%ca=add nsw i32%az,-1
%cb=call i8*@sml_alloc(i32 inreg 20)#0
%cc=bitcast i8*%cb to i32*
%cd=getelementptr inbounds i8,i8*%cb,i64 -4
%ce=bitcast i8*%cd to i32*
store i32 1342177296,i32*%ce,align 4
%cf=getelementptr inbounds i8,i8*%cb,i64 12
%cg=bitcast i8*%cf to i32*
store i32 0,i32*%cg,align 1
store i32%b8,i32*%cc,align 4
%ch=getelementptr inbounds i8,i8*%cb,i64 4
%ci=bitcast i8*%ch to i32*
store i32%b9,i32*%ci,align 4
%cj=getelementptr inbounds i8,i8*%cb,i64 8
%ck=bitcast i8*%cj to i32*
store i32%ca,i32*%ck,align 4
%cl=getelementptr inbounds i8,i8*%cb,i64 16
%cm=bitcast i8*%cl to i32*
store i32 0,i32*%cm,align 4
br label%ah
cn:
%co=getelementptr inbounds i8,i8*%ap,i64 8
%cp=bitcast i8*%co to i32*
%cq=load i32,i32*%cp,align 4
%cr=icmp eq i32%cq,0
%cs=select i1%cr,i32 0,i32 2
br label%b5
}
define internal fastcc i8*@_SMLLLN6Vector7collateE_205(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*)*@_SMLLLN6Vector7collateE_204 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*)*@_SMLLLN6Vector7collateE_228 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*@_SMLFN6Vector7collateE(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*)*@_SMLLLN6Vector7collateE_205 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*)*@_SMLLLN6Vector7collateE_205 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*@_SMLLLN6Vector8fromListE_208(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*@_SMLFN6Vector8fromListE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN6Vector8tabulateE_209(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*@_SMLFN6Vector8tabulateE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN6Vector6updateE_210(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*@_SMLFN6Vector6updateE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN6Vector6concatE_211(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*@_SMLFN6Vector6concatE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN6Vector4appiE_212(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
tail call fastcc void@_SMLLLN6Vector4appiE_152(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*@_SMLLLN6Vector4appiE_213(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*@_SMLFN6Vector4appiE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN6Vector3appE_214(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
tail call fastcc void@_SMLLLN6Vector3appE_156(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*@_SMLLLN6Vector3appE_215(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*@_SMLFN6Vector3appE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN6Vector4mapiE_216(i8*inreg%a,i8*inreg%b,i8*inreg%c,i8*inreg%d,i8*inreg%e)#3 gc"smlsharp"{
%f=bitcast i8*%b to i32*
%g=load i32,i32*%f,align 4
%h=bitcast i8*%c to i32*
%i=load i32,i32*%h,align 4
%j=bitcast i8*%d to i32*
%k=load i32,i32*%j,align 4
%l=bitcast i8*%e to i32*
%m=load i32,i32*%l,align 4
%n=tail call fastcc i8*@_SMLFN6Vector4mapiE(i32 inreg%g,i32 inreg%i,i32 inreg%k,i32 inreg%m)
ret i8*%n
}
define internal fastcc i8*@_SMLLLN6Vector3mapE_217(i8*inreg%a,i8*inreg%b,i8*inreg%c,i8*inreg%d,i8*inreg%e)#3 gc"smlsharp"{
%f=bitcast i8*%b to i32*
%g=load i32,i32*%f,align 4
%h=bitcast i8*%c to i32*
%i=load i32,i32*%h,align 4
%j=bitcast i8*%d to i32*
%k=load i32,i32*%j,align 4
%l=bitcast i8*%e to i32*
%m=load i32,i32*%l,align 4
%n=tail call fastcc i8*@_SMLFN6Vector3mapE(i32 inreg%g,i32 inreg%i,i32 inreg%k,i32 inreg%m)
ret i8*%n
}
define internal fastcc i8*@_SMLLLN6Vector6foldliE_218(i8*inreg%a,i8*inreg%b,i8*inreg%c,i8*inreg%d,i8*inreg%e)#3 gc"smlsharp"{
%f=bitcast i8*%b to i32*
%g=load i32,i32*%f,align 4
%h=bitcast i8*%c to i32*
%i=load i32,i32*%h,align 4
%j=bitcast i8*%d to i32*
%k=load i32,i32*%j,align 4
%l=bitcast i8*%e to i32*
%m=load i32,i32*%l,align 4
%n=tail call fastcc i8*@_SMLFN6Vector6foldliE(i32 inreg%g,i32 inreg%i,i32 inreg%k,i32 inreg%m)
ret i8*%n
}
define internal fastcc i8*@_SMLLLN6Vector6foldriE_219(i8*inreg%a,i8*inreg%b,i8*inreg%c,i8*inreg%d,i8*inreg%e)#3 gc"smlsharp"{
%f=bitcast i8*%b to i32*
%g=load i32,i32*%f,align 4
%h=bitcast i8*%c to i32*
%i=load i32,i32*%h,align 4
%j=bitcast i8*%d to i32*
%k=load i32,i32*%j,align 4
%l=bitcast i8*%e to i32*
%m=load i32,i32*%l,align 4
%n=tail call fastcc i8*@_SMLFN6Vector6foldriE(i32 inreg%g,i32 inreg%i,i32 inreg%k,i32 inreg%m)
ret i8*%n
}
define internal fastcc i8*@_SMLLLN6Vector5foldlE_220(i8*inreg%a,i8*inreg%b,i8*inreg%c,i8*inreg%d,i8*inreg%e)#3 gc"smlsharp"{
%f=bitcast i8*%b to i32*
%g=load i32,i32*%f,align 4
%h=bitcast i8*%c to i32*
%i=load i32,i32*%h,align 4
%j=bitcast i8*%d to i32*
%k=load i32,i32*%j,align 4
%l=bitcast i8*%e to i32*
%m=load i32,i32*%l,align 4
%n=tail call fastcc i8*@_SMLFN6Vector5foldlE(i32 inreg%g,i32 inreg%i,i32 inreg%k,i32 inreg%m)
ret i8*%n
}
define internal fastcc i8*@_SMLLLN6Vector5foldrE_221(i8*inreg%a,i8*inreg%b,i8*inreg%c,i8*inreg%d,i8*inreg%e)#3 gc"smlsharp"{
%f=bitcast i8*%b to i32*
%g=load i32,i32*%f,align 4
%h=bitcast i8*%c to i32*
%i=load i32,i32*%h,align 4
%j=bitcast i8*%d to i32*
%k=load i32,i32*%j,align 4
%l=bitcast i8*%e to i32*
%m=load i32,i32*%l,align 4
%n=tail call fastcc i8*@_SMLFN6Vector5foldrE(i32 inreg%g,i32 inreg%i,i32 inreg%k,i32 inreg%m)
ret i8*%n
}
define internal fastcc i8*@_SMLLLN6Vector5findiE_222(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*@_SMLFN6Vector5findiE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN6Vector4findE_223(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*@_SMLFN6Vector4findE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN6Vector6existsE_224(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
%c=tail call fastcc i32@_SMLLLN6Vector6existsE_196(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*@_SMLLLN6Vector6existsE_225(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*@_SMLFN6Vector6existsE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN6Vector3allE_226(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
%c=tail call fastcc i32@_SMLLLN6Vector3allE_200(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*@_SMLLLN6Vector3allE_227(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*@_SMLFN6Vector3allE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
define internal fastcc i8*@_SMLLLN6Vector7collateE_228(i8*inreg%a,i8*inreg%b)#4 gc"smlsharp"{
%c=tail call fastcc i32@_SMLLLN6Vector7collateE_204(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*@_SMLLLN6Vector7collateE_229(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*@_SMLFN6Vector7collateE(i32 inreg%e,i32 inreg%g)
ret i8*%h
}
declare void@llvm.memcpy.p0i8.p0i8.i32(i8*,i8*,i32,i1)#0
declare void@llvm.memmove.p0i8.p0i8.i32(i8*,i8*,i32,i1)#0
declare void@llvm.memset.p0i8.i32(i8*,i8,i32,i1)#0
declare void@llvm.memset.p0i8.i64(i8*,i8,i64,i1)#0
attributes#0={nounwind}
attributes#1={noreturn}
attributes#2={noreturn nounwind}
attributes#3={nounwind uwtable}
attributes#4={uwtable}
