program abc126f
  implicit none
  integer :: m, k, i
  integer,allocatable :: b(:), c(:)

  read *, m, k
  if (m == 0) then
     if (k == 0) then
        print *, '0 0'
     else
        print *, '-1'
     end if
  else if (m == 1) then
     if (k == 0) then
        print *, '0 0 1 1'
     else
        print *, '-1'
     end if
  else if (k >= 2**m) then
     print *, '-1'
  else
     b = [(i,i=0,2**m-1)]
     b = pack(b,b/=k)
     c = [(i,i=2**m-1,0,-1)]
     c = pack(c,c/=k)
     print *, [b,k,c,k]
  end if
end program abc126f

; ModuleID = 'FIRModule'
source_filename = "FIRModule"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

@_QFEb.0 = internal unnamed_addr global ptr null
@_QFEb.8 = internal unnamed_addr global i64 0
@_QFEc.0 = internal unnamed_addr global ptr null
@_QFEc.8 = internal unnamed_addr global i64 0
@_QQcl.0e142d719f3174978acd787cf1638736 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_4298/source.f\00"
@_QQcl.302030 = linkonce constant [3 x i8] c"0 0"
@_QQcl.2D31 = linkonce constant [2 x i8] c"-1"
@_QQcl.30203020312031 = linkonce constant [7 x i8] c"0 0 1 1"
@_QQEnvironmentDefaults = local_unnamed_addr constant ptr null

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #1

define void @_QQmain() local_unnamed_addr {
  %1 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %2 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %3 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %4 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %5 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %6 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %7 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.0e142d719f3174978acd787cf1638736, i32 6)
  %11 = call i1 @_FortranAioInputInteger(ptr %10, ptr nonnull %9, i32 4)
  %12 = call i1 @_FortranAioInputInteger(ptr %10, ptr nonnull %8, i32 4)
  %13 = call i32 @_FortranAioEndIoStatement(ptr %10)
  %14 = load i32, ptr %9, align 4, !tbaa !3
  switch i32 %14, label %33 [
    i32 0, label %15
    i32 1, label %24
  ]

15:                                               ; preds = %0
  %16 = load i32, ptr %8, align 4, !tbaa !3
  %17 = icmp eq i32 %16, 0
  br i1 %17, label %18, label %21

18:                                               ; preds = %15
  %19 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.0e142d719f3174978acd787cf1638736, i32 9)
  %20 = call i1 @_FortranAioOutputAscii(ptr %19, ptr nonnull @_QQcl.302030, i64 3)
  br label %695

21:                                               ; preds = %15
  %22 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.0e142d719f3174978acd787cf1638736, i32 11)
  %23 = call i1 @_FortranAioOutputAscii(ptr %22, ptr nonnull @_QQcl.2D31, i64 2)
  br label %695

24:                                               ; preds = %0
  %25 = load i32, ptr %8, align 4, !tbaa !3
  %26 = icmp eq i32 %25, 0
  br i1 %26, label %27, label %30

27:                                               ; preds = %24
  %28 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.0e142d719f3174978acd787cf1638736, i32 15)
  %29 = call i1 @_FortranAioOutputAscii(ptr %28, ptr nonnull @_QQcl.30203020312031, i64 7)
  br label %695

30:                                               ; preds = %24
  %31 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.0e142d719f3174978acd787cf1638736, i32 17)
  %32 = call i1 @_FortranAioOutputAscii(ptr %31, ptr nonnull @_QQcl.2D31, i64 2)
  br label %695

33:                                               ; preds = %0
  %34 = load i32, ptr %8, align 4, !tbaa !3
  %35 = icmp slt i32 %14, 1
  br i1 %35, label %__mlir_math_ipowi_i32.exit.thread, label %.preheader.i

.preheader.i:                                     ; preds = %33
  %36 = and i32 %14, 1
  %.not3.i = icmp eq i32 %36, 0
  %37 = select i1 %.not3.i, i32 1, i32 2
  br label %.lr.ph.i

.lr.ph.i:                                         ; preds = %.preheader.i, %.lr.ph.i
  %spec.select4.i = phi i32 [ %spec.select.i, %.lr.ph.i ], [ %37, %.preheader.i ]
  %38 = phi i32 [ %40, %.lr.ph.i ], [ %14, %.preheader.i ]
  %39 = phi i32 [ %41, %.lr.ph.i ], [ 2, %.preheader.i ]
  %40 = lshr i32 %38, 1
  %41 = mul i32 %39, %39
  %42 = and i32 %38, 2
  %.not.i = icmp eq i32 %42, 0
  %43 = select i1 %.not.i, i32 1, i32 %41
  %spec.select.i = mul i32 %43, %spec.select4.i
  %44 = icmp ult i32 %38, 4
  br i1 %44, label %__mlir_math_ipowi_i32.exit, label %.lr.ph.i

__mlir_math_ipowi_i32.exit:                       ; preds = %.lr.ph.i
  %.not = icmp slt i32 %34, %spec.select.i
  br i1 %.not, label %49, label %46

__mlir_math_ipowi_i32.exit.thread:                ; preds = %33
  %.not1038 = icmp slt i32 %34, 0
  br i1 %.not1038, label %.thread, label %46

.thread:                                          ; preds = %__mlir_math_ipowi_i32.exit.thread
  %45 = call dereferenceable_or_null(128) ptr @malloc(i64 128)
  br label %._crit_edge

46:                                               ; preds = %__mlir_math_ipowi_i32.exit.thread, %__mlir_math_ipowi_i32.exit
  %47 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.0e142d719f3174978acd787cf1638736, i32 20)
  %48 = call i1 @_FortranAioOutputAscii(ptr %47, ptr nonnull @_QQcl.2D31, i64 2)
  br label %695

49:                                               ; preds = %__mlir_math_ipowi_i32.exit
  %50 = call dereferenceable_or_null(128) ptr @malloc(i64 128)
  br i1 %35, label %._crit_edge, label %.preheader.i919

.preheader.i919:                                  ; preds = %49
  %51 = and i32 %14, 1
  %.not3.i918 = icmp eq i32 %51, 0
  %52 = select i1 %.not3.i918, i32 1, i32 2
  %53 = icmp eq i32 %14, 1
  br i1 %53, label %__mlir_math_ipowi_i32.exit924, label %.lr.ph.i923

.lr.ph.i923:                                      ; preds = %.preheader.i919, %.lr.ph.i923
  %spec.select4.i920 = phi i32 [ %spec.select.i922, %.lr.ph.i923 ], [ %52, %.preheader.i919 ]
  %54 = phi i32 [ %56, %.lr.ph.i923 ], [ %14, %.preheader.i919 ]
  %55 = phi i32 [ %57, %.lr.ph.i923 ], [ 2, %.preheader.i919 ]
  %56 = lshr i32 %54, 1
  %57 = mul i32 %55, %55
  %58 = and i32 %54, 2
  %.not.i921 = icmp eq i32 %58, 0
  %59 = select i1 %.not.i921, i32 1, i32 %57
  %spec.select.i922 = mul i32 %59, %spec.select4.i920
  %60 = icmp ult i32 %54, 4
  br i1 %60, label %__mlir_math_ipowi_i32.exit924, label %.lr.ph.i923

__mlir_math_ipowi_i32.exit924:                    ; preds = %.lr.ph.i923, %.preheader.i919
  %common.ret.op.i917 = phi i32 [ %52, %.preheader.i919 ], [ %spec.select.i922, %.lr.ph.i923 ]
  %61 = add i32 %common.ret.op.i917, -1
  %62 = icmp sgt i32 %61, -1
  br i1 %62, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %__mlir_math_ipowi_i32.exit924
  %63 = zext i32 %61 to i64
  %64 = add nuw nsw i64 %63, 1
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %72
  %65 = phi i64 [ %75, %72 ], [ %64, %.lr.ph.preheader ]
  %66 = phi ptr [ %73, %72 ], [ %50, %.lr.ph.preheader ]
  %.0962 = phi i64 [ %.1, %72 ], [ 32, %.lr.ph.preheader ]
  %.0746961 = phi i64 [ %67, %72 ], [ 0, %.lr.ph.preheader ]
  %indvars1017 = trunc i64 %.0746961 to i32
  %67 = add nuw nsw i64 %.0746961, 1
  %.not916 = icmp sgt i64 %.0962, %67
  br i1 %.not916, label %72, label %68

68:                                               ; preds = %.lr.ph
  %69 = shl nuw i64 %67, 1
  %70 = shl i64 %67, 3
  %71 = call ptr @realloc(ptr %66, i64 %70)
  br label %72

72:                                               ; preds = %68, %.lr.ph
  %.1 = phi i64 [ %69, %68 ], [ %.0962, %.lr.ph ]
  %73 = phi ptr [ %71, %68 ], [ %66, %.lr.ph ]
  %74 = getelementptr i32, ptr %73, i64 %.0746961
  store i32 %indvars1017, ptr %74, align 4, !tbaa !3
  %75 = add nsw i64 %65, -1
  %76 = icmp sgt i64 %65, 1
  br i1 %76, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %72, %.thread, %49, %__mlir_math_ipowi_i32.exit924
  %.0746.lcssa = phi i64 [ 0, %__mlir_math_ipowi_i32.exit924 ], [ 0, %49 ], [ 0, %.thread ], [ %67, %72 ]
  %.lcssa960 = phi ptr [ %50, %__mlir_math_ipowi_i32.exit924 ], [ %50, %49 ], [ %45, %.thread ], [ %73, %72 ]
  %.lcssa9601080 = ptrtoint ptr %.lcssa960 to i64
  %.unpack = load ptr, ptr @_QFEb.0, align 8, !tbaa !7
  %.unpack1083 = ptrtoint ptr %.unpack to i64
  %.not788 = icmp eq ptr %.unpack, null
  br i1 %.not788, label %146, label %77

77:                                               ; preds = %._crit_edge
  %.unpack783.unpack.unpack785 = load i64, ptr @_QFEb.8, align 8, !tbaa !7
  %.not946 = icmp eq i64 %.unpack783.unpack.unpack785, %.0746.lcssa
  br i1 %.not946, label %.preheader958, label %93

.preheader958:                                    ; preds = %77
  %78 = icmp sgt i64 %.0746.lcssa, 0
  br i1 %78, label %.lr.ph966.preheader, label %._crit_edge967._crit_edge

.lr.ph966.preheader:                              ; preds = %.preheader958
  %min.iters.check1087 = icmp ult i64 %.0746.lcssa, 8
  %79 = sub i64 %.unpack1083, %.lcssa9601080
  %diff.check1084 = icmp ult i64 %79, 32
  %or.cond = select i1 %min.iters.check1087, i1 true, i1 %diff.check1084
  br i1 %or.cond, label %.lr.ph966.preheader1354, label %vector.ph1088

vector.ph1088:                                    ; preds = %.lr.ph966.preheader
  %n.vec1090 = and i64 %.0746.lcssa, -8
  br label %vector.body1093

vector.body1093:                                  ; preds = %vector.body1093, %vector.ph1088
  %index1094 = phi i64 [ 0, %vector.ph1088 ], [ %index.next1097, %vector.body1093 ]
  %80 = getelementptr i32, ptr %.lcssa960, i64 %index1094
  %wide.load1095 = load <4 x i32>, ptr %80, align 4, !tbaa !3
  %81 = getelementptr i32, ptr %80, i64 4
  %wide.load1096 = load <4 x i32>, ptr %81, align 4, !tbaa !3
  %82 = getelementptr i32, ptr %.unpack, i64 %index1094
  store <4 x i32> %wide.load1095, ptr %82, align 4, !tbaa !3
  %83 = getelementptr i32, ptr %82, i64 4
  store <4 x i32> %wide.load1096, ptr %83, align 4, !tbaa !3
  %index.next1097 = add nuw i64 %index1094, 8
  %84 = icmp eq i64 %index.next1097, %n.vec1090
  br i1 %84, label %middle.block1085, label %vector.body1093, !llvm.loop !9

middle.block1085:                                 ; preds = %vector.body1093
  %cmp.n1092 = icmp eq i64 %.0746.lcssa, %n.vec1090
  br i1 %cmp.n1092, label %._crit_edge967._crit_edge, label %.lr.ph966.preheader1354

.lr.ph966.preheader1354:                          ; preds = %.lr.ph966.preheader, %middle.block1085
  %.ph1355 = phi i64 [ 0, %.lr.ph966.preheader ], [ %n.vec1090, %middle.block1085 ]
  %85 = xor i64 %.ph1355, -1
  %86 = add i64 %.0746.lcssa, %85
  %xtraiter1361 = and i64 %.0746.lcssa, 3
  %lcmp.mod1362.not = icmp eq i64 %xtraiter1361, 0
  br i1 %lcmp.mod1362.not, label %.lr.ph966.prol.loopexit, label %.lr.ph966.prol

.lr.ph966.prol:                                   ; preds = %.lr.ph966.preheader1354, %.lr.ph966.prol
  %87 = phi i64 [ %88, %.lr.ph966.prol ], [ %.ph1355, %.lr.ph966.preheader1354 ]
  %prol.iter1363 = phi i64 [ %prol.iter1363.next, %.lr.ph966.prol ], [ 0, %.lr.ph966.preheader1354 ]
  %88 = add nuw nsw i64 %87, 1
  %89 = getelementptr i32, ptr %.lcssa960, i64 %87
  %90 = load i32, ptr %89, align 4, !tbaa !3
  %91 = getelementptr i32, ptr %.unpack, i64 %87
  store i32 %90, ptr %91, align 4, !tbaa !3
  %prol.iter1363.next = add i64 %prol.iter1363, 1
  %prol.iter1363.cmp.not = icmp eq i64 %prol.iter1363.next, %xtraiter1361
  br i1 %prol.iter1363.cmp.not, label %.lr.ph966.prol.loopexit, label %.lr.ph966.prol, !llvm.loop !12

.lr.ph966.prol.loopexit:                          ; preds = %.lr.ph966.prol, %.lr.ph966.preheader1354
  %.unr1364 = phi i64 [ %.ph1355, %.lr.ph966.preheader1354 ], [ %88, %.lr.ph966.prol ]
  %92 = icmp ult i64 %86, 3
  br i1 %92, label %._crit_edge967._crit_edge, label %.lr.ph966

93:                                               ; preds = %77
  %94 = shl i64 %.0746.lcssa, 2
  %95 = call ptr @malloc(i64 %94)
  %96 = icmp sgt i64 %.0746.lcssa, 0
  br i1 %96, label %.lr.ph965.preheader, label %.thread933

.lr.ph965.preheader:                              ; preds = %93
  %97 = ptrtoint ptr %95 to i64
  %min.iters.check = icmp ult i64 %.0746.lcssa, 8
  %98 = sub i64 %97, %.lcssa9601080
  %diff.check = icmp ult i64 %98, 32
  %or.cond1308 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond1308, label %.lr.ph965.preheader1356, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph965.preheader
  %n.vec = and i64 %.0746.lcssa, -8
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %99 = getelementptr i32, ptr %.lcssa960, i64 %index
  %wide.load = load <4 x i32>, ptr %99, align 4, !tbaa !3
  %100 = getelementptr i32, ptr %99, i64 4
  %wide.load1081 = load <4 x i32>, ptr %100, align 4, !tbaa !3
  %101 = getelementptr i32, ptr %95, i64 %index
  store <4 x i32> %wide.load, ptr %101, align 4, !tbaa !3
  %102 = getelementptr i32, ptr %101, i64 4
  store <4 x i32> %wide.load1081, ptr %102, align 4, !tbaa !3
  %index.next = add nuw i64 %index, 8
  %103 = icmp eq i64 %index.next, %n.vec
  br i1 %103, label %middle.block, label %vector.body, !llvm.loop !14

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %.0746.lcssa, %n.vec
  br i1 %cmp.n, label %.loopexit957, label %.lr.ph965.preheader1356

.lr.ph965.preheader1356:                          ; preds = %.lr.ph965.preheader, %middle.block
  %.ph1357 = phi i64 [ 0, %.lr.ph965.preheader ], [ %n.vec, %middle.block ]
  %104 = xor i64 %.ph1357, -1
  %105 = add i64 %.0746.lcssa, %104
  %xtraiter = and i64 %.0746.lcssa, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph965.prol.loopexit, label %.lr.ph965.prol

.lr.ph965.prol:                                   ; preds = %.lr.ph965.preheader1356, %.lr.ph965.prol
  %106 = phi i64 [ %107, %.lr.ph965.prol ], [ %.ph1357, %.lr.ph965.preheader1356 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph965.prol ], [ 0, %.lr.ph965.preheader1356 ]
  %107 = add nuw nsw i64 %106, 1
  %108 = getelementptr i32, ptr %.lcssa960, i64 %106
  %109 = load i32, ptr %108, align 4, !tbaa !3
  %110 = getelementptr i32, ptr %95, i64 %106
  store i32 %109, ptr %110, align 4, !tbaa !3
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph965.prol.loopexit, label %.lr.ph965.prol, !llvm.loop !15

.lr.ph965.prol.loopexit:                          ; preds = %.lr.ph965.prol, %.lr.ph965.preheader1356
  %.unr = phi i64 [ %.ph1357, %.lr.ph965.preheader1356 ], [ %107, %.lr.ph965.prol ]
  %111 = icmp ult i64 %105, 3
  br i1 %111, label %.loopexit957, label %.lr.ph965

.lr.ph965:                                        ; preds = %.lr.ph965.prol.loopexit, %.lr.ph965
  %112 = phi i64 [ %125, %.lr.ph965 ], [ %.unr, %.lr.ph965.prol.loopexit ]
  %113 = add nuw nsw i64 %112, 1
  %114 = getelementptr i32, ptr %.lcssa960, i64 %112
  %115 = load i32, ptr %114, align 4, !tbaa !3
  %116 = getelementptr i32, ptr %95, i64 %112
  store i32 %115, ptr %116, align 4, !tbaa !3
  %117 = add nuw nsw i64 %112, 2
  %118 = getelementptr i32, ptr %.lcssa960, i64 %113
  %119 = load i32, ptr %118, align 4, !tbaa !3
  %120 = getelementptr i32, ptr %95, i64 %113
  store i32 %119, ptr %120, align 4, !tbaa !3
  %121 = add nuw nsw i64 %112, 3
  %122 = getelementptr i32, ptr %.lcssa960, i64 %117
  %123 = load i32, ptr %122, align 4, !tbaa !3
  %124 = getelementptr i32, ptr %95, i64 %117
  store i32 %123, ptr %124, align 4, !tbaa !3
  %125 = add nuw nsw i64 %112, 4
  %126 = getelementptr i32, ptr %.lcssa960, i64 %121
  %127 = load i32, ptr %126, align 4, !tbaa !3
  %128 = getelementptr i32, ptr %95, i64 %121
  store i32 %127, ptr %128, align 4, !tbaa !3
  %exitcond.not.3 = icmp eq i64 %125, %.0746.lcssa
  br i1 %exitcond.not.3, label %.loopexit957, label %.lr.ph965, !llvm.loop !16

.lr.ph966:                                        ; preds = %.lr.ph966.prol.loopexit, %.lr.ph966
  %129 = phi i64 [ %142, %.lr.ph966 ], [ %.unr1364, %.lr.ph966.prol.loopexit ]
  %130 = add nuw nsw i64 %129, 1
  %131 = getelementptr i32, ptr %.lcssa960, i64 %129
  %132 = load i32, ptr %131, align 4, !tbaa !3
  %133 = getelementptr i32, ptr %.unpack, i64 %129
  store i32 %132, ptr %133, align 4, !tbaa !3
  %134 = add nuw nsw i64 %129, 2
  %135 = getelementptr i32, ptr %.lcssa960, i64 %130
  %136 = load i32, ptr %135, align 4, !tbaa !3
  %137 = getelementptr i32, ptr %.unpack, i64 %130
  store i32 %136, ptr %137, align 4, !tbaa !3
  %138 = add nuw nsw i64 %129, 3
  %139 = getelementptr i32, ptr %.lcssa960, i64 %134
  %140 = load i32, ptr %139, align 4, !tbaa !3
  %141 = getelementptr i32, ptr %.unpack, i64 %134
  store i32 %140, ptr %141, align 4, !tbaa !3
  %142 = add nuw nsw i64 %129, 4
  %143 = getelementptr i32, ptr %.lcssa960, i64 %138
  %144 = load i32, ptr %143, align 4, !tbaa !3
  %145 = getelementptr i32, ptr %.unpack, i64 %138
  store i32 %144, ptr %145, align 4, !tbaa !3
  %exitcond1018.not.3 = icmp eq i64 %142, %.0746.lcssa
  br i1 %exitcond1018.not.3, label %._crit_edge967._crit_edge, label %.lr.ph966, !llvm.loop !17

146:                                              ; preds = %._crit_edge
  %147 = shl i64 %.0746.lcssa, 2
  %148 = call ptr @malloc(i64 %147)
  %149 = icmp sgt i64 %.0746.lcssa, 0
  br i1 %149, label %.lr.ph969.preheader, label %.loopexit957.thread

.lr.ph969.preheader:                              ; preds = %146
  %150 = ptrtoint ptr %148 to i64
  %min.iters.check1102 = icmp ult i64 %.0746.lcssa, 8
  %151 = sub i64 %150, %.lcssa9601080
  %diff.check1099 = icmp ult i64 %151, 32
  %or.cond1309 = select i1 %min.iters.check1102, i1 true, i1 %diff.check1099
  br i1 %or.cond1309, label %.lr.ph969.preheader1352, label %vector.ph1103

vector.ph1103:                                    ; preds = %.lr.ph969.preheader
  %n.vec1105 = and i64 %.0746.lcssa, -8
  br label %vector.body1108

vector.body1108:                                  ; preds = %vector.body1108, %vector.ph1103
  %index1109 = phi i64 [ 0, %vector.ph1103 ], [ %index.next1112, %vector.body1108 ]
  %152 = getelementptr i32, ptr %.lcssa960, i64 %index1109
  %wide.load1110 = load <4 x i32>, ptr %152, align 4, !tbaa !3
  %153 = getelementptr i32, ptr %152, i64 4
  %wide.load1111 = load <4 x i32>, ptr %153, align 4, !tbaa !3
  %154 = getelementptr i32, ptr %148, i64 %index1109
  store <4 x i32> %wide.load1110, ptr %154, align 4, !tbaa !3
  %155 = getelementptr i32, ptr %154, i64 4
  store <4 x i32> %wide.load1111, ptr %155, align 4, !tbaa !3
  %index.next1112 = add nuw i64 %index1109, 8
  %156 = icmp eq i64 %index.next1112, %n.vec1105
  br i1 %156, label %middle.block1100, label %vector.body1108, !llvm.loop !18

middle.block1100:                                 ; preds = %vector.body1108
  %cmp.n1107 = icmp eq i64 %.0746.lcssa, %n.vec1105
  br i1 %cmp.n1107, label %.loopexit957, label %.lr.ph969.preheader1352

.lr.ph969.preheader1352:                          ; preds = %.lr.ph969.preheader, %middle.block1100
  %.ph1353 = phi i64 [ 0, %.lr.ph969.preheader ], [ %n.vec1105, %middle.block1100 ]
  %157 = xor i64 %.ph1353, -1
  %158 = add i64 %.0746.lcssa, %157
  %xtraiter1365 = and i64 %.0746.lcssa, 3
  %lcmp.mod1366.not = icmp eq i64 %xtraiter1365, 0
  br i1 %lcmp.mod1366.not, label %.lr.ph969.prol.loopexit, label %.lr.ph969.prol

.lr.ph969.prol:                                   ; preds = %.lr.ph969.preheader1352, %.lr.ph969.prol
  %159 = phi i64 [ %160, %.lr.ph969.prol ], [ %.ph1353, %.lr.ph969.preheader1352 ]
  %prol.iter1367 = phi i64 [ %prol.iter1367.next, %.lr.ph969.prol ], [ 0, %.lr.ph969.preheader1352 ]
  %160 = add nuw nsw i64 %159, 1
  %161 = getelementptr i32, ptr %.lcssa960, i64 %159
  %162 = load i32, ptr %161, align 4, !tbaa !3
  %163 = getelementptr i32, ptr %148, i64 %159
  store i32 %162, ptr %163, align 4, !tbaa !3
  %prol.iter1367.next = add i64 %prol.iter1367, 1
  %prol.iter1367.cmp.not = icmp eq i64 %prol.iter1367.next, %xtraiter1365
  br i1 %prol.iter1367.cmp.not, label %.lr.ph969.prol.loopexit, label %.lr.ph969.prol, !llvm.loop !19

.lr.ph969.prol.loopexit:                          ; preds = %.lr.ph969.prol, %.lr.ph969.preheader1352
  %.unr1368 = phi i64 [ %.ph1353, %.lr.ph969.preheader1352 ], [ %160, %.lr.ph969.prol ]
  %164 = icmp ult i64 %158, 3
  br i1 %164, label %.loopexit957, label %.lr.ph969

.lr.ph969:                                        ; preds = %.lr.ph969.prol.loopexit, %.lr.ph969
  %165 = phi i64 [ %178, %.lr.ph969 ], [ %.unr1368, %.lr.ph969.prol.loopexit ]
  %166 = add nuw nsw i64 %165, 1
  %167 = getelementptr i32, ptr %.lcssa960, i64 %165
  %168 = load i32, ptr %167, align 4, !tbaa !3
  %169 = getelementptr i32, ptr %148, i64 %165
  store i32 %168, ptr %169, align 4, !tbaa !3
  %170 = add nuw nsw i64 %165, 2
  %171 = getelementptr i32, ptr %.lcssa960, i64 %166
  %172 = load i32, ptr %171, align 4, !tbaa !3
  %173 = getelementptr i32, ptr %148, i64 %166
  store i32 %172, ptr %173, align 4, !tbaa !3
  %174 = add nuw nsw i64 %165, 3
  %175 = getelementptr i32, ptr %.lcssa960, i64 %170
  %176 = load i32, ptr %175, align 4, !tbaa !3
  %177 = getelementptr i32, ptr %148, i64 %170
  store i32 %176, ptr %177, align 4, !tbaa !3
  %178 = add nuw nsw i64 %165, 4
  %179 = getelementptr i32, ptr %.lcssa960, i64 %174
  %180 = load i32, ptr %179, align 4, !tbaa !3
  %181 = getelementptr i32, ptr %148, i64 %174
  store i32 %180, ptr %181, align 4, !tbaa !3
  %exitcond1019.not.3 = icmp eq i64 %178, %.0746.lcssa
  br i1 %exitcond1019.not.3, label %.loopexit957, label %.lr.ph969, !llvm.loop !20

.loopexit957:                                     ; preds = %.lr.ph965.prol.loopexit, %.lr.ph965, %.lr.ph969.prol.loopexit, %.lr.ph969, %middle.block, %middle.block1100
  %.ph = phi ptr [ %148, %middle.block1100 ], [ %95, %middle.block ], [ %148, %.lr.ph969 ], [ %148, %.lr.ph969.prol.loopexit ], [ %95, %.lr.ph965 ], [ %95, %.lr.ph965.prol.loopexit ]
  br i1 %.not788, label %.loopexit957.thread, label %.thread933

.thread933:                                       ; preds = %93, %.loopexit957
  %.ph1045 = phi ptr [ %.ph, %.loopexit957 ], [ %95, %93 ]
  call void @free(ptr nonnull %.unpack)
  br label %.loopexit957.thread

.loopexit957.thread:                              ; preds = %146, %.thread933, %.loopexit957
  %.ph1042 = phi ptr [ %.ph1045, %.thread933 ], [ %.ph, %.loopexit957 ], [ %148, %146 ]
  store ptr %.ph1042, ptr @_QFEb.0, align 8, !tbaa !7
  store i64 %.0746.lcssa, ptr @_QFEb.8, align 8, !tbaa !7
  br label %._crit_edge967._crit_edge

._crit_edge967._crit_edge:                        ; preds = %.lr.ph966.prol.loopexit, %.lr.ph966, %.preheader958, %middle.block1085, %.loopexit957.thread
  %.unpack789 = phi ptr [ %.ph1042, %.loopexit957.thread ], [ %.unpack, %middle.block1085 ], [ %.unpack, %.preheader958 ], [ %.unpack, %.lr.ph966 ], [ %.unpack, %.lr.ph966.prol.loopexit ]
  call void @free(ptr %.lcssa960)
  store ptr %.unpack789, ptr %5, align 8, !tbaa !7
  %.fca.1.gep128 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep128, align 8, !tbaa !7
  %.fca.2.gep130 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep130, align 8, !tbaa !7
  %.fca.3.gep132 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep132, align 4, !tbaa !7
  %.fca.4.gep134 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 4
  store i8 9, ptr %.fca.4.gep134, align 1, !tbaa !7
  %.fca.5.gep136 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep136, align 2, !tbaa !7
  %.fca.6.gep138 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep138, align 1, !tbaa !7
  %.fca.7.0.0.gep140 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep140, align 8, !tbaa !7
  %.fca.7.0.1.gep142 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 7, i64 0, i64 1
  store i64 %.0746.lcssa, ptr %.fca.7.0.1.gep142, align 8, !tbaa !7
  %.fca.7.0.2.gep144 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep144, align 8, !tbaa !7
  %182 = load i32, ptr %8, align 4, !tbaa !3
  %183 = shl i64 %.0746.lcssa, 2
  %184 = call ptr @malloc(i64 %183)
  %185 = icmp sgt i64 %.0746.lcssa, 0
  br i1 %185, label %.lr.ph971.preheader, label %._crit_edge972

.lr.ph971.preheader:                              ; preds = %._crit_edge967._crit_edge
  %186 = ptrtoint ptr %184 to i64
  %.unpack7891114 = ptrtoint ptr %.unpack789 to i64
  %min.iters.check1118 = icmp ult i64 %.0746.lcssa, 8
  %187 = sub i64 %186, %.unpack7891114
  %diff.check1115 = icmp ult i64 %187, 32
  %or.cond1310 = select i1 %min.iters.check1118, i1 true, i1 %diff.check1115
  br i1 %or.cond1310, label %.lr.ph971.preheader1350, label %vector.ph1119

vector.ph1119:                                    ; preds = %.lr.ph971.preheader
  %n.vec1121 = and i64 %.0746.lcssa, -8
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %182, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert1128 = insertelement <4 x i32> poison, i32 %182, i64 0
  %broadcast.splat1129 = shufflevector <4 x i32> %broadcast.splatinsert1128, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body1124

vector.body1124:                                  ; preds = %vector.body1124, %vector.ph1119
  %index1125 = phi i64 [ 0, %vector.ph1119 ], [ %index.next1130, %vector.body1124 ]
  %188 = getelementptr i32, ptr %.unpack789, i64 %index1125
  %wide.load1126 = load <4 x i32>, ptr %188, align 4, !tbaa !3
  %189 = getelementptr i32, ptr %188, i64 4
  %wide.load1127 = load <4 x i32>, ptr %189, align 4, !tbaa !3
  %190 = icmp ne <4 x i32> %wide.load1126, %broadcast.splat
  %191 = icmp ne <4 x i32> %wide.load1127, %broadcast.splat1129
  %192 = zext <4 x i1> %190 to <4 x i32>
  %193 = zext <4 x i1> %191 to <4 x i32>
  %194 = getelementptr i32, ptr %184, i64 %index1125
  store <4 x i32> %192, ptr %194, align 4, !tbaa !3
  %195 = getelementptr i32, ptr %194, i64 4
  store <4 x i32> %193, ptr %195, align 4, !tbaa !3
  %index.next1130 = add nuw i64 %index1125, 8
  %196 = icmp eq i64 %index.next1130, %n.vec1121
  br i1 %196, label %middle.block1116, label %vector.body1124, !llvm.loop !21

middle.block1116:                                 ; preds = %vector.body1124
  %cmp.n1123 = icmp eq i64 %.0746.lcssa, %n.vec1121
  br i1 %cmp.n1123, label %._crit_edge972, label %.lr.ph971.preheader1350

.lr.ph971.preheader1350:                          ; preds = %.lr.ph971.preheader, %middle.block1116
  %.ph1351 = phi i64 [ 0, %.lr.ph971.preheader ], [ %n.vec1121, %middle.block1116 ]
  %197 = xor i64 %.ph1351, -1
  %198 = add i64 %.0746.lcssa, %197
  %xtraiter1369 = and i64 %.0746.lcssa, 3
  %lcmp.mod1370.not = icmp eq i64 %xtraiter1369, 0
  br i1 %lcmp.mod1370.not, label %.lr.ph971.prol.loopexit, label %.lr.ph971.prol

.lr.ph971.prol:                                   ; preds = %.lr.ph971.preheader1350, %.lr.ph971.prol
  %199 = phi i64 [ %204, %.lr.ph971.prol ], [ %.ph1351, %.lr.ph971.preheader1350 ]
  %prol.iter1371 = phi i64 [ %prol.iter1371.next, %.lr.ph971.prol ], [ 0, %.lr.ph971.preheader1350 ]
  %200 = getelementptr i32, ptr %.unpack789, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !3
  %202 = icmp ne i32 %201, %182
  %203 = zext i1 %202 to i32
  %204 = add nuw nsw i64 %199, 1
  %205 = getelementptr i32, ptr %184, i64 %199
  store i32 %203, ptr %205, align 4, !tbaa !3
  %prol.iter1371.next = add i64 %prol.iter1371, 1
  %prol.iter1371.cmp.not = icmp eq i64 %prol.iter1371.next, %xtraiter1369
  br i1 %prol.iter1371.cmp.not, label %.lr.ph971.prol.loopexit, label %.lr.ph971.prol, !llvm.loop !22

.lr.ph971.prol.loopexit:                          ; preds = %.lr.ph971.prol, %.lr.ph971.preheader1350
  %.unr1372 = phi i64 [ %.ph1351, %.lr.ph971.preheader1350 ], [ %204, %.lr.ph971.prol ]
  %206 = icmp ult i64 %198, 3
  br i1 %206, label %._crit_edge972, label %.lr.ph971

.lr.ph971:                                        ; preds = %.lr.ph971.prol.loopexit, %.lr.ph971
  %207 = phi i64 [ %230, %.lr.ph971 ], [ %.unr1372, %.lr.ph971.prol.loopexit ]
  %208 = getelementptr i32, ptr %.unpack789, i64 %207
  %209 = load i32, ptr %208, align 4, !tbaa !3
  %210 = icmp ne i32 %209, %182
  %211 = zext i1 %210 to i32
  %212 = add nuw nsw i64 %207, 1
  %213 = getelementptr i32, ptr %184, i64 %207
  store i32 %211, ptr %213, align 4, !tbaa !3
  %214 = getelementptr i32, ptr %.unpack789, i64 %212
  %215 = load i32, ptr %214, align 4, !tbaa !3
  %216 = icmp ne i32 %215, %182
  %217 = zext i1 %216 to i32
  %218 = add nuw nsw i64 %207, 2
  %219 = getelementptr i32, ptr %184, i64 %212
  store i32 %217, ptr %219, align 4, !tbaa !3
  %220 = getelementptr i32, ptr %.unpack789, i64 %218
  %221 = load i32, ptr %220, align 4, !tbaa !3
  %222 = icmp ne i32 %221, %182
  %223 = zext i1 %222 to i32
  %224 = add nuw nsw i64 %207, 3
  %225 = getelementptr i32, ptr %184, i64 %218
  store i32 %223, ptr %225, align 4, !tbaa !3
  %226 = getelementptr i32, ptr %.unpack789, i64 %224
  %227 = load i32, ptr %226, align 4, !tbaa !3
  %228 = icmp ne i32 %227, %182
  %229 = zext i1 %228 to i32
  %230 = add nuw nsw i64 %207, 4
  %231 = getelementptr i32, ptr %184, i64 %224
  store i32 %229, ptr %231, align 4, !tbaa !3
  %exitcond1020.not.3 = icmp eq i64 %230, %.0746.lcssa
  br i1 %exitcond1020.not.3, label %._crit_edge972, label %.lr.ph971, !llvm.loop !23

._crit_edge972:                                   ; preds = %.lr.ph971.prol.loopexit, %.lr.ph971, %middle.block1116, %._crit_edge967._crit_edge
  store ptr %184, ptr %4, align 8, !tbaa !7
  %.fca.1.gep148 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep148, align 8, !tbaa !7
  %.fca.2.gep150 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep150, align 8, !tbaa !7
  %.fca.3.gep152 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep152, align 4, !tbaa !7
  %.fca.4.gep154 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 4
  store i8 14, ptr %.fca.4.gep154, align 1, !tbaa !7
  %.fca.5.gep156 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep156, align 2, !tbaa !7
  %.fca.6.gep158 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep158, align 1, !tbaa !7
  %.fca.7.0.0.gep160 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep160, align 8, !tbaa !7
  %.fca.7.0.1.gep162 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 7, i64 0, i64 1
  store i64 %.0746.lcssa, ptr %.fca.7.0.1.gep162, align 8, !tbaa !7
  %.fca.7.0.2.gep164 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep164, align 8, !tbaa !7
  store ptr null, ptr %7, align 8, !tbaa !7
  %.fca.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %7, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep, align 8, !tbaa !7
  %.fca.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %7, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep, align 8, !tbaa !7
  %.fca.3.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %7, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep, align 4, !tbaa !7
  %.fca.4.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %7, i64 0, i32 4
  store i8 9, ptr %.fca.4.gep, align 1, !tbaa !7
  %.fca.5.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %7, i64 0, i32 5
  store i8 2, ptr %.fca.5.gep, align 2, !tbaa !7
  %.fca.6.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %7, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep, align 1, !tbaa !7
  %.fca.7.0.0.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %7, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep, align 8, !tbaa !7
  %.fca.7.0.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %7, i64 0, i32 7, i64 0, i64 1
  store i64 0, ptr %.fca.7.0.1.gep, align 8, !tbaa !7
  %.fca.7.0.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %7, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep, align 8, !tbaa !7
  %232 = call {} @_FortranAPack(ptr nonnull %7, ptr nonnull %5, ptr nonnull %4, ptr null, ptr nonnull @_QQcl.0e142d719f3174978acd787cf1638736, i32 23)
  %.fca.0.load = load ptr, ptr %7, align 8, !tbaa !7
  %.fca.0.load1132 = ptrtoint ptr %.fca.0.load to i64
  %.fca.7.0.1.load = load i64, ptr %.fca.7.0.1.gep, align 8, !tbaa !7
  %.unpack801 = load ptr, ptr @_QFEb.0, align 8, !tbaa !7
  %.unpack8011148 = ptrtoint ptr %.unpack801 to i64
  %.not813 = icmp eq ptr %.unpack801, null
  br i1 %.not813, label %302, label %233

233:                                              ; preds = %._crit_edge972
  %.unpack808.unpack.unpack810 = load i64, ptr @_QFEb.8, align 8, !tbaa !7
  %.not947 = icmp eq i64 %.unpack808.unpack.unpack810, %.fca.7.0.1.load
  br i1 %.not947, label %.preheader955, label %249

.preheader955:                                    ; preds = %233
  %234 = icmp sgt i64 %.fca.7.0.1.load, 0
  br i1 %234, label %.lr.ph975.preheader, label %._crit_edge976

.lr.ph975.preheader:                              ; preds = %.preheader955
  %min.iters.check1152 = icmp ult i64 %.fca.7.0.1.load, 8
  %235 = sub i64 %.unpack8011148, %.fca.0.load1132
  %diff.check1149 = icmp ult i64 %235, 32
  %or.cond1311 = select i1 %min.iters.check1152, i1 true, i1 %diff.check1149
  br i1 %or.cond1311, label %.lr.ph975.preheader1345, label %vector.ph1153

vector.ph1153:                                    ; preds = %.lr.ph975.preheader
  %n.vec1155 = and i64 %.fca.7.0.1.load, -8
  br label %vector.body1158

vector.body1158:                                  ; preds = %vector.body1158, %vector.ph1153
  %index1159 = phi i64 [ 0, %vector.ph1153 ], [ %index.next1162, %vector.body1158 ]
  %236 = getelementptr i32, ptr %.fca.0.load, i64 %index1159
  %wide.load1160 = load <4 x i32>, ptr %236, align 4, !tbaa !3
  %237 = getelementptr i32, ptr %236, i64 4
  %wide.load1161 = load <4 x i32>, ptr %237, align 4, !tbaa !3
  %238 = getelementptr i32, ptr %.unpack801, i64 %index1159
  store <4 x i32> %wide.load1160, ptr %238, align 4, !tbaa !3
  %239 = getelementptr i32, ptr %238, i64 4
  store <4 x i32> %wide.load1161, ptr %239, align 4, !tbaa !3
  %index.next1162 = add nuw i64 %index1159, 8
  %240 = icmp eq i64 %index.next1162, %n.vec1155
  br i1 %240, label %middle.block1150, label %vector.body1158, !llvm.loop !24

middle.block1150:                                 ; preds = %vector.body1158
  %cmp.n1157 = icmp eq i64 %.fca.7.0.1.load, %n.vec1155
  br i1 %cmp.n1157, label %._crit_edge976, label %.lr.ph975.preheader1345

.lr.ph975.preheader1345:                          ; preds = %.lr.ph975.preheader, %middle.block1150
  %.ph1346 = phi i64 [ 0, %.lr.ph975.preheader ], [ %n.vec1155, %middle.block1150 ]
  %241 = xor i64 %.ph1346, -1
  %242 = add i64 %.fca.7.0.1.load, %241
  %xtraiter1377 = and i64 %.fca.7.0.1.load, 3
  %lcmp.mod1378.not = icmp eq i64 %xtraiter1377, 0
  br i1 %lcmp.mod1378.not, label %.lr.ph975.prol.loopexit, label %.lr.ph975.prol

.lr.ph975.prol:                                   ; preds = %.lr.ph975.preheader1345, %.lr.ph975.prol
  %243 = phi i64 [ %246, %.lr.ph975.prol ], [ %.ph1346, %.lr.ph975.preheader1345 ]
  %prol.iter1379 = phi i64 [ %prol.iter1379.next, %.lr.ph975.prol ], [ 0, %.lr.ph975.preheader1345 ]
  %244 = getelementptr i32, ptr %.fca.0.load, i64 %243
  %245 = load i32, ptr %244, align 4, !tbaa !3
  %246 = add nuw nsw i64 %243, 1
  %247 = getelementptr i32, ptr %.unpack801, i64 %243
  store i32 %245, ptr %247, align 4, !tbaa !3
  %prol.iter1379.next = add i64 %prol.iter1379, 1
  %prol.iter1379.cmp.not = icmp eq i64 %prol.iter1379.next, %xtraiter1377
  br i1 %prol.iter1379.cmp.not, label %.lr.ph975.prol.loopexit, label %.lr.ph975.prol, !llvm.loop !25

.lr.ph975.prol.loopexit:                          ; preds = %.lr.ph975.prol, %.lr.ph975.preheader1345
  %.unr1380 = phi i64 [ %.ph1346, %.lr.ph975.preheader1345 ], [ %246, %.lr.ph975.prol ]
  %248 = icmp ult i64 %242, 3
  br i1 %248, label %._crit_edge976, label %.lr.ph975

249:                                              ; preds = %233
  %250 = shl i64 %.fca.7.0.1.load, 2
  %251 = call ptr @malloc(i64 %250)
  %252 = icmp sgt i64 %.fca.7.0.1.load, 0
  br i1 %252, label %.lr.ph974.preheader, label %.thread937

.lr.ph974.preheader:                              ; preds = %249
  %253 = ptrtoint ptr %251 to i64
  %min.iters.check1136 = icmp ult i64 %.fca.7.0.1.load, 8
  %254 = sub i64 %253, %.fca.0.load1132
  %diff.check1133 = icmp ult i64 %254, 32
  %or.cond1312 = select i1 %min.iters.check1136, i1 true, i1 %diff.check1133
  br i1 %or.cond1312, label %.lr.ph974.preheader1347, label %vector.ph1137

vector.ph1137:                                    ; preds = %.lr.ph974.preheader
  %n.vec1139 = and i64 %.fca.7.0.1.load, -8
  br label %vector.body1142

vector.body1142:                                  ; preds = %vector.body1142, %vector.ph1137
  %index1143 = phi i64 [ 0, %vector.ph1137 ], [ %index.next1146, %vector.body1142 ]
  %255 = getelementptr i32, ptr %.fca.0.load, i64 %index1143
  %wide.load1144 = load <4 x i32>, ptr %255, align 4, !tbaa !3
  %256 = getelementptr i32, ptr %255, i64 4
  %wide.load1145 = load <4 x i32>, ptr %256, align 4, !tbaa !3
  %257 = getelementptr i32, ptr %251, i64 %index1143
  store <4 x i32> %wide.load1144, ptr %257, align 4, !tbaa !3
  %258 = getelementptr i32, ptr %257, i64 4
  store <4 x i32> %wide.load1145, ptr %258, align 4, !tbaa !3
  %index.next1146 = add nuw i64 %index1143, 8
  %259 = icmp eq i64 %index.next1146, %n.vec1139
  br i1 %259, label %middle.block1134, label %vector.body1142, !llvm.loop !26

middle.block1134:                                 ; preds = %vector.body1142
  %cmp.n1141 = icmp eq i64 %.fca.7.0.1.load, %n.vec1139
  br i1 %cmp.n1141, label %.loopexit954, label %.lr.ph974.preheader1347

.lr.ph974.preheader1347:                          ; preds = %.lr.ph974.preheader, %middle.block1134
  %.ph1348 = phi i64 [ 0, %.lr.ph974.preheader ], [ %n.vec1139, %middle.block1134 ]
  %260 = xor i64 %.ph1348, -1
  %261 = add i64 %.fca.7.0.1.load, %260
  %xtraiter1373 = and i64 %.fca.7.0.1.load, 3
  %lcmp.mod1374.not = icmp eq i64 %xtraiter1373, 0
  br i1 %lcmp.mod1374.not, label %.lr.ph974.prol.loopexit, label %.lr.ph974.prol

.lr.ph974.prol:                                   ; preds = %.lr.ph974.preheader1347, %.lr.ph974.prol
  %262 = phi i64 [ %265, %.lr.ph974.prol ], [ %.ph1348, %.lr.ph974.preheader1347 ]
  %prol.iter1375 = phi i64 [ %prol.iter1375.next, %.lr.ph974.prol ], [ 0, %.lr.ph974.preheader1347 ]
  %263 = getelementptr i32, ptr %.fca.0.load, i64 %262
  %264 = load i32, ptr %263, align 4, !tbaa !3
  %265 = add nuw nsw i64 %262, 1
  %266 = getelementptr i32, ptr %251, i64 %262
  store i32 %264, ptr %266, align 4, !tbaa !3
  %prol.iter1375.next = add i64 %prol.iter1375, 1
  %prol.iter1375.cmp.not = icmp eq i64 %prol.iter1375.next, %xtraiter1373
  br i1 %prol.iter1375.cmp.not, label %.lr.ph974.prol.loopexit, label %.lr.ph974.prol, !llvm.loop !27

.lr.ph974.prol.loopexit:                          ; preds = %.lr.ph974.prol, %.lr.ph974.preheader1347
  %.unr1376 = phi i64 [ %.ph1348, %.lr.ph974.preheader1347 ], [ %265, %.lr.ph974.prol ]
  %267 = icmp ult i64 %261, 3
  br i1 %267, label %.loopexit954, label %.lr.ph974

.lr.ph974:                                        ; preds = %.lr.ph974.prol.loopexit, %.lr.ph974
  %268 = phi i64 [ %283, %.lr.ph974 ], [ %.unr1376, %.lr.ph974.prol.loopexit ]
  %269 = getelementptr i32, ptr %.fca.0.load, i64 %268
  %270 = load i32, ptr %269, align 4, !tbaa !3
  %271 = add nuw nsw i64 %268, 1
  %272 = getelementptr i32, ptr %251, i64 %268
  store i32 %270, ptr %272, align 4, !tbaa !3
  %273 = getelementptr i32, ptr %.fca.0.load, i64 %271
  %274 = load i32, ptr %273, align 4, !tbaa !3
  %275 = add nuw nsw i64 %268, 2
  %276 = getelementptr i32, ptr %251, i64 %271
  store i32 %274, ptr %276, align 4, !tbaa !3
  %277 = getelementptr i32, ptr %.fca.0.load, i64 %275
  %278 = load i32, ptr %277, align 4, !tbaa !3
  %279 = add nuw nsw i64 %268, 3
  %280 = getelementptr i32, ptr %251, i64 %275
  store i32 %278, ptr %280, align 4, !tbaa !3
  %281 = getelementptr i32, ptr %.fca.0.load, i64 %279
  %282 = load i32, ptr %281, align 4, !tbaa !3
  %283 = add nuw nsw i64 %268, 4
  %284 = getelementptr i32, ptr %251, i64 %279
  store i32 %282, ptr %284, align 4, !tbaa !3
  %exitcond1021.not.3 = icmp eq i64 %283, %.fca.7.0.1.load
  br i1 %exitcond1021.not.3, label %.loopexit954, label %.lr.ph974, !llvm.loop !28

.lr.ph975:                                        ; preds = %.lr.ph975.prol.loopexit, %.lr.ph975
  %285 = phi i64 [ %300, %.lr.ph975 ], [ %.unr1380, %.lr.ph975.prol.loopexit ]
  %286 = getelementptr i32, ptr %.fca.0.load, i64 %285
  %287 = load i32, ptr %286, align 4, !tbaa !3
  %288 = add nuw nsw i64 %285, 1
  %289 = getelementptr i32, ptr %.unpack801, i64 %285
  store i32 %287, ptr %289, align 4, !tbaa !3
  %290 = getelementptr i32, ptr %.fca.0.load, i64 %288
  %291 = load i32, ptr %290, align 4, !tbaa !3
  %292 = add nuw nsw i64 %285, 2
  %293 = getelementptr i32, ptr %.unpack801, i64 %288
  store i32 %291, ptr %293, align 4, !tbaa !3
  %294 = getelementptr i32, ptr %.fca.0.load, i64 %292
  %295 = load i32, ptr %294, align 4, !tbaa !3
  %296 = add nuw nsw i64 %285, 3
  %297 = getelementptr i32, ptr %.unpack801, i64 %292
  store i32 %295, ptr %297, align 4, !tbaa !3
  %298 = getelementptr i32, ptr %.fca.0.load, i64 %296
  %299 = load i32, ptr %298, align 4, !tbaa !3
  %300 = add nuw nsw i64 %285, 4
  %301 = getelementptr i32, ptr %.unpack801, i64 %296
  store i32 %299, ptr %301, align 4, !tbaa !3
  %exitcond1022.not.3 = icmp eq i64 %300, %.fca.7.0.1.load
  br i1 %exitcond1022.not.3, label %._crit_edge976, label %.lr.ph975, !llvm.loop !29

302:                                              ; preds = %._crit_edge972
  %303 = shl i64 %.fca.7.0.1.load, 2
  %304 = call ptr @malloc(i64 %303)
  %305 = icmp sgt i64 %.fca.7.0.1.load, 0
  br i1 %305, label %.lr.ph978.preheader, label %.loopexit954.thread

.lr.ph978.preheader:                              ; preds = %302
  %306 = ptrtoint ptr %304 to i64
  %min.iters.check1167 = icmp ult i64 %.fca.7.0.1.load, 8
  %307 = sub i64 %306, %.fca.0.load1132
  %diff.check1164 = icmp ult i64 %307, 32
  %or.cond1313 = select i1 %min.iters.check1167, i1 true, i1 %diff.check1164
  br i1 %or.cond1313, label %.lr.ph978.preheader1343, label %vector.ph1168

vector.ph1168:                                    ; preds = %.lr.ph978.preheader
  %n.vec1170 = and i64 %.fca.7.0.1.load, -8
  br label %vector.body1173

vector.body1173:                                  ; preds = %vector.body1173, %vector.ph1168
  %index1174 = phi i64 [ 0, %vector.ph1168 ], [ %index.next1177, %vector.body1173 ]
  %308 = getelementptr i32, ptr %.fca.0.load, i64 %index1174
  %wide.load1175 = load <4 x i32>, ptr %308, align 4, !tbaa !3
  %309 = getelementptr i32, ptr %308, i64 4
  %wide.load1176 = load <4 x i32>, ptr %309, align 4, !tbaa !3
  %310 = getelementptr i32, ptr %304, i64 %index1174
  store <4 x i32> %wide.load1175, ptr %310, align 4, !tbaa !3
  %311 = getelementptr i32, ptr %310, i64 4
  store <4 x i32> %wide.load1176, ptr %311, align 4, !tbaa !3
  %index.next1177 = add nuw i64 %index1174, 8
  %312 = icmp eq i64 %index.next1177, %n.vec1170
  br i1 %312, label %middle.block1165, label %vector.body1173, !llvm.loop !30

middle.block1165:                                 ; preds = %vector.body1173
  %cmp.n1172 = icmp eq i64 %.fca.7.0.1.load, %n.vec1170
  br i1 %cmp.n1172, label %.loopexit954, label %.lr.ph978.preheader1343

.lr.ph978.preheader1343:                          ; preds = %.lr.ph978.preheader, %middle.block1165
  %.ph1344 = phi i64 [ 0, %.lr.ph978.preheader ], [ %n.vec1170, %middle.block1165 ]
  %313 = xor i64 %.ph1344, -1
  %314 = add i64 %.fca.7.0.1.load, %313
  %xtraiter1381 = and i64 %.fca.7.0.1.load, 3
  %lcmp.mod1382.not = icmp eq i64 %xtraiter1381, 0
  br i1 %lcmp.mod1382.not, label %.lr.ph978.prol.loopexit, label %.lr.ph978.prol

.lr.ph978.prol:                                   ; preds = %.lr.ph978.preheader1343, %.lr.ph978.prol
  %315 = phi i64 [ %318, %.lr.ph978.prol ], [ %.ph1344, %.lr.ph978.preheader1343 ]
  %prol.iter1383 = phi i64 [ %prol.iter1383.next, %.lr.ph978.prol ], [ 0, %.lr.ph978.preheader1343 ]
  %316 = getelementptr i32, ptr %.fca.0.load, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !3
  %318 = add nuw nsw i64 %315, 1
  %319 = getelementptr i32, ptr %304, i64 %315
  store i32 %317, ptr %319, align 4, !tbaa !3
  %prol.iter1383.next = add i64 %prol.iter1383, 1
  %prol.iter1383.cmp.not = icmp eq i64 %prol.iter1383.next, %xtraiter1381
  br i1 %prol.iter1383.cmp.not, label %.lr.ph978.prol.loopexit, label %.lr.ph978.prol, !llvm.loop !31

.lr.ph978.prol.loopexit:                          ; preds = %.lr.ph978.prol, %.lr.ph978.preheader1343
  %.unr1384 = phi i64 [ %.ph1344, %.lr.ph978.preheader1343 ], [ %318, %.lr.ph978.prol ]
  %320 = icmp ult i64 %314, 3
  br i1 %320, label %.loopexit954, label %.lr.ph978

.lr.ph978:                                        ; preds = %.lr.ph978.prol.loopexit, %.lr.ph978
  %321 = phi i64 [ %336, %.lr.ph978 ], [ %.unr1384, %.lr.ph978.prol.loopexit ]
  %322 = getelementptr i32, ptr %.fca.0.load, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !3
  %324 = add nuw nsw i64 %321, 1
  %325 = getelementptr i32, ptr %304, i64 %321
  store i32 %323, ptr %325, align 4, !tbaa !3
  %326 = getelementptr i32, ptr %.fca.0.load, i64 %324
  %327 = load i32, ptr %326, align 4, !tbaa !3
  %328 = add nuw nsw i64 %321, 2
  %329 = getelementptr i32, ptr %304, i64 %324
  store i32 %327, ptr %329, align 4, !tbaa !3
  %330 = getelementptr i32, ptr %.fca.0.load, i64 %328
  %331 = load i32, ptr %330, align 4, !tbaa !3
  %332 = add nuw nsw i64 %321, 3
  %333 = getelementptr i32, ptr %304, i64 %328
  store i32 %331, ptr %333, align 4, !tbaa !3
  %334 = getelementptr i32, ptr %.fca.0.load, i64 %332
  %335 = load i32, ptr %334, align 4, !tbaa !3
  %336 = add nuw nsw i64 %321, 4
  %337 = getelementptr i32, ptr %304, i64 %332
  store i32 %335, ptr %337, align 4, !tbaa !3
  %exitcond1023.not.3 = icmp eq i64 %336, %.fca.7.0.1.load
  br i1 %exitcond1023.not.3, label %.loopexit954, label %.lr.ph978, !llvm.loop !32

.loopexit954:                                     ; preds = %.lr.ph974.prol.loopexit, %.lr.ph974, %.lr.ph978.prol.loopexit, %.lr.ph978, %middle.block1134, %middle.block1165
  %.ph935 = phi ptr [ %304, %middle.block1165 ], [ %251, %middle.block1134 ], [ %304, %.lr.ph978 ], [ %304, %.lr.ph978.prol.loopexit ], [ %251, %.lr.ph974 ], [ %251, %.lr.ph974.prol.loopexit ]
  br i1 %.not813, label %.loopexit954.thread, label %.thread937

.thread937:                                       ; preds = %249, %.loopexit954
  %.ph9351050 = phi ptr [ %.ph935, %.loopexit954 ], [ %251, %249 ]
  call void @free(ptr nonnull %.unpack801)
  br label %.loopexit954.thread

.loopexit954.thread:                              ; preds = %302, %.thread937, %.loopexit954
  %.ph9351047 = phi ptr [ %.ph9351050, %.thread937 ], [ %.ph935, %.loopexit954 ], [ %304, %302 ]
  store ptr %.ph9351047, ptr @_QFEb.0, align 8, !tbaa !7
  store i64 %.fca.7.0.1.load, ptr @_QFEb.8, align 8, !tbaa !7
  br label %._crit_edge976

._crit_edge976:                                   ; preds = %.lr.ph975.prol.loopexit, %.lr.ph975, %middle.block1150, %.preheader955, %.loopexit954.thread
  call void @free(ptr %.fca.0.load)
  call void @free(ptr %184)
  %338 = call dereferenceable_or_null(128) ptr @malloc(i64 128)
  %339 = load i32, ptr %9, align 4, !tbaa !3
  %340 = icmp eq i32 %339, 0
  br i1 %340, label %.lr.ph981.preheader, label %341

341:                                              ; preds = %._crit_edge976
  %342 = icmp slt i32 %339, 1
  br i1 %342, label %._crit_edge982, label %.preheader.i927

.preheader.i927:                                  ; preds = %341
  %343 = and i32 %339, 1
  %.not3.i926 = icmp eq i32 %343, 0
  %344 = select i1 %.not3.i926, i32 1, i32 2
  %345 = icmp eq i32 %339, 1
  br i1 %345, label %__mlir_math_ipowi_i32.exit932, label %.lr.ph.i931

.lr.ph.i931:                                      ; preds = %.preheader.i927, %.lr.ph.i931
  %spec.select4.i928 = phi i32 [ %spec.select.i930, %.lr.ph.i931 ], [ %344, %.preheader.i927 ]
  %346 = phi i32 [ %348, %.lr.ph.i931 ], [ %339, %.preheader.i927 ]
  %347 = phi i32 [ %349, %.lr.ph.i931 ], [ 2, %.preheader.i927 ]
  %348 = lshr i32 %346, 1
  %349 = mul i32 %347, %347
  %350 = and i32 %346, 2
  %.not.i929 = icmp eq i32 %350, 0
  %351 = select i1 %.not.i929, i32 1, i32 %349
  %spec.select.i930 = mul i32 %351, %spec.select4.i928
  %352 = icmp ult i32 %346, 4
  br i1 %352, label %__mlir_math_ipowi_i32.exit932, label %.lr.ph.i931

__mlir_math_ipowi_i32.exit932:                    ; preds = %.lr.ph.i931, %.preheader.i927
  %common.ret.op.i925 = phi i32 [ %344, %.preheader.i927 ], [ %spec.select.i930, %.lr.ph.i931 ]
  %353 = add i32 %common.ret.op.i925, -1
  %354 = icmp sgt i32 %353, -1
  br i1 %354, label %.lr.ph981.preheader, label %._crit_edge982

.lr.ph981.preheader:                              ; preds = %._crit_edge976, %__mlir_math_ipowi_i32.exit932
  %355 = phi i32 [ %353, %__mlir_math_ipowi_i32.exit932 ], [ 0, %._crit_edge976 ]
  %356 = zext i32 %355 to i64
  %.neg = add nuw nsw i64 %356, 1
  br label %.lr.ph981

.lr.ph981:                                        ; preds = %.lr.ph981.preheader, %365
  %357 = phi i64 [ %369, %365 ], [ %.neg, %.lr.ph981.preheader ]
  %358 = phi ptr [ %366, %365 ], [ %338, %.lr.ph981.preheader ]
  %359 = phi i32 [ %368, %365 ], [ %355, %.lr.ph981.preheader ]
  %.0747980 = phi i64 [ %.1748, %365 ], [ 32, %.lr.ph981.preheader ]
  %.0749979 = phi i64 [ %360, %365 ], [ 0, %.lr.ph981.preheader ]
  %360 = add nuw nsw i64 %.0749979, 1
  %.not897 = icmp sgt i64 %.0747980, %360
  br i1 %.not897, label %365, label %361

361:                                              ; preds = %.lr.ph981
  %362 = shl nuw i64 %360, 1
  %363 = shl i64 %360, 3
  %364 = call ptr @realloc(ptr %358, i64 %363)
  br label %365

365:                                              ; preds = %361, %.lr.ph981
  %.1748 = phi i64 [ %362, %361 ], [ %.0747980, %.lr.ph981 ]
  %366 = phi ptr [ %364, %361 ], [ %358, %.lr.ph981 ]
  %367 = getelementptr i32, ptr %366, i64 %.0749979
  store i32 %359, ptr %367, align 4, !tbaa !3
  %368 = add i32 %359, -1
  %369 = add nsw i64 %357, -1
  %370 = icmp sgt i64 %357, 1
  br i1 %370, label %.lr.ph981, label %._crit_edge982

._crit_edge982:                                   ; preds = %365, %341, %__mlir_math_ipowi_i32.exit932
  %.0749.lcssa = phi i64 [ 0, %__mlir_math_ipowi_i32.exit932 ], [ 0, %341 ], [ %360, %365 ]
  %.lcssa = phi ptr [ %338, %__mlir_math_ipowi_i32.exit932 ], [ %338, %341 ], [ %366, %365 ]
  %.lcssa1179 = ptrtoint ptr %.lcssa to i64
  %.unpack814 = load ptr, ptr @_QFEc.0, align 8, !tbaa !7
  %.unpack8141195 = ptrtoint ptr %.unpack814 to i64
  %.not826 = icmp eq ptr %.unpack814, null
  br i1 %.not826, label %440, label %371

371:                                              ; preds = %._crit_edge982
  %.unpack821.unpack.unpack823 = load i64, ptr @_QFEc.8, align 8, !tbaa !7
  %.not948 = icmp eq i64 %.unpack821.unpack.unpack823, %.0749.lcssa
  br i1 %.not948, label %.preheader952, label %387

.preheader952:                                    ; preds = %371
  %372 = icmp sgt i64 %.0749.lcssa, 0
  br i1 %372, label %.lr.ph987.preheader, label %._crit_edge988._crit_edge

.lr.ph987.preheader:                              ; preds = %.preheader952
  %min.iters.check1199 = icmp ult i64 %.0749.lcssa, 8
  %373 = sub i64 %.unpack8141195, %.lcssa1179
  %diff.check1196 = icmp ult i64 %373, 32
  %or.cond1314 = select i1 %min.iters.check1199, i1 true, i1 %diff.check1196
  br i1 %or.cond1314, label %.lr.ph987.preheader1336, label %vector.ph1200

vector.ph1200:                                    ; preds = %.lr.ph987.preheader
  %n.vec1202 = and i64 %.0749.lcssa, -8
  br label %vector.body1205

vector.body1205:                                  ; preds = %vector.body1205, %vector.ph1200
  %index1206 = phi i64 [ 0, %vector.ph1200 ], [ %index.next1209, %vector.body1205 ]
  %374 = getelementptr i32, ptr %.lcssa, i64 %index1206
  %wide.load1207 = load <4 x i32>, ptr %374, align 4, !tbaa !3
  %375 = getelementptr i32, ptr %374, i64 4
  %wide.load1208 = load <4 x i32>, ptr %375, align 4, !tbaa !3
  %376 = getelementptr i32, ptr %.unpack814, i64 %index1206
  store <4 x i32> %wide.load1207, ptr %376, align 4, !tbaa !3
  %377 = getelementptr i32, ptr %376, i64 4
  store <4 x i32> %wide.load1208, ptr %377, align 4, !tbaa !3
  %index.next1209 = add nuw i64 %index1206, 8
  %378 = icmp eq i64 %index.next1209, %n.vec1202
  br i1 %378, label %middle.block1197, label %vector.body1205, !llvm.loop !33

middle.block1197:                                 ; preds = %vector.body1205
  %cmp.n1204 = icmp eq i64 %.0749.lcssa, %n.vec1202
  br i1 %cmp.n1204, label %._crit_edge988._crit_edge, label %.lr.ph987.preheader1336

.lr.ph987.preheader1336:                          ; preds = %.lr.ph987.preheader, %middle.block1197
  %.ph1337 = phi i64 [ 0, %.lr.ph987.preheader ], [ %n.vec1202, %middle.block1197 ]
  %379 = xor i64 %.ph1337, -1
  %380 = add i64 %.0749.lcssa, %379
  %xtraiter1389 = and i64 %.0749.lcssa, 3
  %lcmp.mod1390.not = icmp eq i64 %xtraiter1389, 0
  br i1 %lcmp.mod1390.not, label %.lr.ph987.prol.loopexit, label %.lr.ph987.prol

.lr.ph987.prol:                                   ; preds = %.lr.ph987.preheader1336, %.lr.ph987.prol
  %381 = phi i64 [ %382, %.lr.ph987.prol ], [ %.ph1337, %.lr.ph987.preheader1336 ]
  %prol.iter1391 = phi i64 [ %prol.iter1391.next, %.lr.ph987.prol ], [ 0, %.lr.ph987.preheader1336 ]
  %382 = add nuw nsw i64 %381, 1
  %383 = getelementptr i32, ptr %.lcssa, i64 %381
  %384 = load i32, ptr %383, align 4, !tbaa !3
  %385 = getelementptr i32, ptr %.unpack814, i64 %381
  store i32 %384, ptr %385, align 4, !tbaa !3
  %prol.iter1391.next = add i64 %prol.iter1391, 1
  %prol.iter1391.cmp.not = icmp eq i64 %prol.iter1391.next, %xtraiter1389
  br i1 %prol.iter1391.cmp.not, label %.lr.ph987.prol.loopexit, label %.lr.ph987.prol, !llvm.loop !34

.lr.ph987.prol.loopexit:                          ; preds = %.lr.ph987.prol, %.lr.ph987.preheader1336
  %.unr1392 = phi i64 [ %.ph1337, %.lr.ph987.preheader1336 ], [ %382, %.lr.ph987.prol ]
  %386 = icmp ult i64 %380, 3
  br i1 %386, label %._crit_edge988._crit_edge, label %.lr.ph987

387:                                              ; preds = %371
  %388 = shl i64 %.0749.lcssa, 2
  %389 = call ptr @malloc(i64 %388)
  %390 = icmp sgt i64 %.0749.lcssa, 0
  br i1 %390, label %.lr.ph986.preheader, label %.thread941

.lr.ph986.preheader:                              ; preds = %387
  %391 = ptrtoint ptr %389 to i64
  %min.iters.check1183 = icmp ult i64 %.0749.lcssa, 8
  %392 = sub i64 %391, %.lcssa1179
  %diff.check1180 = icmp ult i64 %392, 32
  %or.cond1315 = select i1 %min.iters.check1183, i1 true, i1 %diff.check1180
  br i1 %or.cond1315, label %.lr.ph986.preheader1338, label %vector.ph1184

vector.ph1184:                                    ; preds = %.lr.ph986.preheader
  %n.vec1186 = and i64 %.0749.lcssa, -8
  br label %vector.body1189

vector.body1189:                                  ; preds = %vector.body1189, %vector.ph1184
  %index1190 = phi i64 [ 0, %vector.ph1184 ], [ %index.next1193, %vector.body1189 ]
  %393 = getelementptr i32, ptr %.lcssa, i64 %index1190
  %wide.load1191 = load <4 x i32>, ptr %393, align 4, !tbaa !3
  %394 = getelementptr i32, ptr %393, i64 4
  %wide.load1192 = load <4 x i32>, ptr %394, align 4, !tbaa !3
  %395 = getelementptr i32, ptr %389, i64 %index1190
  store <4 x i32> %wide.load1191, ptr %395, align 4, !tbaa !3
  %396 = getelementptr i32, ptr %395, i64 4
  store <4 x i32> %wide.load1192, ptr %396, align 4, !tbaa !3
  %index.next1193 = add nuw i64 %index1190, 8
  %397 = icmp eq i64 %index.next1193, %n.vec1186
  br i1 %397, label %middle.block1181, label %vector.body1189, !llvm.loop !35

middle.block1181:                                 ; preds = %vector.body1189
  %cmp.n1188 = icmp eq i64 %.0749.lcssa, %n.vec1186
  br i1 %cmp.n1188, label %.loopexit951, label %.lr.ph986.preheader1338

.lr.ph986.preheader1338:                          ; preds = %.lr.ph986.preheader, %middle.block1181
  %.ph1339 = phi i64 [ 0, %.lr.ph986.preheader ], [ %n.vec1186, %middle.block1181 ]
  %398 = xor i64 %.ph1339, -1
  %399 = add i64 %.0749.lcssa, %398
  %xtraiter1385 = and i64 %.0749.lcssa, 3
  %lcmp.mod1386.not = icmp eq i64 %xtraiter1385, 0
  br i1 %lcmp.mod1386.not, label %.lr.ph986.prol.loopexit, label %.lr.ph986.prol

.lr.ph986.prol:                                   ; preds = %.lr.ph986.preheader1338, %.lr.ph986.prol
  %400 = phi i64 [ %401, %.lr.ph986.prol ], [ %.ph1339, %.lr.ph986.preheader1338 ]
  %prol.iter1387 = phi i64 [ %prol.iter1387.next, %.lr.ph986.prol ], [ 0, %.lr.ph986.preheader1338 ]
  %401 = add nuw nsw i64 %400, 1
  %402 = getelementptr i32, ptr %.lcssa, i64 %400
  %403 = load i32, ptr %402, align 4, !tbaa !3
  %404 = getelementptr i32, ptr %389, i64 %400
  store i32 %403, ptr %404, align 4, !tbaa !3
  %prol.iter1387.next = add i64 %prol.iter1387, 1
  %prol.iter1387.cmp.not = icmp eq i64 %prol.iter1387.next, %xtraiter1385
  br i1 %prol.iter1387.cmp.not, label %.lr.ph986.prol.loopexit, label %.lr.ph986.prol, !llvm.loop !36

.lr.ph986.prol.loopexit:                          ; preds = %.lr.ph986.prol, %.lr.ph986.preheader1338
  %.unr1388 = phi i64 [ %.ph1339, %.lr.ph986.preheader1338 ], [ %401, %.lr.ph986.prol ]
  %405 = icmp ult i64 %399, 3
  br i1 %405, label %.loopexit951, label %.lr.ph986

.lr.ph986:                                        ; preds = %.lr.ph986.prol.loopexit, %.lr.ph986
  %406 = phi i64 [ %419, %.lr.ph986 ], [ %.unr1388, %.lr.ph986.prol.loopexit ]
  %407 = add nuw nsw i64 %406, 1
  %408 = getelementptr i32, ptr %.lcssa, i64 %406
  %409 = load i32, ptr %408, align 4, !tbaa !3
  %410 = getelementptr i32, ptr %389, i64 %406
  store i32 %409, ptr %410, align 4, !tbaa !3
  %411 = add nuw nsw i64 %406, 2
  %412 = getelementptr i32, ptr %.lcssa, i64 %407
  %413 = load i32, ptr %412, align 4, !tbaa !3
  %414 = getelementptr i32, ptr %389, i64 %407
  store i32 %413, ptr %414, align 4, !tbaa !3
  %415 = add nuw nsw i64 %406, 3
  %416 = getelementptr i32, ptr %.lcssa, i64 %411
  %417 = load i32, ptr %416, align 4, !tbaa !3
  %418 = getelementptr i32, ptr %389, i64 %411
  store i32 %417, ptr %418, align 4, !tbaa !3
  %419 = add nuw nsw i64 %406, 4
  %420 = getelementptr i32, ptr %.lcssa, i64 %415
  %421 = load i32, ptr %420, align 4, !tbaa !3
  %422 = getelementptr i32, ptr %389, i64 %415
  store i32 %421, ptr %422, align 4, !tbaa !3
  %exitcond1024.not.3 = icmp eq i64 %419, %.0749.lcssa
  br i1 %exitcond1024.not.3, label %.loopexit951, label %.lr.ph986, !llvm.loop !37

.lr.ph987:                                        ; preds = %.lr.ph987.prol.loopexit, %.lr.ph987
  %423 = phi i64 [ %436, %.lr.ph987 ], [ %.unr1392, %.lr.ph987.prol.loopexit ]
  %424 = add nuw nsw i64 %423, 1
  %425 = getelementptr i32, ptr %.lcssa, i64 %423
  %426 = load i32, ptr %425, align 4, !tbaa !3
  %427 = getelementptr i32, ptr %.unpack814, i64 %423
  store i32 %426, ptr %427, align 4, !tbaa !3
  %428 = add nuw nsw i64 %423, 2
  %429 = getelementptr i32, ptr %.lcssa, i64 %424
  %430 = load i32, ptr %429, align 4, !tbaa !3
  %431 = getelementptr i32, ptr %.unpack814, i64 %424
  store i32 %430, ptr %431, align 4, !tbaa !3
  %432 = add nuw nsw i64 %423, 3
  %433 = getelementptr i32, ptr %.lcssa, i64 %428
  %434 = load i32, ptr %433, align 4, !tbaa !3
  %435 = getelementptr i32, ptr %.unpack814, i64 %428
  store i32 %434, ptr %435, align 4, !tbaa !3
  %436 = add nuw nsw i64 %423, 4
  %437 = getelementptr i32, ptr %.lcssa, i64 %432
  %438 = load i32, ptr %437, align 4, !tbaa !3
  %439 = getelementptr i32, ptr %.unpack814, i64 %432
  store i32 %438, ptr %439, align 4, !tbaa !3
  %exitcond1025.not.3 = icmp eq i64 %436, %.0749.lcssa
  br i1 %exitcond1025.not.3, label %._crit_edge988._crit_edge, label %.lr.ph987, !llvm.loop !38

440:                                              ; preds = %._crit_edge982
  %441 = shl i64 %.0749.lcssa, 2
  %442 = call ptr @malloc(i64 %441)
  %443 = icmp sgt i64 %.0749.lcssa, 0
  br i1 %443, label %.lr.ph990.preheader, label %.loopexit951.thread

.lr.ph990.preheader:                              ; preds = %440
  %444 = ptrtoint ptr %442 to i64
  %min.iters.check1214 = icmp ult i64 %.0749.lcssa, 8
  %445 = sub i64 %444, %.lcssa1179
  %diff.check1211 = icmp ult i64 %445, 32
  %or.cond1316 = select i1 %min.iters.check1214, i1 true, i1 %diff.check1211
  br i1 %or.cond1316, label %.lr.ph990.preheader1334, label %vector.ph1215

vector.ph1215:                                    ; preds = %.lr.ph990.preheader
  %n.vec1217 = and i64 %.0749.lcssa, -8
  br label %vector.body1220

vector.body1220:                                  ; preds = %vector.body1220, %vector.ph1215
  %index1221 = phi i64 [ 0, %vector.ph1215 ], [ %index.next1224, %vector.body1220 ]
  %446 = getelementptr i32, ptr %.lcssa, i64 %index1221
  %wide.load1222 = load <4 x i32>, ptr %446, align 4, !tbaa !3
  %447 = getelementptr i32, ptr %446, i64 4
  %wide.load1223 = load <4 x i32>, ptr %447, align 4, !tbaa !3
  %448 = getelementptr i32, ptr %442, i64 %index1221
  store <4 x i32> %wide.load1222, ptr %448, align 4, !tbaa !3
  %449 = getelementptr i32, ptr %448, i64 4
  store <4 x i32> %wide.load1223, ptr %449, align 4, !tbaa !3
  %index.next1224 = add nuw i64 %index1221, 8
  %450 = icmp eq i64 %index.next1224, %n.vec1217
  br i1 %450, label %middle.block1212, label %vector.body1220, !llvm.loop !39

middle.block1212:                                 ; preds = %vector.body1220
  %cmp.n1219 = icmp eq i64 %.0749.lcssa, %n.vec1217
  br i1 %cmp.n1219, label %.loopexit951, label %.lr.ph990.preheader1334

.lr.ph990.preheader1334:                          ; preds = %.lr.ph990.preheader, %middle.block1212
  %.ph1335 = phi i64 [ 0, %.lr.ph990.preheader ], [ %n.vec1217, %middle.block1212 ]
  %451 = xor i64 %.ph1335, -1
  %452 = add i64 %.0749.lcssa, %451
  %xtraiter1393 = and i64 %.0749.lcssa, 3
  %lcmp.mod1394.not = icmp eq i64 %xtraiter1393, 0
  br i1 %lcmp.mod1394.not, label %.lr.ph990.prol.loopexit, label %.lr.ph990.prol

.lr.ph990.prol:                                   ; preds = %.lr.ph990.preheader1334, %.lr.ph990.prol
  %453 = phi i64 [ %454, %.lr.ph990.prol ], [ %.ph1335, %.lr.ph990.preheader1334 ]
  %prol.iter1395 = phi i64 [ %prol.iter1395.next, %.lr.ph990.prol ], [ 0, %.lr.ph990.preheader1334 ]
  %454 = add nuw nsw i64 %453, 1
  %455 = getelementptr i32, ptr %.lcssa, i64 %453
  %456 = load i32, ptr %455, align 4, !tbaa !3
  %457 = getelementptr i32, ptr %442, i64 %453
  store i32 %456, ptr %457, align 4, !tbaa !3
  %prol.iter1395.next = add i64 %prol.iter1395, 1
  %prol.iter1395.cmp.not = icmp eq i64 %prol.iter1395.next, %xtraiter1393
  br i1 %prol.iter1395.cmp.not, label %.lr.ph990.prol.loopexit, label %.lr.ph990.prol, !llvm.loop !40

.lr.ph990.prol.loopexit:                          ; preds = %.lr.ph990.prol, %.lr.ph990.preheader1334
  %.unr1396 = phi i64 [ %.ph1335, %.lr.ph990.preheader1334 ], [ %454, %.lr.ph990.prol ]
  %458 = icmp ult i64 %452, 3
  br i1 %458, label %.loopexit951, label %.lr.ph990

.lr.ph990:                                        ; preds = %.lr.ph990.prol.loopexit, %.lr.ph990
  %459 = phi i64 [ %472, %.lr.ph990 ], [ %.unr1396, %.lr.ph990.prol.loopexit ]
  %460 = add nuw nsw i64 %459, 1
  %461 = getelementptr i32, ptr %.lcssa, i64 %459
  %462 = load i32, ptr %461, align 4, !tbaa !3
  %463 = getelementptr i32, ptr %442, i64 %459
  store i32 %462, ptr %463, align 4, !tbaa !3
  %464 = add nuw nsw i64 %459, 2
  %465 = getelementptr i32, ptr %.lcssa, i64 %460
  %466 = load i32, ptr %465, align 4, !tbaa !3
  %467 = getelementptr i32, ptr %442, i64 %460
  store i32 %466, ptr %467, align 4, !tbaa !3
  %468 = add nuw nsw i64 %459, 3
  %469 = getelementptr i32, ptr %.lcssa, i64 %464
  %470 = load i32, ptr %469, align 4, !tbaa !3
  %471 = getelementptr i32, ptr %442, i64 %464
  store i32 %470, ptr %471, align 4, !tbaa !3
  %472 = add nuw nsw i64 %459, 4
  %473 = getelementptr i32, ptr %.lcssa, i64 %468
  %474 = load i32, ptr %473, align 4, !tbaa !3
  %475 = getelementptr i32, ptr %442, i64 %468
  store i32 %474, ptr %475, align 4, !tbaa !3
  %exitcond1026.not.3 = icmp eq i64 %472, %.0749.lcssa
  br i1 %exitcond1026.not.3, label %.loopexit951, label %.lr.ph990, !llvm.loop !41

.loopexit951:                                     ; preds = %.lr.ph986.prol.loopexit, %.lr.ph986, %.lr.ph990.prol.loopexit, %.lr.ph990, %middle.block1181, %middle.block1212
  %.ph939 = phi ptr [ %442, %middle.block1212 ], [ %389, %middle.block1181 ], [ %442, %.lr.ph990 ], [ %442, %.lr.ph990.prol.loopexit ], [ %389, %.lr.ph986 ], [ %389, %.lr.ph986.prol.loopexit ]
  br i1 %.not826, label %.loopexit951.thread, label %.thread941

.thread941:                                       ; preds = %387, %.loopexit951
  %.ph9391058 = phi ptr [ %.ph939, %.loopexit951 ], [ %389, %387 ]
  call void @free(ptr nonnull %.unpack814)
  br label %.loopexit951.thread

.loopexit951.thread:                              ; preds = %440, %.thread941, %.loopexit951
  %.ph9391055 = phi ptr [ %.ph9391058, %.thread941 ], [ %.ph939, %.loopexit951 ], [ %442, %440 ]
  store ptr %.ph9391055, ptr @_QFEc.0, align 8, !tbaa !7
  store i64 %.0749.lcssa, ptr @_QFEc.8, align 8, !tbaa !7
  br label %._crit_edge988._crit_edge

._crit_edge988._crit_edge:                        ; preds = %.lr.ph987.prol.loopexit, %.lr.ph987, %.preheader952, %middle.block1197, %.loopexit951.thread
  %.unpack827 = phi ptr [ %.ph9391055, %.loopexit951.thread ], [ %.unpack814, %middle.block1197 ], [ %.unpack814, %.preheader952 ], [ %.unpack814, %.lr.ph987 ], [ %.unpack814, %.lr.ph987.prol.loopexit ]
  call void @free(ptr %.lcssa)
  store ptr %.unpack827, ptr %3, align 8, !tbaa !7
  %.fca.1.gep351 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep351, align 8, !tbaa !7
  %.fca.2.gep353 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep353, align 8, !tbaa !7
  %.fca.3.gep355 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep355, align 4, !tbaa !7
  %.fca.4.gep357 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 4
  store i8 9, ptr %.fca.4.gep357, align 1, !tbaa !7
  %.fca.5.gep359 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep359, align 2, !tbaa !7
  %.fca.6.gep361 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep361, align 1, !tbaa !7
  %.fca.7.0.0.gep363 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep363, align 8, !tbaa !7
  %.fca.7.0.1.gep365 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 1
  store i64 %.0749.lcssa, ptr %.fca.7.0.1.gep365, align 8, !tbaa !7
  %.fca.7.0.2.gep367 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep367, align 8, !tbaa !7
  %476 = load i32, ptr %8, align 4, !tbaa !3
  %477 = shl i64 %.0749.lcssa, 2
  %478 = call ptr @malloc(i64 %477)
  %479 = icmp sgt i64 %.0749.lcssa, 0
  br i1 %479, label %.lr.ph992.preheader, label %._crit_edge993

.lr.ph992.preheader:                              ; preds = %._crit_edge988._crit_edge
  %480 = ptrtoint ptr %478 to i64
  %.unpack8271226 = ptrtoint ptr %.unpack827 to i64
  %min.iters.check1230 = icmp ult i64 %.0749.lcssa, 8
  %481 = sub i64 %480, %.unpack8271226
  %diff.check1227 = icmp ult i64 %481, 32
  %or.cond1317 = select i1 %min.iters.check1230, i1 true, i1 %diff.check1227
  br i1 %or.cond1317, label %.lr.ph992.preheader1332, label %vector.ph1231

vector.ph1231:                                    ; preds = %.lr.ph992.preheader
  %n.vec1233 = and i64 %.0749.lcssa, -8
  %broadcast.splatinsert1240 = insertelement <4 x i32> poison, i32 %476, i64 0
  %broadcast.splat1241 = shufflevector <4 x i32> %broadcast.splatinsert1240, <4 x i32> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert1242 = insertelement <4 x i32> poison, i32 %476, i64 0
  %broadcast.splat1243 = shufflevector <4 x i32> %broadcast.splatinsert1242, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body1236

vector.body1236:                                  ; preds = %vector.body1236, %vector.ph1231
  %index1237 = phi i64 [ 0, %vector.ph1231 ], [ %index.next1244, %vector.body1236 ]
  %482 = getelementptr i32, ptr %.unpack827, i64 %index1237
  %wide.load1238 = load <4 x i32>, ptr %482, align 4, !tbaa !3
  %483 = getelementptr i32, ptr %482, i64 4
  %wide.load1239 = load <4 x i32>, ptr %483, align 4, !tbaa !3
  %484 = icmp ne <4 x i32> %wide.load1238, %broadcast.splat1241
  %485 = icmp ne <4 x i32> %wide.load1239, %broadcast.splat1243
  %486 = zext <4 x i1> %484 to <4 x i32>
  %487 = zext <4 x i1> %485 to <4 x i32>
  %488 = getelementptr i32, ptr %478, i64 %index1237
  store <4 x i32> %486, ptr %488, align 4, !tbaa !3
  %489 = getelementptr i32, ptr %488, i64 4
  store <4 x i32> %487, ptr %489, align 4, !tbaa !3
  %index.next1244 = add nuw i64 %index1237, 8
  %490 = icmp eq i64 %index.next1244, %n.vec1233
  br i1 %490, label %middle.block1228, label %vector.body1236, !llvm.loop !42

middle.block1228:                                 ; preds = %vector.body1236
  %cmp.n1235 = icmp eq i64 %.0749.lcssa, %n.vec1233
  br i1 %cmp.n1235, label %._crit_edge993, label %.lr.ph992.preheader1332

.lr.ph992.preheader1332:                          ; preds = %.lr.ph992.preheader, %middle.block1228
  %.ph1333 = phi i64 [ 0, %.lr.ph992.preheader ], [ %n.vec1233, %middle.block1228 ]
  %491 = xor i64 %.ph1333, -1
  %492 = add i64 %.0749.lcssa, %491
  %xtraiter1397 = and i64 %.0749.lcssa, 3
  %lcmp.mod1398.not = icmp eq i64 %xtraiter1397, 0
  br i1 %lcmp.mod1398.not, label %.lr.ph992.prol.loopexit, label %.lr.ph992.prol

.lr.ph992.prol:                                   ; preds = %.lr.ph992.preheader1332, %.lr.ph992.prol
  %493 = phi i64 [ %498, %.lr.ph992.prol ], [ %.ph1333, %.lr.ph992.preheader1332 ]
  %prol.iter1399 = phi i64 [ %prol.iter1399.next, %.lr.ph992.prol ], [ 0, %.lr.ph992.preheader1332 ]
  %494 = getelementptr i32, ptr %.unpack827, i64 %493
  %495 = load i32, ptr %494, align 4, !tbaa !3
  %496 = icmp ne i32 %495, %476
  %497 = zext i1 %496 to i32
  %498 = add nuw nsw i64 %493, 1
  %499 = getelementptr i32, ptr %478, i64 %493
  store i32 %497, ptr %499, align 4, !tbaa !3
  %prol.iter1399.next = add i64 %prol.iter1399, 1
  %prol.iter1399.cmp.not = icmp eq i64 %prol.iter1399.next, %xtraiter1397
  br i1 %prol.iter1399.cmp.not, label %.lr.ph992.prol.loopexit, label %.lr.ph992.prol, !llvm.loop !43

.lr.ph992.prol.loopexit:                          ; preds = %.lr.ph992.prol, %.lr.ph992.preheader1332
  %.unr1400 = phi i64 [ %.ph1333, %.lr.ph992.preheader1332 ], [ %498, %.lr.ph992.prol ]
  %500 = icmp ult i64 %492, 3
  br i1 %500, label %._crit_edge993, label %.lr.ph992

.lr.ph992:                                        ; preds = %.lr.ph992.prol.loopexit, %.lr.ph992
  %501 = phi i64 [ %524, %.lr.ph992 ], [ %.unr1400, %.lr.ph992.prol.loopexit ]
  %502 = getelementptr i32, ptr %.unpack827, i64 %501
  %503 = load i32, ptr %502, align 4, !tbaa !3
  %504 = icmp ne i32 %503, %476
  %505 = zext i1 %504 to i32
  %506 = add nuw nsw i64 %501, 1
  %507 = getelementptr i32, ptr %478, i64 %501
  store i32 %505, ptr %507, align 4, !tbaa !3
  %508 = getelementptr i32, ptr %.unpack827, i64 %506
  %509 = load i32, ptr %508, align 4, !tbaa !3
  %510 = icmp ne i32 %509, %476
  %511 = zext i1 %510 to i32
  %512 = add nuw nsw i64 %501, 2
  %513 = getelementptr i32, ptr %478, i64 %506
  store i32 %511, ptr %513, align 4, !tbaa !3
  %514 = getelementptr i32, ptr %.unpack827, i64 %512
  %515 = load i32, ptr %514, align 4, !tbaa !3
  %516 = icmp ne i32 %515, %476
  %517 = zext i1 %516 to i32
  %518 = add nuw nsw i64 %501, 3
  %519 = getelementptr i32, ptr %478, i64 %512
  store i32 %517, ptr %519, align 4, !tbaa !3
  %520 = getelementptr i32, ptr %.unpack827, i64 %518
  %521 = load i32, ptr %520, align 4, !tbaa !3
  %522 = icmp ne i32 %521, %476
  %523 = zext i1 %522 to i32
  %524 = add nuw nsw i64 %501, 4
  %525 = getelementptr i32, ptr %478, i64 %518
  store i32 %523, ptr %525, align 4, !tbaa !3
  %exitcond1027.not.3 = icmp eq i64 %524, %.0749.lcssa
  br i1 %exitcond1027.not.3, label %._crit_edge993, label %.lr.ph992, !llvm.loop !44

._crit_edge993:                                   ; preds = %.lr.ph992.prol.loopexit, %.lr.ph992, %middle.block1228, %._crit_edge988._crit_edge
  store ptr %478, ptr %2, align 8, !tbaa !7
  %.fca.1.gep371 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep371, align 8, !tbaa !7
  %.fca.2.gep373 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep373, align 8, !tbaa !7
  %.fca.3.gep375 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep375, align 4, !tbaa !7
  %.fca.4.gep377 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 4
  store i8 14, ptr %.fca.4.gep377, align 1, !tbaa !7
  %.fca.5.gep379 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep379, align 2, !tbaa !7
  %.fca.6.gep381 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep381, align 1, !tbaa !7
  %.fca.7.0.0.gep383 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep383, align 8, !tbaa !7
  %.fca.7.0.1.gep385 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 1
  store i64 %.0749.lcssa, ptr %.fca.7.0.1.gep385, align 8, !tbaa !7
  %.fca.7.0.2.gep387 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep387, align 8, !tbaa !7
  store ptr null, ptr %6, align 8, !tbaa !7
  %.fca.1.gep19 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %6, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep19, align 8, !tbaa !7
  %.fca.2.gep21 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %6, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep21, align 8, !tbaa !7
  %.fca.3.gep23 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %6, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep23, align 4, !tbaa !7
  %.fca.4.gep25 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %6, i64 0, i32 4
  store i8 9, ptr %.fca.4.gep25, align 1, !tbaa !7
  %.fca.5.gep27 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %6, i64 0, i32 5
  store i8 2, ptr %.fca.5.gep27, align 2, !tbaa !7
  %.fca.6.gep29 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %6, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep29, align 1, !tbaa !7
  %.fca.7.0.0.gep31 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %6, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep31, align 8, !tbaa !7
  %.fca.7.0.1.gep33 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %6, i64 0, i32 7, i64 0, i64 1
  store i64 0, ptr %.fca.7.0.1.gep33, align 8, !tbaa !7
  %.fca.7.0.2.gep35 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %6, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep35, align 8, !tbaa !7
  %526 = call {} @_FortranAPack(ptr nonnull %6, ptr nonnull %3, ptr nonnull %2, ptr null, ptr nonnull @_QQcl.0e142d719f3174978acd787cf1638736, i32 25)
  %.fca.0.load37 = load ptr, ptr %6, align 8, !tbaa !7
  %.fca.0.load371246 = ptrtoint ptr %.fca.0.load37 to i64
  %.fca.7.0.1.load61 = load i64, ptr %.fca.7.0.1.gep33, align 8, !tbaa !7
  %.unpack839 = load ptr, ptr @_QFEc.0, align 8, !tbaa !7
  %.unpack8391262 = ptrtoint ptr %.unpack839 to i64
  %.not851 = icmp eq ptr %.unpack839, null
  br i1 %.not851, label %596, label %527

527:                                              ; preds = %._crit_edge993
  %.unpack846.unpack.unpack848 = load i64, ptr @_QFEc.8, align 8, !tbaa !7
  %.not949 = icmp eq i64 %.unpack846.unpack.unpack848, %.fca.7.0.1.load61
  br i1 %.not949, label %.preheader, label %543

.preheader:                                       ; preds = %527
  %528 = icmp sgt i64 %.fca.7.0.1.load61, 0
  br i1 %528, label %.lr.ph996.preheader, label %._crit_edge997

.lr.ph996.preheader:                              ; preds = %.preheader
  %min.iters.check1266 = icmp ult i64 %.fca.7.0.1.load61, 8
  %529 = sub i64 %.unpack8391262, %.fca.0.load371246
  %diff.check1263 = icmp ult i64 %529, 32
  %or.cond1318 = select i1 %min.iters.check1266, i1 true, i1 %diff.check1263
  br i1 %or.cond1318, label %.lr.ph996.preheader1327, label %vector.ph1267

vector.ph1267:                                    ; preds = %.lr.ph996.preheader
  %n.vec1269 = and i64 %.fca.7.0.1.load61, -8
  br label %vector.body1272

vector.body1272:                                  ; preds = %vector.body1272, %vector.ph1267
  %index1273 = phi i64 [ 0, %vector.ph1267 ], [ %index.next1276, %vector.body1272 ]
  %530 = getelementptr i32, ptr %.fca.0.load37, i64 %index1273
  %wide.load1274 = load <4 x i32>, ptr %530, align 4, !tbaa !3
  %531 = getelementptr i32, ptr %530, i64 4
  %wide.load1275 = load <4 x i32>, ptr %531, align 4, !tbaa !3
  %532 = getelementptr i32, ptr %.unpack839, i64 %index1273
  store <4 x i32> %wide.load1274, ptr %532, align 4, !tbaa !3
  %533 = getelementptr i32, ptr %532, i64 4
  store <4 x i32> %wide.load1275, ptr %533, align 4, !tbaa !3
  %index.next1276 = add nuw i64 %index1273, 8
  %534 = icmp eq i64 %index.next1276, %n.vec1269
  br i1 %534, label %middle.block1264, label %vector.body1272, !llvm.loop !45

middle.block1264:                                 ; preds = %vector.body1272
  %cmp.n1271 = icmp eq i64 %.fca.7.0.1.load61, %n.vec1269
  br i1 %cmp.n1271, label %._crit_edge997, label %.lr.ph996.preheader1327

.lr.ph996.preheader1327:                          ; preds = %.lr.ph996.preheader, %middle.block1264
  %.ph1328 = phi i64 [ 0, %.lr.ph996.preheader ], [ %n.vec1269, %middle.block1264 ]
  %535 = xor i64 %.ph1328, -1
  %536 = add i64 %.fca.7.0.1.load61, %535
  %xtraiter1405 = and i64 %.fca.7.0.1.load61, 3
  %lcmp.mod1406.not = icmp eq i64 %xtraiter1405, 0
  br i1 %lcmp.mod1406.not, label %.lr.ph996.prol.loopexit, label %.lr.ph996.prol

.lr.ph996.prol:                                   ; preds = %.lr.ph996.preheader1327, %.lr.ph996.prol
  %537 = phi i64 [ %540, %.lr.ph996.prol ], [ %.ph1328, %.lr.ph996.preheader1327 ]
  %prol.iter1407 = phi i64 [ %prol.iter1407.next, %.lr.ph996.prol ], [ 0, %.lr.ph996.preheader1327 ]
  %538 = getelementptr i32, ptr %.fca.0.load37, i64 %537
  %539 = load i32, ptr %538, align 4, !tbaa !3
  %540 = add nuw nsw i64 %537, 1
  %541 = getelementptr i32, ptr %.unpack839, i64 %537
  store i32 %539, ptr %541, align 4, !tbaa !3
  %prol.iter1407.next = add i64 %prol.iter1407, 1
  %prol.iter1407.cmp.not = icmp eq i64 %prol.iter1407.next, %xtraiter1405
  br i1 %prol.iter1407.cmp.not, label %.lr.ph996.prol.loopexit, label %.lr.ph996.prol, !llvm.loop !46

.lr.ph996.prol.loopexit:                          ; preds = %.lr.ph996.prol, %.lr.ph996.preheader1327
  %.unr1408 = phi i64 [ %.ph1328, %.lr.ph996.preheader1327 ], [ %540, %.lr.ph996.prol ]
  %542 = icmp ult i64 %536, 3
  br i1 %542, label %._crit_edge997, label %.lr.ph996

543:                                              ; preds = %527
  %544 = shl i64 %.fca.7.0.1.load61, 2
  %545 = call ptr @malloc(i64 %544)
  %546 = icmp sgt i64 %.fca.7.0.1.load61, 0
  br i1 %546, label %.lr.ph995.preheader, label %.thread945

.lr.ph995.preheader:                              ; preds = %543
  %547 = ptrtoint ptr %545 to i64
  %min.iters.check1250 = icmp ult i64 %.fca.7.0.1.load61, 8
  %548 = sub i64 %547, %.fca.0.load371246
  %diff.check1247 = icmp ult i64 %548, 32
  %or.cond1319 = select i1 %min.iters.check1250, i1 true, i1 %diff.check1247
  br i1 %or.cond1319, label %.lr.ph995.preheader1329, label %vector.ph1251

vector.ph1251:                                    ; preds = %.lr.ph995.preheader
  %n.vec1253 = and i64 %.fca.7.0.1.load61, -8
  br label %vector.body1256

vector.body1256:                                  ; preds = %vector.body1256, %vector.ph1251
  %index1257 = phi i64 [ 0, %vector.ph1251 ], [ %index.next1260, %vector.body1256 ]
  %549 = getelementptr i32, ptr %.fca.0.load37, i64 %index1257
  %wide.load1258 = load <4 x i32>, ptr %549, align 4, !tbaa !3
  %550 = getelementptr i32, ptr %549, i64 4
  %wide.load1259 = load <4 x i32>, ptr %550, align 4, !tbaa !3
  %551 = getelementptr i32, ptr %545, i64 %index1257
  store <4 x i32> %wide.load1258, ptr %551, align 4, !tbaa !3
  %552 = getelementptr i32, ptr %551, i64 4
  store <4 x i32> %wide.load1259, ptr %552, align 4, !tbaa !3
  %index.next1260 = add nuw i64 %index1257, 8
  %553 = icmp eq i64 %index.next1260, %n.vec1253
  br i1 %553, label %middle.block1248, label %vector.body1256, !llvm.loop !47

middle.block1248:                                 ; preds = %vector.body1256
  %cmp.n1255 = icmp eq i64 %.fca.7.0.1.load61, %n.vec1253
  br i1 %cmp.n1255, label %.loopexit, label %.lr.ph995.preheader1329

.lr.ph995.preheader1329:                          ; preds = %.lr.ph995.preheader, %middle.block1248
  %.ph1330 = phi i64 [ 0, %.lr.ph995.preheader ], [ %n.vec1253, %middle.block1248 ]
  %554 = xor i64 %.ph1330, -1
  %555 = add i64 %.fca.7.0.1.load61, %554
  %xtraiter1401 = and i64 %.fca.7.0.1.load61, 3
  %lcmp.mod1402.not = icmp eq i64 %xtraiter1401, 0
  br i1 %lcmp.mod1402.not, label %.lr.ph995.prol.loopexit, label %.lr.ph995.prol

.lr.ph995.prol:                                   ; preds = %.lr.ph995.preheader1329, %.lr.ph995.prol
  %556 = phi i64 [ %559, %.lr.ph995.prol ], [ %.ph1330, %.lr.ph995.preheader1329 ]
  %prol.iter1403 = phi i64 [ %prol.iter1403.next, %.lr.ph995.prol ], [ 0, %.lr.ph995.preheader1329 ]
  %557 = getelementptr i32, ptr %.fca.0.load37, i64 %556
  %558 = load i32, ptr %557, align 4, !tbaa !3
  %559 = add nuw nsw i64 %556, 1
  %560 = getelementptr i32, ptr %545, i64 %556
  store i32 %558, ptr %560, align 4, !tbaa !3
  %prol.iter1403.next = add i64 %prol.iter1403, 1
  %prol.iter1403.cmp.not = icmp eq i64 %prol.iter1403.next, %xtraiter1401
  br i1 %prol.iter1403.cmp.not, label %.lr.ph995.prol.loopexit, label %.lr.ph995.prol, !llvm.loop !48

.lr.ph995.prol.loopexit:                          ; preds = %.lr.ph995.prol, %.lr.ph995.preheader1329
  %.unr1404 = phi i64 [ %.ph1330, %.lr.ph995.preheader1329 ], [ %559, %.lr.ph995.prol ]
  %561 = icmp ult i64 %555, 3
  br i1 %561, label %.loopexit, label %.lr.ph995

.lr.ph995:                                        ; preds = %.lr.ph995.prol.loopexit, %.lr.ph995
  %562 = phi i64 [ %577, %.lr.ph995 ], [ %.unr1404, %.lr.ph995.prol.loopexit ]
  %563 = getelementptr i32, ptr %.fca.0.load37, i64 %562
  %564 = load i32, ptr %563, align 4, !tbaa !3
  %565 = add nuw nsw i64 %562, 1
  %566 = getelementptr i32, ptr %545, i64 %562
  store i32 %564, ptr %566, align 4, !tbaa !3
  %567 = getelementptr i32, ptr %.fca.0.load37, i64 %565
  %568 = load i32, ptr %567, align 4, !tbaa !3
  %569 = add nuw nsw i64 %562, 2
  %570 = getelementptr i32, ptr %545, i64 %565
  store i32 %568, ptr %570, align 4, !tbaa !3
  %571 = getelementptr i32, ptr %.fca.0.load37, i64 %569
  %572 = load i32, ptr %571, align 4, !tbaa !3
  %573 = add nuw nsw i64 %562, 3
  %574 = getelementptr i32, ptr %545, i64 %569
  store i32 %572, ptr %574, align 4, !tbaa !3
  %575 = getelementptr i32, ptr %.fca.0.load37, i64 %573
  %576 = load i32, ptr %575, align 4, !tbaa !3
  %577 = add nuw nsw i64 %562, 4
  %578 = getelementptr i32, ptr %545, i64 %573
  store i32 %576, ptr %578, align 4, !tbaa !3
  %exitcond1028.not.3 = icmp eq i64 %577, %.fca.7.0.1.load61
  br i1 %exitcond1028.not.3, label %.loopexit, label %.lr.ph995, !llvm.loop !49

.lr.ph996:                                        ; preds = %.lr.ph996.prol.loopexit, %.lr.ph996
  %579 = phi i64 [ %594, %.lr.ph996 ], [ %.unr1408, %.lr.ph996.prol.loopexit ]
  %580 = getelementptr i32, ptr %.fca.0.load37, i64 %579
  %581 = load i32, ptr %580, align 4, !tbaa !3
  %582 = add nuw nsw i64 %579, 1
  %583 = getelementptr i32, ptr %.unpack839, i64 %579
  store i32 %581, ptr %583, align 4, !tbaa !3
  %584 = getelementptr i32, ptr %.fca.0.load37, i64 %582
  %585 = load i32, ptr %584, align 4, !tbaa !3
  %586 = add nuw nsw i64 %579, 2
  %587 = getelementptr i32, ptr %.unpack839, i64 %582
  store i32 %585, ptr %587, align 4, !tbaa !3
  %588 = getelementptr i32, ptr %.fca.0.load37, i64 %586
  %589 = load i32, ptr %588, align 4, !tbaa !3
  %590 = add nuw nsw i64 %579, 3
  %591 = getelementptr i32, ptr %.unpack839, i64 %586
  store i32 %589, ptr %591, align 4, !tbaa !3
  %592 = getelementptr i32, ptr %.fca.0.load37, i64 %590
  %593 = load i32, ptr %592, align 4, !tbaa !3
  %594 = add nuw nsw i64 %579, 4
  %595 = getelementptr i32, ptr %.unpack839, i64 %590
  store i32 %593, ptr %595, align 4, !tbaa !3
  %exitcond1029.not.3 = icmp eq i64 %594, %.fca.7.0.1.load61
  br i1 %exitcond1029.not.3, label %._crit_edge997, label %.lr.ph996, !llvm.loop !50

596:                                              ; preds = %._crit_edge993
  %597 = shl i64 %.fca.7.0.1.load61, 2
  %598 = call ptr @malloc(i64 %597)
  %599 = icmp sgt i64 %.fca.7.0.1.load61, 0
  br i1 %599, label %.lr.ph999.preheader, label %.loopexit.thread

.lr.ph999.preheader:                              ; preds = %596
  %600 = ptrtoint ptr %598 to i64
  %min.iters.check1281 = icmp ult i64 %.fca.7.0.1.load61, 8
  %601 = sub i64 %600, %.fca.0.load371246
  %diff.check1278 = icmp ult i64 %601, 32
  %or.cond1320 = select i1 %min.iters.check1281, i1 true, i1 %diff.check1278
  br i1 %or.cond1320, label %.lr.ph999.preheader1325, label %vector.ph1282

vector.ph1282:                                    ; preds = %.lr.ph999.preheader
  %n.vec1284 = and i64 %.fca.7.0.1.load61, -8
  br label %vector.body1287

vector.body1287:                                  ; preds = %vector.body1287, %vector.ph1282
  %index1288 = phi i64 [ 0, %vector.ph1282 ], [ %index.next1291, %vector.body1287 ]
  %602 = getelementptr i32, ptr %.fca.0.load37, i64 %index1288
  %wide.load1289 = load <4 x i32>, ptr %602, align 4, !tbaa !3
  %603 = getelementptr i32, ptr %602, i64 4
  %wide.load1290 = load <4 x i32>, ptr %603, align 4, !tbaa !3
  %604 = getelementptr i32, ptr %598, i64 %index1288
  store <4 x i32> %wide.load1289, ptr %604, align 4, !tbaa !3
  %605 = getelementptr i32, ptr %604, i64 4
  store <4 x i32> %wide.load1290, ptr %605, align 4, !tbaa !3
  %index.next1291 = add nuw i64 %index1288, 8
  %606 = icmp eq i64 %index.next1291, %n.vec1284
  br i1 %606, label %middle.block1279, label %vector.body1287, !llvm.loop !51

middle.block1279:                                 ; preds = %vector.body1287
  %cmp.n1286 = icmp eq i64 %.fca.7.0.1.load61, %n.vec1284
  br i1 %cmp.n1286, label %.loopexit, label %.lr.ph999.preheader1325

.lr.ph999.preheader1325:                          ; preds = %.lr.ph999.preheader, %middle.block1279
  %.ph1326 = phi i64 [ 0, %.lr.ph999.preheader ], [ %n.vec1284, %middle.block1279 ]
  %607 = xor i64 %.ph1326, -1
  %608 = add i64 %.fca.7.0.1.load61, %607
  %xtraiter1409 = and i64 %.fca.7.0.1.load61, 3
  %lcmp.mod1410.not = icmp eq i64 %xtraiter1409, 0
  br i1 %lcmp.mod1410.not, label %.lr.ph999.prol.loopexit, label %.lr.ph999.prol

.lr.ph999.prol:                                   ; preds = %.lr.ph999.preheader1325, %.lr.ph999.prol
  %609 = phi i64 [ %612, %.lr.ph999.prol ], [ %.ph1326, %.lr.ph999.preheader1325 ]
  %prol.iter1411 = phi i64 [ %prol.iter1411.next, %.lr.ph999.prol ], [ 0, %.lr.ph999.preheader1325 ]
  %610 = getelementptr i32, ptr %.fca.0.load37, i64 %609
  %611 = load i32, ptr %610, align 4, !tbaa !3
  %612 = add nuw nsw i64 %609, 1
  %613 = getelementptr i32, ptr %598, i64 %609
  store i32 %611, ptr %613, align 4, !tbaa !3
  %prol.iter1411.next = add i64 %prol.iter1411, 1
  %prol.iter1411.cmp.not = icmp eq i64 %prol.iter1411.next, %xtraiter1409
  br i1 %prol.iter1411.cmp.not, label %.lr.ph999.prol.loopexit, label %.lr.ph999.prol, !llvm.loop !52

.lr.ph999.prol.loopexit:                          ; preds = %.lr.ph999.prol, %.lr.ph999.preheader1325
  %.unr1412 = phi i64 [ %.ph1326, %.lr.ph999.preheader1325 ], [ %612, %.lr.ph999.prol ]
  %614 = icmp ult i64 %608, 3
  br i1 %614, label %.loopexit, label %.lr.ph999

.lr.ph999:                                        ; preds = %.lr.ph999.prol.loopexit, %.lr.ph999
  %615 = phi i64 [ %630, %.lr.ph999 ], [ %.unr1412, %.lr.ph999.prol.loopexit ]
  %616 = getelementptr i32, ptr %.fca.0.load37, i64 %615
  %617 = load i32, ptr %616, align 4, !tbaa !3
  %618 = add nuw nsw i64 %615, 1
  %619 = getelementptr i32, ptr %598, i64 %615
  store i32 %617, ptr %619, align 4, !tbaa !3
  %620 = getelementptr i32, ptr %.fca.0.load37, i64 %618
  %621 = load i32, ptr %620, align 4, !tbaa !3
  %622 = add nuw nsw i64 %615, 2
  %623 = getelementptr i32, ptr %598, i64 %618
  store i32 %621, ptr %623, align 4, !tbaa !3
  %624 = getelementptr i32, ptr %.fca.0.load37, i64 %622
  %625 = load i32, ptr %624, align 4, !tbaa !3
  %626 = add nuw nsw i64 %615, 3
  %627 = getelementptr i32, ptr %598, i64 %622
  store i32 %625, ptr %627, align 4, !tbaa !3
  %628 = getelementptr i32, ptr %.fca.0.load37, i64 %626
  %629 = load i32, ptr %628, align 4, !tbaa !3
  %630 = add nuw nsw i64 %615, 4
  %631 = getelementptr i32, ptr %598, i64 %626
  store i32 %629, ptr %631, align 4, !tbaa !3
  %exitcond1030.not.3 = icmp eq i64 %630, %.fca.7.0.1.load61
  br i1 %exitcond1030.not.3, label %.loopexit, label %.lr.ph999, !llvm.loop !53

.loopexit:                                        ; preds = %.lr.ph995.prol.loopexit, %.lr.ph995, %.lr.ph999.prol.loopexit, %.lr.ph999, %middle.block1248, %middle.block1279
  %.ph943 = phi ptr [ %598, %middle.block1279 ], [ %545, %middle.block1248 ], [ %598, %.lr.ph999 ], [ %598, %.lr.ph999.prol.loopexit ], [ %545, %.lr.ph995 ], [ %545, %.lr.ph995.prol.loopexit ]
  br i1 %.not851, label %.loopexit.thread, label %.thread945

.thread945:                                       ; preds = %543, %.loopexit
  %.ph9431063 = phi ptr [ %.ph943, %.loopexit ], [ %545, %543 ]
  call void @free(ptr nonnull %.unpack839)
  br label %.loopexit.thread

.loopexit.thread:                                 ; preds = %596, %.thread945, %.loopexit
  %.ph9431060 = phi ptr [ %.ph9431063, %.thread945 ], [ %.ph943, %.loopexit ], [ %598, %596 ]
  store ptr %.ph9431060, ptr @_QFEc.0, align 8, !tbaa !7
  store i64 %.fca.7.0.1.load61, ptr @_QFEc.8, align 8, !tbaa !7
  br label %._crit_edge997

._crit_edge997:                                   ; preds = %.lr.ph996.prol.loopexit, %.lr.ph996, %middle.block1264, %.preheader, %.loopexit.thread
  call void @free(ptr %.fca.0.load37)
  call void @free(ptr %478)
  %632 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.0e142d719f3174978acd787cf1638736, i32 26)
  %633 = call dereferenceable_or_null(128) ptr @malloc(i64 128)
  %.unpack852 = load ptr, ptr @_QFEb.0, align 8, !tbaa !7
  %.unpack859.unpack.unpack861 = load i64, ptr @_QFEb.8, align 8, !tbaa !7
  %634 = shl i64 %.unpack859.unpack.unpack861, 2
  %635 = call ptr @malloc(i64 %634)
  %636 = icmp sgt i64 %.unpack859.unpack.unpack861, 0
  br i1 %636, label %._crit_edge1002, label %._crit_edge1002.thread

._crit_edge1002:                                  ; preds = %._crit_edge997
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %635, ptr align 4 %.unpack852, i64 %634, i1 false), !tbaa !3
  %637 = icmp ugt i64 %.unpack859.unpack.unpack861, 31
  br i1 %637, label %638, label %._crit_edge1002.thread

638:                                              ; preds = %._crit_edge1002
  %639 = shl nuw i64 %.unpack859.unpack.unpack861, 1
  %640 = shl i64 %.unpack859.unpack.unpack861, 3
  %641 = call ptr @realloc(ptr %633, i64 %640)
  br label %._crit_edge1002.thread

._crit_edge1002.thread:                           ; preds = %._crit_edge997, %638, %._crit_edge1002
  %.0750 = phi i64 [ %639, %638 ], [ 32, %._crit_edge1002 ], [ 32, %._crit_edge997 ]
  %642 = phi ptr [ %641, %638 ], [ %633, %._crit_edge1002 ], [ %633, %._crit_edge997 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %642, ptr align 1 %635, i64 %634, i1 false)
  %643 = load i32, ptr %8, align 4, !tbaa !3
  %644 = add i64 %.unpack859.unpack.unpack861, 1
  %.not864 = icmp sgt i64 %.0750, %644
  br i1 %.not864, label %649, label %645

645:                                              ; preds = %._crit_edge1002.thread
  %646 = shl i64 %644, 1
  %647 = shl i64 %644, 3
  %648 = call ptr @realloc(ptr %642, i64 %647)
  br label %649

649:                                              ; preds = %645, %._crit_edge1002.thread
  %.1751 = phi i64 [ %646, %645 ], [ %.0750, %._crit_edge1002.thread ]
  %650 = phi ptr [ %648, %645 ], [ %642, %._crit_edge1002.thread ]
  %651 = getelementptr i32, ptr %650, i64 %.unpack859.unpack.unpack861
  store i32 %643, ptr %651, align 4, !tbaa !3
  %.unpack865 = load ptr, ptr @_QFEc.0, align 8, !tbaa !7
  %.unpack872.unpack.unpack874 = load i64, ptr @_QFEc.8, align 8, !tbaa !7
  %652 = shl i64 %.unpack872.unpack.unpack874, 2
  %653 = call ptr @malloc(i64 %652)
  %654 = icmp sgt i64 %.unpack872.unpack.unpack874, 0
  br i1 %654, label %.lr.ph1004.preheader, label %._crit_edge1005

.lr.ph1004.preheader:                             ; preds = %649
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %653, ptr align 4 %.unpack865, i64 %652, i1 false), !tbaa !3
  br label %._crit_edge1005

._crit_edge1005:                                  ; preds = %.lr.ph1004.preheader, %649
  %655 = add i64 %.unpack872.unpack.unpack874, %644
  %.not877 = icmp sgt i64 %.1751, %655
  br i1 %.not877, label %660, label %656

656:                                              ; preds = %._crit_edge1005
  %657 = shl i64 %655, 1
  %658 = shl i64 %655, 3
  %659 = call ptr @realloc(ptr nonnull %650, i64 %658)
  br label %660

660:                                              ; preds = %656, %._crit_edge1005
  %.2 = phi i64 [ %657, %656 ], [ %.1751, %._crit_edge1005 ]
  %661 = phi ptr [ %659, %656 ], [ %650, %._crit_edge1005 ]
  %662 = getelementptr i32, ptr %661, i64 %644
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %662, ptr align 1 %653, i64 %652, i1 false)
  %663 = load i32, ptr %8, align 4, !tbaa !3
  %664 = add i64 %655, 1
  %.not878 = icmp sgt i64 %.2, %664
  br i1 %.not878, label %668, label %665

665:                                              ; preds = %660
  %666 = shl i64 %664, 3
  %667 = call ptr @realloc(ptr %661, i64 %666)
  br label %668

668:                                              ; preds = %665, %660
  %669 = phi ptr [ %667, %665 ], [ %661, %660 ]
  %670 = getelementptr i32, ptr %669, i64 %655
  store i32 %663, ptr %670, align 4, !tbaa !3
  %671 = shl i64 %664, 2
  %672 = call ptr @malloc(i64 %671)
  %673 = icmp ult i64 %655, 9223372036854775807
  br i1 %673, label %.lr.ph1007.preheader, label %._crit_edge1008

.lr.ph1007.preheader:                             ; preds = %668
  %674 = ptrtoint ptr %672 to i64
  %675 = ptrtoint ptr %669 to i64
  %676 = add i64 %.unpack859.unpack.unpack861, %.unpack872.unpack.unpack874
  %677 = add i64 %676, 3
  %678 = icmp ne i64 %664, 0
  %umin.neg = sext i1 %678 to i64
  %679 = add i64 %677, %umin.neg
  %min.iters.check1296 = icmp ult i64 %679, 8
  %680 = sub i64 %674, %675
  %diff.check1293 = icmp ult i64 %680, 32
  %or.cond1321 = or i1 %min.iters.check1296, %diff.check1293
  br i1 %or.cond1321, label %.lr.ph1007.preheader1322, label %vector.ph1297

vector.ph1297:                                    ; preds = %.lr.ph1007.preheader
  %n.vec1299 = and i64 %679, -8
  %ind.end = sub i64 %664, %n.vec1299
  br label %vector.body1303

vector.body1303:                                  ; preds = %vector.body1303, %vector.ph1297
  %index1304 = phi i64 [ 0, %vector.ph1297 ], [ %index.next1307, %vector.body1303 ]
  %681 = getelementptr i32, ptr %669, i64 %index1304
  %wide.load1305 = load <4 x i32>, ptr %681, align 4, !tbaa !3
  %682 = getelementptr i32, ptr %681, i64 4
  %wide.load1306 = load <4 x i32>, ptr %682, align 4, !tbaa !3
  %683 = getelementptr i32, ptr %672, i64 %index1304
  store <4 x i32> %wide.load1305, ptr %683, align 4, !tbaa !3
  %684 = getelementptr i32, ptr %683, i64 4
  store <4 x i32> %wide.load1306, ptr %684, align 4, !tbaa !3
  %index.next1307 = add nuw i64 %index1304, 8
  %685 = icmp eq i64 %index.next1307, %n.vec1299
  br i1 %685, label %middle.block1294, label %vector.body1303, !llvm.loop !54

middle.block1294:                                 ; preds = %vector.body1303
  %cmp.n1302 = icmp eq i64 %679, %n.vec1299
  br i1 %cmp.n1302, label %._crit_edge1008, label %.lr.ph1007.preheader1322

.lr.ph1007.preheader1322:                         ; preds = %.lr.ph1007.preheader, %middle.block1294
  %.ph1323 = phi i64 [ %664, %.lr.ph1007.preheader ], [ %ind.end, %middle.block1294 ]
  %.ph1324 = phi i64 [ 0, %.lr.ph1007.preheader ], [ %n.vec1299, %middle.block1294 ]
  br label %.lr.ph1007

.lr.ph1007:                                       ; preds = %.lr.ph1007.preheader1322, %.lr.ph1007
  %686 = phi i64 [ %692, %.lr.ph1007 ], [ %.ph1323, %.lr.ph1007.preheader1322 ]
  %687 = phi i64 [ %688, %.lr.ph1007 ], [ %.ph1324, %.lr.ph1007.preheader1322 ]
  %688 = add nuw nsw i64 %687, 1
  %689 = getelementptr i32, ptr %669, i64 %687
  %690 = load i32, ptr %689, align 4, !tbaa !3
  %691 = getelementptr i32, ptr %672, i64 %687
  store i32 %690, ptr %691, align 4, !tbaa !3
  %692 = add nsw i64 %686, -1
  %693 = icmp ugt i64 %686, 1
  br i1 %693, label %.lr.ph1007, label %._crit_edge1008, !llvm.loop !55

._crit_edge1008:                                  ; preds = %.lr.ph1007, %middle.block1294, %668
  store ptr %672, ptr %1, align 8, !tbaa !7
  %.fca.1.gep491 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep491, align 8, !tbaa !7
  %.fca.2.gep493 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep493, align 8, !tbaa !7
  %.fca.3.gep495 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep495, align 4, !tbaa !7
  %.fca.4.gep497 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 4
  store i8 9, ptr %.fca.4.gep497, align 1, !tbaa !7
  %.fca.5.gep499 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep499, align 2, !tbaa !7
  %.fca.6.gep501 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep501, align 1, !tbaa !7
  %.fca.7.0.0.gep503 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep503, align 8, !tbaa !7
  %.fca.7.0.1.gep505 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 1
  store i64 %664, ptr %.fca.7.0.1.gep505, align 8, !tbaa !7
  %.fca.7.0.2.gep507 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep507, align 8, !tbaa !7
  %694 = call i1 @_FortranAioOutputDescriptor(ptr %632, ptr nonnull %1)
  call void @free(ptr %672)
  call void @free(ptr nonnull %669)
  call void @free(ptr %653)
  call void @free(ptr %635)
  br label %695

695:                                              ; preds = %18, %21, %27, %30, %46, %._crit_edge1008
  %.sink = phi ptr [ %19, %18 ], [ %22, %21 ], [ %28, %27 ], [ %31, %30 ], [ %47, %46 ], [ %632, %._crit_edge1008 ]
  %696 = call i32 @_FortranAioEndIoStatement(ptr %.sink)
  ret void
}

declare ptr @_FortranAioBeginExternalListInput(i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioInputInteger(ptr, ptr, i32) local_unnamed_addr

declare i32 @_FortranAioEndIoStatement(ptr) local_unnamed_addr

declare ptr @_FortranAioBeginExternalListOutput(i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputAscii(ptr, ptr, i64) local_unnamed_addr

; Function Attrs: mustprogress nounwind willreturn allockind("realloc") allocsize(1) memory(argmem: readwrite, inaccessiblemem: readwrite)
declare noalias noundef ptr @realloc(ptr allocptr nocapture, i64 noundef) local_unnamed_addr #2

declare {} @_FortranAPack(ptr, ptr, ptr, ptr, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputDescriptor(ptr, ptr) local_unnamed_addr

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #1 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #2 = { mustprogress nounwind willreturn allockind("realloc") allocsize(1) memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }

!llvm.module.flags = !{!0, !1, !2}

!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{!4, !4, i64 0}
!4 = !{!"any data access", !5, i64 0}
!5 = !{!"any access", !6, i64 0}
!6 = !{!"Flang Type TBAA Root"}
!7 = !{!8, !8, i64 0}
!8 = !{!"descriptor member", !5, i64 0}
!9 = distinct !{!9, !10, !11}
!10 = !{!"llvm.loop.isvectorized", i32 1}
!11 = !{!"llvm.loop.unroll.runtime.disable"}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.unroll.disable"}
!14 = distinct !{!14, !10, !11}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !10}
!17 = distinct !{!17, !10}
!18 = distinct !{!18, !10, !11}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10, !11}
!22 = distinct !{!22, !13}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10, !11}
!25 = distinct !{!25, !13}
!26 = distinct !{!26, !10, !11}
!27 = distinct !{!27, !13}
!28 = distinct !{!28, !10}
!29 = distinct !{!29, !10}
!30 = distinct !{!30, !10, !11}
!31 = distinct !{!31, !13}
!32 = distinct !{!32, !10}
!33 = distinct !{!33, !10, !11}
!34 = distinct !{!34, !13}
!35 = distinct !{!35, !10, !11}
!36 = distinct !{!36, !13}
!37 = distinct !{!37, !10}
!38 = distinct !{!38, !10}
!39 = distinct !{!39, !10, !11}
!40 = distinct !{!40, !13}
!41 = distinct !{!41, !10}
!42 = distinct !{!42, !10, !11}
!43 = distinct !{!43, !13}
!44 = distinct !{!44, !10}
!45 = distinct !{!45, !10, !11}
!46 = distinct !{!46, !13}
!47 = distinct !{!47, !10, !11}
!48 = distinct !{!48, !13}
!49 = distinct !{!49, !10}
!50 = distinct !{!50, !10}
!51 = distinct !{!51, !10, !11}
!52 = distinct !{!52, !13}
!53 = distinct !{!53, !10}
!54 = distinct !{!54, !10, !11}
!55 = distinct !{!55, !10}
