; LLVM IR from Karansutradhar/Maze-Solver-Robot-Depth-First-Search :: Final_Project/src/Algorithm/algorithm.ll (ZN2fp9Algorithm14FindNeighboursESt5arrayIiLm2EE)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.std::array.1" = type { [2 x i32] }
%"class.fp::Algorithm" = type { i8, i8, i8, %"class.fp::Maze", i8, %"struct.std::array.1", %"struct.std::array.1", %"class.std::stack", %"class.std::shared_ptr", %"class.std::stack", %"struct.std::array.2", %"struct.std::array.2", %"struct.std::array", %"struct.std::array", %"struct.std::array.1", %"struct.std::array.1", %"struct.std::array.1", %"struct.std::array.1", %"struct.std::array.1" }
%"class.fp::Maze" = type { %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::stack" = type { %"class.std::deque" }
%"class.std::deque" = type { %"class.std::_Deque_base" }
%"class.std::_Deque_base" = type { %"struct.std::_Deque_base<std::array<int, 2>, std::allocator<std::array<int, 2>>>::_Deque_impl" }
%"struct.std::_Deque_base<std::array<int, 2>, std::allocator<std::array<int, 2>>>::_Deque_impl" = type { %"struct.std::_Deque_base<std::array<int, 2>, std::allocator<std::array<int, 2>>>::_Deque_impl_data" }
%"struct.std::_Deque_base<std::array<int, 2>, std::allocator<std::array<int, 2>>>::_Deque_impl_data" = type { ptr, i64, %"struct.std::_Deque_iterator", %"struct.std::_Deque_iterator" }
%"struct.std::_Deque_iterator" = type { ptr, ptr, ptr, ptr }
%"struct.std::array.2" = type { [16 x %"struct.std::array.3"] }
%"struct.std::array.3" = type { [16 x %"struct.fp::Node"] }
%"struct.fp::Node" = type { i32, %"struct.std::array.1" }
%"struct.std::array" = type { [16 x %"struct.std::array.0"] }
%"struct.std::array.0" = type { [16 x i8] }

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920), i64, i64) #0 align 2

; Function Attrs: 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) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8), i64 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN2fp9Algorithm14FindNeighboursESt5arrayIiLm2EE(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %1) #0 align 2 {
  %3 = alloca %"struct.std::array.1", align 4
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca i8, align 1
  %7 = alloca i8, align 1
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca %"struct.std::array.1", align 4
  %11 = alloca %"struct.std::array.1", align 4
  %12 = alloca %"struct.std::array.1", align 4
  %13 = alloca %"struct.std::array.1", align 4
  %14 = alloca %"struct.std::array.1", align 4
  %15 = alloca %"struct.std::array.1", align 4
  %16 = alloca %"struct.std::array.1", align 4
  %17 = alloca %"struct.std::array.1", align 4
  %18 = alloca %"struct.std::array.1", align 4
  %19 = alloca %"struct.std::array.1", align 4
  %20 = alloca %"struct.std::array.1", align 4
  %21 = alloca %"struct.std::array.1", align 4
  %22 = alloca %"struct.std::array.1", align 4
  %23 = alloca %"struct.std::array.1", align 4
  %24 = alloca %"struct.std::array.1", align 4
  %25 = alloca %"struct.std::array.1", align 4
  %26 = alloca %"struct.std::array.1", align 4
  %27 = alloca %"struct.std::array.1", align 4
  %28 = alloca %"struct.std::array.1", align 4
  %29 = alloca %"struct.std::array.1", align 4
  %30 = alloca %"struct.std::array.1", align 4
  %31 = alloca %"struct.std::array.1", align 4
  %32 = alloca %"struct.std::array.1", align 4
  %33 = alloca %"struct.std::array.1", align 4
  %34 = alloca %"struct.std::array.1", align 4
  %35 = alloca %"struct.std::array.1", align 4
  %36 = alloca %"struct.std::array.1", align 4
  %37 = alloca %"struct.std::array.1", align 4
  %38 = alloca %"struct.std::array.1", align 4
  %39 = alloca %"struct.std::array.1", align 4
  %40 = alloca %"struct.std::array.1", align 4
  %41 = alloca %"struct.std::array.1", align 4
  %42 = alloca %"struct.std::array.1", align 4
  %43 = alloca %"struct.std::array.1", align 4
  %44 = alloca %"struct.std::array.1", align 4
  %45 = alloca %"struct.std::array.1", align 4
  %46 = getelementptr inbounds %"struct.std::array.1", ptr %3, i32 0, i32 0
  store i64 %1, ptr %46, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  %47 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #4
  %48 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 8
  %49 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN2fp14LandBasedRobotELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %48) #4
  %50 = load ptr, ptr %49, align 8, !tbaa !9
  %51 = getelementptr inbounds ptr, ptr %50, i64 0
  %52 = load ptr, ptr %51, align 8
  %53 = call noundef signext i8 %52(ptr noundef nonnull align 8 dereferenceable(89) %49)
  store i8 %53, ptr %5, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #4
  %54 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 3
  %55 = getelementptr inbounds %"class.fp::Maze", ptr %54, i32 0, i32 0
  %56 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #4
  %57 = load i32, ptr %56, align 4, !tbaa !12
  %58 = sext i32 %57 to i64
  %59 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZNSt5arrayIS_IbLm16EELm16EEixEm(ptr noundef nonnull align 1 dereferenceable(256) %55, i64 noundef %58) #4
  %60 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #4
  %61 = load i32, ptr %60, align 4, !tbaa !12
  %62 = sext i32 %61 to i64
  %63 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt5arrayIbLm16EEixEm(ptr noundef nonnull align 1 dereferenceable(16) %59, i64 noundef %62) #4
  %64 = load i8, ptr %63, align 1, !tbaa !14, !range !16, !noundef !17
  %65 = trunc i8 %64 to i1
  %66 = zext i1 %65 to i8
  store i8 %66, ptr %6, align 1, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #4
  %67 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 3
  %68 = getelementptr inbounds %"class.fp::Maze", ptr %67, i32 0, i32 1
  %69 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #4
  %70 = load i32, ptr %69, align 4, !tbaa !12
  %71 = sext i32 %70 to i64
  %72 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZNSt5arrayIS_IbLm16EELm16EEixEm(ptr noundef nonnull align 1 dereferenceable(256) %68, i64 noundef %71) #4
  %73 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #4
  %74 = load i32, ptr %73, align 4, !tbaa !12
  %75 = sext i32 %74 to i64
  %76 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt5arrayIbLm16EEixEm(ptr noundef nonnull align 1 dereferenceable(16) %72, i64 noundef %75) #4
  %77 = load i8, ptr %76, align 1, !tbaa !14, !range !16, !noundef !17
  %78 = trunc i8 %77 to i1
  %79 = zext i1 %78 to i8
  store i8 %79, ptr %7, align 1, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #4
  %80 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 3
  %81 = getelementptr inbounds %"class.fp::Maze", ptr %80, i32 0, i32 2
  %82 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #4
  %83 = load i32, ptr %82, align 4, !tbaa !12
  %84 = sext i32 %83 to i64
  %85 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZNSt5arrayIS_IbLm16EELm16EEixEm(ptr noundef nonnull align 1 dereferenceable(256) %81, i64 noundef %84) #4
  %86 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #4
  %87 = load i32, ptr %86, align 4, !tbaa !12
  %88 = sext i32 %87 to i64
  %89 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt5arrayIbLm16EEixEm(ptr noundef nonnull align 1 dereferenceable(16) %85, i64 noundef %88) #4
  %90 = load i8, ptr %89, align 1, !tbaa !14, !range !16, !noundef !17
  %91 = trunc i8 %90 to i1
  %92 = zext i1 %91 to i8
  store i8 %92, ptr %8, align 1, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #4
  %93 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 3
  %94 = getelementptr inbounds %"class.fp::Maze", ptr %93, i32 0, i32 3
  %95 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #4
  %96 = load i32, ptr %95, align 4, !tbaa !12
  %97 = sext i32 %96 to i64
  %98 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZNSt5arrayIS_IbLm16EELm16EEixEm(ptr noundef nonnull align 1 dereferenceable(256) %94, i64 noundef %97) #4
  %99 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #4
  %100 = load i32, ptr %99, align 4, !tbaa !12
  %101 = sext i32 %100 to i64
  %102 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt5arrayIbLm16EEixEm(ptr noundef nonnull align 1 dereferenceable(16) %98, i64 noundef %101) #4
  %103 = load i8, ptr %102, align 1, !tbaa !14, !range !16, !noundef !17
  %104 = trunc i8 %103 to i1
  %105 = zext i1 %104 to i8
  store i8 %105, ptr %9, align 1, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  %106 = getelementptr inbounds %"struct.std::array.1", ptr %10, i32 0, i32 0
  %107 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #4
  %108 = load i32, ptr %107, align 4, !tbaa !12
  %109 = sub nsw i32 %108, 1
  store i32 %109, ptr %106, align 4, !tbaa !12
  %110 = getelementptr inbounds i32, ptr %106, i64 1
  %111 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #4
  %112 = load i32, ptr %111, align 4, !tbaa !12
  store i32 %112, ptr %110, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  %113 = getelementptr inbounds %"struct.std::array.1", ptr %11, i32 0, i32 0
  %114 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #4
  %115 = load i32, ptr %114, align 4, !tbaa !12
  store i32 %115, ptr %113, align 4, !tbaa !12
  %116 = getelementptr inbounds i32, ptr %113, i64 1
  %117 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #4
  %118 = load i32, ptr %117, align 4, !tbaa !12
  %119 = sub nsw i32 %118, 1
  store i32 %119, ptr %116, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %120 = getelementptr inbounds %"struct.std::array.1", ptr %12, i32 0, i32 0
  %121 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #4
  %122 = load i32, ptr %121, align 4, !tbaa !12
  %123 = add nsw i32 %122, 1
  store i32 %123, ptr %120, align 4, !tbaa !12
  %124 = getelementptr inbounds i32, ptr %120, i64 1
  %125 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #4
  %126 = load i32, ptr %125, align 4, !tbaa !12
  store i32 %126, ptr %124, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  %127 = getelementptr inbounds %"struct.std::array.1", ptr %13, i32 0, i32 0
  %128 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #4
  %129 = load i32, ptr %128, align 4, !tbaa !12
  store i32 %129, ptr %127, align 4, !tbaa !12
  %130 = getelementptr inbounds i32, ptr %127, i64 1
  %131 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #4
  %132 = load i32, ptr %131, align 4, !tbaa !12
  %133 = add nsw i32 %132, 1
  store i32 %133, ptr %130, align 4, !tbaa !12
  %134 = load i8, ptr %5, align 1, !tbaa !11
  %135 = sext i8 %134 to i32
  %136 = icmp eq i32 %135, 78
  br i1 %136, label %137, label %206

137:                                              ; preds = %2
  %138 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %139 = load i8, ptr %138, align 1, !tbaa !18, !range !16, !noundef !17
  %140 = trunc i8 %139 to i1
  br i1 %140, label %154, label %141

141:                                              ; preds = %137
  %142 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %11, i64 noundef 1) #4
  %143 = load i32, ptr %142, align 4, !tbaa !12
  %144 = icmp sge i32 %143, 0
  br i1 %144, label %145, label %154

145:                                              ; preds = %141
  %146 = load i8, ptr %9, align 1, !tbaa !14, !range !16, !noundef !17
  %147 = trunc i8 %146 to i1
  br i1 %147, label %154, label %148

148:                                              ; preds = %145
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %14, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %15, ptr align 4 %11, i64 8, i1 false), !tbaa.struct !34
  %149 = getelementptr inbounds %"struct.std::array.1", ptr %14, i32 0, i32 0
  %150 = load i64, ptr %149, align 4
  %151 = getelementptr inbounds %"struct.std::array.1", ptr %15, i32 0, i32 0
  %152 = load i64, ptr %151, align 4
  %153 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %150, i64 %152)
  br label %154

154:                                              ; preds = %148, %145, %141, %137
  %155 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %156 = load i8, ptr %155, align 1, !tbaa !18, !range !16, !noundef !17
  %157 = trunc i8 %156 to i1
  br i1 %157, label %171, label %158

158:                                              ; preds = %154
  %159 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %10, i64 noundef 0) #4
  %160 = load i32, ptr %159, align 4, !tbaa !12
  %161 = icmp sge i32 %160, 0
  br i1 %161, label %162, label %171

162:                                              ; preds = %158
  %163 = load i8, ptr %6, align 1, !tbaa !14, !range !16, !noundef !17
  %164 = trunc i8 %163 to i1
  br i1 %164, label %171, label %165

165:                                              ; preds = %162
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %16, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 4 %10, i64 8, i1 false), !tbaa.struct !34
  %166 = getelementptr inbounds %"struct.std::array.1", ptr %16, i32 0, i32 0
  %167 = load i64, ptr %166, align 4
  %168 = getelementptr inbounds %"struct.std::array.1", ptr %17, i32 0, i32 0
  %169 = load i64, ptr %168, align 4
  %170 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %167, i64 %169)
  br label %171

171:                                              ; preds = %165, %162, %158, %154
  %172 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %173 = load i8, ptr %172, align 1, !tbaa !18, !range !16, !noundef !17
  %174 = trunc i8 %173 to i1
  br i1 %174, label %188, label %175

175:                                              ; preds = %171
  %176 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %13, i64 noundef 1) #4
  %177 = load i32, ptr %176, align 4, !tbaa !12
  %178 = icmp sle i32 %177, 15
  br i1 %178, label %179, label %188

179:                                              ; preds = %175
  %180 = load i8, ptr %8, align 1, !tbaa !14, !range !16, !noundef !17
  %181 = trunc i8 %180 to i1
  br i1 %181, label %188, label %182

182:                                              ; preds = %179
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %18, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !34
  %183 = getelementptr inbounds %"struct.std::array.1", ptr %18, i32 0, i32 0
  %184 = load i64, ptr %183, align 4
  %185 = getelementptr inbounds %"struct.std::array.1", ptr %19, i32 0, i32 0
  %186 = load i64, ptr %185, align 4
  %187 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %184, i64 %186)
  br label %188

188:                                              ; preds = %182, %179, %175, %171
  %189 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %190 = load i8, ptr %189, align 1, !tbaa !18, !range !16, !noundef !17
  %191 = trunc i8 %190 to i1
  br i1 %191, label %205, label %192

192:                                              ; preds = %188
  %193 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %12, i64 noundef 0) #4
  %194 = load i32, ptr %193, align 4, !tbaa !12
  %195 = icmp sle i32 %194, 15
  br i1 %195, label %196, label %205

196:                                              ; preds = %192
  %197 = load i8, ptr %7, align 1, !tbaa !14, !range !16, !noundef !17
  %198 = trunc i8 %197 to i1
  br i1 %198, label %205, label %199

199:                                              ; preds = %196
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %20, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %12, i64 8, i1 false), !tbaa.struct !34
  %200 = getelementptr inbounds %"struct.std::array.1", ptr %20, i32 0, i32 0
  %201 = load i64, ptr %200, align 4
  %202 = getelementptr inbounds %"struct.std::array.1", ptr %21, i32 0, i32 0
  %203 = load i64, ptr %202, align 4
  %204 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %201, i64 %203)
  br label %205

205:                                              ; preds = %199, %196, %192, %188
  br label %432

206:                                              ; preds = %2
  %207 = load i8, ptr %5, align 1, !tbaa !11
  %208 = sext i8 %207 to i32
  %209 = icmp eq i32 %208, 83
  br i1 %209, label %210, label %279

210:                                              ; preds = %206
  %211 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %212 = load i8, ptr %211, align 1, !tbaa !18, !range !16, !noundef !17
  %213 = trunc i8 %212 to i1
  br i1 %213, label %227, label %214

214:                                              ; preds = %210
  %215 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %13, i64 noundef 1) #4
  %216 = load i32, ptr %215, align 4, !tbaa !12
  %217 = icmp sle i32 %216, 15
  br i1 %217, label %218, label %227

218:                                              ; preds = %214
  %219 = load i8, ptr %8, align 1, !tbaa !14, !range !16, !noundef !17
  %220 = trunc i8 %219 to i1
  br i1 %220, label %227, label %221

221:                                              ; preds = %218
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %22, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !34
  %222 = getelementptr inbounds %"struct.std::array.1", ptr %22, i32 0, i32 0
  %223 = load i64, ptr %222, align 4
  %224 = getelementptr inbounds %"struct.std::array.1", ptr %23, i32 0, i32 0
  %225 = load i64, ptr %224, align 4
  %226 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %223, i64 %225)
  br label %227

227:                                              ; preds = %221, %218, %214, %210
  %228 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %229 = load i8, ptr %228, align 1, !tbaa !18, !range !16, !noundef !17
  %230 = trunc i8 %229 to i1
  br i1 %230, label %244, label %231

231:                                              ; preds = %227
  %232 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %12, i64 noundef 0) #4
  %233 = load i32, ptr %232, align 4, !tbaa !12
  %234 = icmp sle i32 %233, 15
  br i1 %234, label %235, label %244

235:                                              ; preds = %231
  %236 = load i8, ptr %7, align 1, !tbaa !14, !range !16, !noundef !17
  %237 = trunc i8 %236 to i1
  br i1 %237, label %244, label %238

238:                                              ; preds = %235
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %24, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 4 %12, i64 8, i1 false), !tbaa.struct !34
  %239 = getelementptr inbounds %"struct.std::array.1", ptr %24, i32 0, i32 0
  %240 = load i64, ptr %239, align 4
  %241 = getelementptr inbounds %"struct.std::array.1", ptr %25, i32 0, i32 0
  %242 = load i64, ptr %241, align 4
  %243 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %240, i64 %242)
  br label %244

244:                                              ; preds = %238, %235, %231, %227
  %245 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %246 = load i8, ptr %245, align 1, !tbaa !18, !range !16, !noundef !17
  %247 = trunc i8 %246 to i1
  br i1 %247, label %261, label %248

248:                                              ; preds = %244
  %249 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %11, i64 noundef 1) #4
  %250 = load i32, ptr %249, align 4, !tbaa !12
  %251 = icmp sge i32 %250, 0
  br i1 %251, label %252, label %261

252:                                              ; preds = %248
  %253 = load i8, ptr %9, align 1, !tbaa !14, !range !16, !noundef !17
  %254 = trunc i8 %253 to i1
  br i1 %254, label %261, label %255

255:                                              ; preds = %252
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %26, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %27, ptr align 4 %11, i64 8, i1 false), !tbaa.struct !34
  %256 = getelementptr inbounds %"struct.std::array.1", ptr %26, i32 0, i32 0
  %257 = load i64, ptr %256, align 4
  %258 = getelementptr inbounds %"struct.std::array.1", ptr %27, i32 0, i32 0
  %259 = load i64, ptr %258, align 4
  %260 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %257, i64 %259)
  br label %261

261:                                              ; preds = %255, %252, %248, %244
  %262 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %263 = load i8, ptr %262, align 1, !tbaa !18, !range !16, !noundef !17
  %264 = trunc i8 %263 to i1
  br i1 %264, label %278, label %265

265:                                              ; preds = %261
  %266 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %10, i64 noundef 0) #4
  %267 = load i32, ptr %266, align 4, !tbaa !12
  %268 = icmp sge i32 %267, 0
  br i1 %268, label %269, label %278

269:                                              ; preds = %265
  %270 = load i8, ptr %6, align 1, !tbaa !14, !range !16, !noundef !17
  %271 = trunc i8 %270 to i1
  br i1 %271, label %278, label %272

272:                                              ; preds = %269
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %28, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %29, ptr align 4 %10, i64 8, i1 false), !tbaa.struct !34
  %273 = getelementptr inbounds %"struct.std::array.1", ptr %28, i32 0, i32 0
  %274 = load i64, ptr %273, align 4
  %275 = getelementptr inbounds %"struct.std::array.1", ptr %29, i32 0, i32 0
  %276 = load i64, ptr %275, align 4
  %277 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %274, i64 %276)
  br label %278

278:                                              ; preds = %272, %269, %265, %261
  br label %431

279:                                              ; preds = %206
  %280 = load i8, ptr %5, align 1, !tbaa !11
  %281 = sext i8 %280 to i32
  %282 = icmp eq i32 %281, 69
  br i1 %282, label %283, label %352

283:                                              ; preds = %279
  %284 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %285 = load i8, ptr %284, align 1, !tbaa !18, !range !16, !noundef !17
  %286 = trunc i8 %285 to i1
  br i1 %286, label %300, label %287

287:                                              ; preds = %283
  %288 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %10, i64 noundef 0) #4
  %289 = load i32, ptr %288, align 4, !tbaa !12
  %290 = icmp sge i32 %289, 0
  br i1 %290, label %291, label %300

291:                                              ; preds = %287
  %292 = load i8, ptr %6, align 1, !tbaa !14, !range !16, !noundef !17
  %293 = trunc i8 %292 to i1
  br i1 %293, label %300, label %294

294:                                              ; preds = %291
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 4 %10, i64 8, i1 false), !tbaa.struct !34
  %295 = getelementptr inbounds %"struct.std::array.1", ptr %30, i32 0, i32 0
  %296 = load i64, ptr %295, align 4
  %297 = getelementptr inbounds %"struct.std::array.1", ptr %31, i32 0, i32 0
  %298 = load i64, ptr %297, align 4
  %299 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %296, i64 %298)
  br label %300

300:                                              ; preds = %294, %291, %287, %283
  %301 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %302 = load i8, ptr %301, align 1, !tbaa !18, !range !16, !noundef !17
  %303 = trunc i8 %302 to i1
  br i1 %303, label %317, label %304

304:                                              ; preds = %300
  %305 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %13, i64 noundef 1) #4
  %306 = load i32, ptr %305, align 4, !tbaa !12
  %307 = icmp sle i32 %306, 15
  br i1 %307, label %308, label %317

308:                                              ; preds = %304
  %309 = load i8, ptr %8, align 1, !tbaa !14, !range !16, !noundef !17
  %310 = trunc i8 %309 to i1
  br i1 %310, label %317, label %311

311:                                              ; preds = %308
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %33, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !34
  %312 = getelementptr inbounds %"struct.std::array.1", ptr %32, i32 0, i32 0
  %313 = load i64, ptr %312, align 4
  %314 = getelementptr inbounds %"struct.std::array.1", ptr %33, i32 0, i32 0
  %315 = load i64, ptr %314, align 4
  %316 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %313, i64 %315)
  br label %317

317:                                              ; preds = %311, %308, %304, %300
  %318 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %319 = load i8, ptr %318, align 1, !tbaa !18, !range !16, !noundef !17
  %320 = trunc i8 %319 to i1
  br i1 %320, label %334, label %321

321:                                              ; preds = %317
  %322 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %12, i64 noundef 0) #4
  %323 = load i32, ptr %322, align 4, !tbaa !12
  %324 = icmp sle i32 %323, 15
  br i1 %324, label %325, label %334

325:                                              ; preds = %321
  %326 = load i8, ptr %7, align 1, !tbaa !14, !range !16, !noundef !17
  %327 = trunc i8 %326 to i1
  br i1 %327, label %334, label %328

328:                                              ; preds = %325
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %35, ptr align 4 %12, i64 8, i1 false), !tbaa.struct !34
  %329 = getelementptr inbounds %"struct.std::array.1", ptr %34, i32 0, i32 0
  %330 = load i64, ptr %329, align 4
  %331 = getelementptr inbounds %"struct.std::array.1", ptr %35, i32 0, i32 0
  %332 = load i64, ptr %331, align 4
  %333 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %330, i64 %332)
  br label %334

334:                                              ; preds = %328, %325, %321, %317
  %335 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %336 = load i8, ptr %335, align 1, !tbaa !18, !range !16, !noundef !17
  %337 = trunc i8 %336 to i1
  br i1 %337, label %351, label %338

338:                                              ; preds = %334
  %339 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %11, i64 noundef 1) #4
  %340 = load i32, ptr %339, align 4, !tbaa !12
  %341 = icmp sge i32 %340, 0
  br i1 %341, label %342, label %351

342:                                              ; preds = %338
  %343 = load i8, ptr %9, align 1, !tbaa !14, !range !16, !noundef !17
  %344 = trunc i8 %343 to i1
  br i1 %344, label %351, label %345

345:                                              ; preds = %342
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %37, ptr align 4 %11, i64 8, i1 false), !tbaa.struct !34
  %346 = getelementptr inbounds %"struct.std::array.1", ptr %36, i32 0, i32 0
  %347 = load i64, ptr %346, align 4
  %348 = getelementptr inbounds %"struct.std::array.1", ptr %37, i32 0, i32 0
  %349 = load i64, ptr %348, align 4
  %350 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %347, i64 %349)
  br label %351

351:                                              ; preds = %345, %342, %338, %334
  br label %430

352:                                              ; preds = %279
  %353 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %354 = load i8, ptr %353, align 1, !tbaa !18, !range !16, !noundef !17
  %355 = trunc i8 %354 to i1
  br i1 %355, label %429, label %356

356:                                              ; preds = %352
  %357 = load i8, ptr %5, align 1, !tbaa !11
  %358 = sext i8 %357 to i32
  %359 = icmp eq i32 %358, 87
  br i1 %359, label %360, label %429

360:                                              ; preds = %356
  %361 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %362 = load i8, ptr %361, align 1, !tbaa !18, !range !16, !noundef !17
  %363 = trunc i8 %362 to i1
  br i1 %363, label %377, label %364

364:                                              ; preds = %360
  %365 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %12, i64 noundef 0) #4
  %366 = load i32, ptr %365, align 4, !tbaa !12
  %367 = icmp sle i32 %366, 15
  br i1 %367, label %368, label %377

368:                                              ; preds = %364
  %369 = load i8, ptr %7, align 1, !tbaa !14, !range !16, !noundef !17
  %370 = trunc i8 %369 to i1
  br i1 %370, label %377, label %371

371:                                              ; preds = %368
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %38, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %39, ptr align 4 %12, i64 8, i1 false), !tbaa.struct !34
  %372 = getelementptr inbounds %"struct.std::array.1", ptr %38, i32 0, i32 0
  %373 = load i64, ptr %372, align 4
  %374 = getelementptr inbounds %"struct.std::array.1", ptr %39, i32 0, i32 0
  %375 = load i64, ptr %374, align 4
  %376 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %373, i64 %375)
  br label %377

377:                                              ; preds = %371, %368, %364, %360
  %378 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %379 = load i8, ptr %378, align 1, !tbaa !18, !range !16, !noundef !17
  %380 = trunc i8 %379 to i1
  br i1 %380, label %394, label %381

381:                                              ; preds = %377
  %382 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %11, i64 noundef 1) #4
  %383 = load i32, ptr %382, align 4, !tbaa !12
  %384 = icmp sge i32 %383, 0
  br i1 %384, label %385, label %394

385:                                              ; preds = %381
  %386 = load i8, ptr %9, align 1, !tbaa !14, !range !16, !noundef !17
  %387 = trunc i8 %386 to i1
  br i1 %387, label %394, label %388

388:                                              ; preds = %385
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %40, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %41, ptr align 4 %11, i64 8, i1 false), !tbaa.struct !34
  %389 = getelementptr inbounds %"struct.std::array.1", ptr %40, i32 0, i32 0
  %390 = load i64, ptr %389, align 4
  %391 = getelementptr inbounds %"struct.std::array.1", ptr %41, i32 0, i32 0
  %392 = load i64, ptr %391, align 4
  %393 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %390, i64 %392)
  br label %394

394:                                              ; preds = %388, %385, %381, %377
  %395 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %396 = load i8, ptr %395, align 1, !tbaa !18, !range !16, !noundef !17
  %397 = trunc i8 %396 to i1
  br i1 %397, label %411, label %398

398:                                              ; preds = %394
  %399 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %10, i64 noundef 0) #4
  %400 = load i32, ptr %399, align 4, !tbaa !12
  %401 = icmp sge i32 %400, 0
  br i1 %401, label %402, label %411

402:                                              ; preds = %398
  %403 = load i8, ptr %6, align 1, !tbaa !14, !range !16, !noundef !17
  %404 = trunc i8 %403 to i1
  br i1 %404, label %411, label %405

405:                                              ; preds = %402
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %42, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %43, ptr align 4 %10, i64 8, i1 false), !tbaa.struct !34
  %406 = getelementptr inbounds %"struct.std::array.1", ptr %42, i32 0, i32 0
  %407 = load i64, ptr %406, align 4
  %408 = getelementptr inbounds %"struct.std::array.1", ptr %43, i32 0, i32 0
  %409 = load i64, ptr %408, align 4
  %410 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %407, i64 %409)
  br label %411

411:                                              ; preds = %405, %402, %398, %394
  %412 = getelementptr inbounds %"class.fp::Algorithm", ptr %47, i32 0, i32 1
  %413 = load i8, ptr %412, align 1, !tbaa !18, !range !16, !noundef !17
  %414 = trunc i8 %413 to i1
  br i1 %414, label %428, label %415

415:                                              ; preds = %411
  %416 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %13, i64 noundef 1) #4
  %417 = load i32, ptr %416, align 4, !tbaa !12
  %418 = icmp sle i32 %417, 15
  br i1 %418, label %419, label %428

419:                                              ; preds = %415
  %420 = load i8, ptr %8, align 1, !tbaa !14, !range !16, !noundef !17
  %421 = trunc i8 %420 to i1
  br i1 %421, label %428, label %422

422:                                              ; preds = %419
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %44, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !34
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %45, ptr align 4 %13, i64 8, i1 false), !tbaa.struct !34
  %423 = getelementptr inbounds %"struct.std::array.1", ptr %44, i32 0, i32 0
  %424 = load i64, ptr %423, align 4
  %425 = getelementptr inbounds %"struct.std::array.1", ptr %45, i32 0, i32 0
  %426 = load i64, ptr %425, align 4
  %427 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %47, i64 %424, i64 %426)
  br label %428

428:                                              ; preds = %422, %419, %415, %411
  br label %429

429:                                              ; preds = %428, %356, %352
  br label %430

430:                                              ; preds = %429, %351
  br label %431

431:                                              ; preds = %430, %278
  br label %432

432:                                              ; preds = %431, %205
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #4
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt19__shared_ptr_accessIN2fp14LandBasedRobotELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(16) ptr @_ZNSt5arrayIS_IbLm16EELm16EEixEm(ptr noundef nonnull align 1 dereferenceable(256), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt5arrayIbLm16EEixEm(ptr noundef nonnull align 1 dereferenceable(16), i64 noundef) #2 align 2

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #3

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"vtable pointer", !8, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"bool", !7, i64 0}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = !{!19, !15, i64 1}
!19 = !{!"_ZTSN2fp9AlgorithmE", !15, i64 0, !15, i64 1, !15, i64 2, !20, i64 3, !7, i64 1027, !22, i64 1028, !22, i64 1036, !23, i64 1048, !30, i64 1128, !23, i64 1144, !33, i64 1224, !33, i64 4296, !21, i64 7368, !21, i64 7624, !22, i64 7880, !22, i64 7888, !22, i64 7896, !22, i64 7904, !22, i64 7912}
!20 = !{!"_ZTSN2fp4MazeE", !21, i64 0, !21, i64 256, !21, i64 512, !21, i64 768}
!21 = !{!"_ZTSSt5arrayIS_IbLm16EELm16EE", !7, i64 0}
!22 = !{!"_ZTSSt5arrayIiLm2EE", !7, i64 0}
!23 = !{!"_ZTSSt5stackISt5arrayIiLm2EESt5dequeIS1_SaIS1_EEE", !24, i64 0}
!24 = !{!"_ZTSSt5dequeISt5arrayIiLm2EESaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSSt11_Deque_baseISt5arrayIiLm2EESaIS1_EE", !26, i64 0}
!26 = !{!"_ZTSNSt11_Deque_baseISt5arrayIiLm2EESaIS1_EE11_Deque_implE", !27, i64 0}
!27 = !{!"_ZTSNSt11_Deque_baseISt5arrayIiLm2EESaIS1_EE16_Deque_impl_dataE", !6, i64 0, !28, i64 8, !29, i64 16, !29, i64 48}
!28 = !{!"long", !7, i64 0}
!29 = !{!"_ZTSSt15_Deque_iteratorISt5arrayIiLm2EERS1_PS1_E", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!30 = !{!"_ZTSSt10shared_ptrIN2fp14LandBasedRobotEE", !31, i64 0}
!31 = !{!"_ZTSSt12__shared_ptrIN2fp14LandBasedRobotELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !32, i64 8}
!32 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!33 = !{!"_ZTSSt5arrayIS_IN2fp4NodeELm16EELm16EE", !7, i64 0}
!34 = !{i64 0, i64 8, !11}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.std::array.1" = type { [2 x i32] }

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920), i64, i64) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN2fp9Algorithm14FindNeighboursESt5arrayIiLm2EE(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %1) local_unnamed_addr #0 align 2 {
  %3 = alloca %"struct.std::array.1", align 8
  %4 = alloca %"struct.std::array.1", align 8
  %5 = alloca %"struct.std::array.1", align 8
  %6 = alloca %"struct.std::array.1", align 8
  %7 = alloca %"struct.std::array.1", align 8
  store i64 %1, ptr %3, align 8
  %8 = getelementptr inbounds i8, ptr %0, i64 1128
  %9 = tail call noundef ptr @_ZNKSt19__shared_ptr_accessIN2fp14LandBasedRobotELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %8) #3
  %10 = load ptr, ptr %9, align 8, !tbaa !5
  %11 = load ptr, ptr %10, align 8
  %12 = tail call noundef signext i8 %11(ptr noundef nonnull align 8 dereferenceable(89) %9)
  %13 = getelementptr inbounds i8, ptr %0, i64 3
  %14 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #3
  %15 = load i32, ptr %14, align 4, !tbaa !8
  %16 = sext i32 %15 to i64
  %17 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZNSt5arrayIS_IbLm16EELm16EEixEm(ptr noundef nonnull align 1 dereferenceable(256) %13, i64 noundef %16) #3
  %18 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #3
  %19 = load i32, ptr %18, align 4, !tbaa !8
  %20 = sext i32 %19 to i64
  %21 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt5arrayIbLm16EEixEm(ptr noundef nonnull align 1 dereferenceable(16) %17, i64 noundef %20) #3
  %22 = load i8, ptr %21, align 1, !tbaa !11, !range !13, !noundef !14
  %23 = trunc nuw i8 %22 to i1
  %24 = getelementptr inbounds i8, ptr %0, i64 259
  %25 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #3
  %26 = load i32, ptr %25, align 4, !tbaa !8
  %27 = sext i32 %26 to i64
  %28 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZNSt5arrayIS_IbLm16EELm16EEixEm(ptr noundef nonnull align 1 dereferenceable(256) %24, i64 noundef %27) #3
  %29 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #3
  %30 = load i32, ptr %29, align 4, !tbaa !8
  %31 = sext i32 %30 to i64
  %32 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt5arrayIbLm16EEixEm(ptr noundef nonnull align 1 dereferenceable(16) %28, i64 noundef %31) #3
  %33 = load i8, ptr %32, align 1, !tbaa !11, !range !13, !noundef !14
  %34 = trunc nuw i8 %33 to i1
  %35 = getelementptr inbounds i8, ptr %0, i64 515
  %36 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #3
  %37 = load i32, ptr %36, align 4, !tbaa !8
  %38 = sext i32 %37 to i64
  %39 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZNSt5arrayIS_IbLm16EELm16EEixEm(ptr noundef nonnull align 1 dereferenceable(256) %35, i64 noundef %38) #3
  %40 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #3
  %41 = load i32, ptr %40, align 4, !tbaa !8
  %42 = sext i32 %41 to i64
  %43 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt5arrayIbLm16EEixEm(ptr noundef nonnull align 1 dereferenceable(16) %39, i64 noundef %42) #3
  %44 = load i8, ptr %43, align 1, !tbaa !11, !range !13, !noundef !14
  %45 = trunc nuw i8 %44 to i1
  %46 = getelementptr inbounds i8, ptr %0, i64 771
  %47 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #3
  %48 = load i32, ptr %47, align 4, !tbaa !8
  %49 = sext i32 %48 to i64
  %50 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZNSt5arrayIS_IbLm16EELm16EEixEm(ptr noundef nonnull align 1 dereferenceable(256) %46, i64 noundef %49) #3
  %51 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #3
  %52 = load i32, ptr %51, align 4, !tbaa !8
  %53 = sext i32 %52 to i64
  %54 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt5arrayIbLm16EEixEm(ptr noundef nonnull align 1 dereferenceable(16) %50, i64 noundef %53) #3
  %55 = load i8, ptr %54, align 1, !tbaa !11, !range !13, !noundef !14
  %56 = trunc nuw i8 %55 to i1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #3
  %57 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #3
  %58 = load i32, ptr %57, align 4, !tbaa !8
  %59 = add nsw i32 %58, -1
  store i32 %59, ptr %4, align 8, !tbaa !8
  %60 = getelementptr inbounds i8, ptr %4, i64 4
  %61 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #3
  %62 = load i32, ptr %61, align 4, !tbaa !8
  store i32 %62, ptr %60, align 4, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #3
  %63 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #3
  %64 = load i32, ptr %63, align 4, !tbaa !8
  store i32 %64, ptr %5, align 8, !tbaa !8
  %65 = getelementptr inbounds i8, ptr %5, i64 4
  %66 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #3
  %67 = load i32, ptr %66, align 4, !tbaa !8
  %68 = add nsw i32 %67, -1
  store i32 %68, ptr %65, align 4, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #3
  %69 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #3
  %70 = load i32, ptr %69, align 4, !tbaa !8
  %71 = add nsw i32 %70, 1
  store i32 %71, ptr %6, align 8, !tbaa !8
  %72 = getelementptr inbounds i8, ptr %6, i64 4
  %73 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #3
  %74 = load i32, ptr %73, align 4, !tbaa !8
  store i32 %74, ptr %72, align 4, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #3
  %75 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 0) #3
  %76 = load i32, ptr %75, align 4, !tbaa !8
  store i32 %76, ptr %7, align 8, !tbaa !8
  %77 = getelementptr inbounds i8, ptr %7, i64 4
  %78 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %3, i64 noundef 1) #3
  %79 = load i32, ptr %78, align 4, !tbaa !8
  %80 = add nsw i32 %79, 1
  store i32 %80, ptr %77, align 4, !tbaa !8
  %81 = getelementptr inbounds i8, ptr %0, i64 1
  %82 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %83 = trunc nuw i8 %82 to i1
  switch i8 %12, label %186 [
    i8 78, label %84
    i8 83, label %118
    i8 69, label %152
  ]

84:                                               ; preds = %2
  br i1 %83, label %91, label %85

85:                                               ; preds = %84
  %86 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %5, i64 noundef 1) #3
  %87 = load i32, ptr %86, align 4, !tbaa !8
  %88 = icmp slt i32 %87, 0
  %brmerge = select i1 %88, i1 true, i1 %56
  br i1 %brmerge, label %91, label %89

89:                                               ; preds = %85
  %.sroa.033.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.032.0.copyload = load i64, ptr %5, align 8, !tbaa !32
  %90 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.033.0.copyload, i64 %.sroa.032.0.copyload)
  br label %91

91:                                               ; preds = %85, %89, %84
  %92 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %93 = trunc nuw i8 %92 to i1
  br i1 %93, label %100, label %94

94:                                               ; preds = %91
  %95 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %4, i64 noundef 0) #3
  %96 = load i32, ptr %95, align 4, !tbaa !8
  %97 = icmp slt i32 %96, 0
  %brmerge55 = select i1 %97, i1 true, i1 %23
  br i1 %brmerge55, label %100, label %98

98:                                               ; preds = %94
  %.sroa.031.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.030.0.copyload = load i64, ptr %4, align 8, !tbaa !32
  %99 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.031.0.copyload, i64 %.sroa.030.0.copyload)
  br label %100

100:                                              ; preds = %94, %98, %91
  %101 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %102 = trunc nuw i8 %101 to i1
  br i1 %102, label %109, label %103

103:                                              ; preds = %100
  %104 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %7, i64 noundef 1) #3
  %105 = load i32, ptr %104, align 4, !tbaa !8
  %106 = icmp sgt i32 %105, 15
  %brmerge57 = select i1 %106, i1 true, i1 %45
  br i1 %brmerge57, label %109, label %107

107:                                              ; preds = %103
  %.sroa.029.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.028.0.copyload = load i64, ptr %7, align 8, !tbaa !32
  %108 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.029.0.copyload, i64 %.sroa.028.0.copyload)
  br label %109

109:                                              ; preds = %103, %107, %100
  %110 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %111 = trunc nuw i8 %110 to i1
  br i1 %111, label %221, label %112

112:                                              ; preds = %109
  %113 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %6, i64 noundef 0) #3
  %114 = load i32, ptr %113, align 4, !tbaa !8
  %115 = icmp sgt i32 %114, 15
  %brmerge59 = select i1 %115, i1 true, i1 %34
  br i1 %brmerge59, label %221, label %116

116:                                              ; preds = %112
  %.sroa.027.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.026.0.copyload = load i64, ptr %6, align 8, !tbaa !32
  %117 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.027.0.copyload, i64 %.sroa.026.0.copyload)
  br label %221

118:                                              ; preds = %2
  br i1 %83, label %125, label %119

119:                                              ; preds = %118
  %120 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %7, i64 noundef 1) #3
  %121 = load i32, ptr %120, align 4, !tbaa !8
  %122 = icmp sgt i32 %121, 15
  %brmerge61 = select i1 %122, i1 true, i1 %45
  br i1 %brmerge61, label %125, label %123

123:                                              ; preds = %119
  %.sroa.025.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.024.0.copyload = load i64, ptr %7, align 8, !tbaa !32
  %124 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.025.0.copyload, i64 %.sroa.024.0.copyload)
  br label %125

125:                                              ; preds = %119, %123, %118
  %126 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %127 = trunc nuw i8 %126 to i1
  br i1 %127, label %134, label %128

128:                                              ; preds = %125
  %129 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %6, i64 noundef 0) #3
  %130 = load i32, ptr %129, align 4, !tbaa !8
  %131 = icmp sgt i32 %130, 15
  %brmerge63 = select i1 %131, i1 true, i1 %34
  br i1 %brmerge63, label %134, label %132

132:                                              ; preds = %128
  %.sroa.023.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.022.0.copyload = load i64, ptr %6, align 8, !tbaa !32
  %133 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.023.0.copyload, i64 %.sroa.022.0.copyload)
  br label %134

134:                                              ; preds = %128, %132, %125
  %135 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %136 = trunc nuw i8 %135 to i1
  br i1 %136, label %143, label %137

137:                                              ; preds = %134
  %138 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %5, i64 noundef 1) #3
  %139 = load i32, ptr %138, align 4, !tbaa !8
  %140 = icmp slt i32 %139, 0
  %brmerge65 = select i1 %140, i1 true, i1 %56
  br i1 %brmerge65, label %143, label %141

141:                                              ; preds = %137
  %.sroa.021.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.020.0.copyload = load i64, ptr %5, align 8, !tbaa !32
  %142 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.021.0.copyload, i64 %.sroa.020.0.copyload)
  br label %143

143:                                              ; preds = %137, %141, %134
  %144 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %145 = trunc nuw i8 %144 to i1
  br i1 %145, label %221, label %146

146:                                              ; preds = %143
  %147 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %4, i64 noundef 0) #3
  %148 = load i32, ptr %147, align 4, !tbaa !8
  %149 = icmp slt i32 %148, 0
  %brmerge67 = select i1 %149, i1 true, i1 %23
  br i1 %brmerge67, label %221, label %150

150:                                              ; preds = %146
  %.sroa.019.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.018.0.copyload = load i64, ptr %4, align 8, !tbaa !32
  %151 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.019.0.copyload, i64 %.sroa.018.0.copyload)
  br label %221

152:                                              ; preds = %2
  br i1 %83, label %159, label %153

153:                                              ; preds = %152
  %154 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %4, i64 noundef 0) #3
  %155 = load i32, ptr %154, align 4, !tbaa !8
  %156 = icmp slt i32 %155, 0
  %brmerge69 = select i1 %156, i1 true, i1 %23
  br i1 %brmerge69, label %159, label %157

157:                                              ; preds = %153
  %.sroa.017.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.016.0.copyload = load i64, ptr %4, align 8, !tbaa !32
  %158 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.017.0.copyload, i64 %.sroa.016.0.copyload)
  br label %159

159:                                              ; preds = %153, %157, %152
  %160 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %161 = trunc nuw i8 %160 to i1
  br i1 %161, label %168, label %162

162:                                              ; preds = %159
  %163 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %7, i64 noundef 1) #3
  %164 = load i32, ptr %163, align 4, !tbaa !8
  %165 = icmp sgt i32 %164, 15
  %brmerge71 = select i1 %165, i1 true, i1 %45
  br i1 %brmerge71, label %168, label %166

166:                                              ; preds = %162
  %.sroa.015.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.014.0.copyload = load i64, ptr %7, align 8, !tbaa !32
  %167 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.015.0.copyload, i64 %.sroa.014.0.copyload)
  br label %168

168:                                              ; preds = %162, %166, %159
  %169 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %170 = trunc nuw i8 %169 to i1
  br i1 %170, label %177, label %171

171:                                              ; preds = %168
  %172 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %6, i64 noundef 0) #3
  %173 = load i32, ptr %172, align 4, !tbaa !8
  %174 = icmp sgt i32 %173, 15
  %brmerge73 = select i1 %174, i1 true, i1 %34
  br i1 %brmerge73, label %177, label %175

175:                                              ; preds = %171
  %.sroa.013.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.012.0.copyload = load i64, ptr %6, align 8, !tbaa !32
  %176 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.013.0.copyload, i64 %.sroa.012.0.copyload)
  br label %177

177:                                              ; preds = %171, %175, %168
  %178 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %179 = trunc nuw i8 %178 to i1
  br i1 %179, label %221, label %180

180:                                              ; preds = %177
  %181 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %5, i64 noundef 1) #3
  %182 = load i32, ptr %181, align 4, !tbaa !8
  %183 = icmp slt i32 %182, 0
  %brmerge75 = select i1 %183, i1 true, i1 %56
  br i1 %brmerge75, label %221, label %184

184:                                              ; preds = %180
  %.sroa.011.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.010.0.copyload = load i64, ptr %5, align 8, !tbaa !32
  %185 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.011.0.copyload, i64 %.sroa.010.0.copyload)
  br label %221

186:                                              ; preds = %2
  %187 = icmp ne i8 %12, 87
  %or.cond.not = or i1 %187, %83
  br i1 %or.cond.not, label %221, label %188

188:                                              ; preds = %186
  %189 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %6, i64 noundef 0) #3
  %190 = load i32, ptr %189, align 4, !tbaa !8
  %191 = icmp sgt i32 %190, 15
  %brmerge77 = select i1 %191, i1 true, i1 %34
  br i1 %brmerge77, label %194, label %192

192:                                              ; preds = %188
  %.sroa.09.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.08.0.copyload = load i64, ptr %6, align 8, !tbaa !32
  %193 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.09.0.copyload, i64 %.sroa.08.0.copyload)
  br label %194

194:                                              ; preds = %188, %192
  %195 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %196 = trunc nuw i8 %195 to i1
  br i1 %196, label %203, label %197

197:                                              ; preds = %194
  %198 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %5, i64 noundef 1) #3
  %199 = load i32, ptr %198, align 4, !tbaa !8
  %200 = icmp slt i32 %199, 0
  %brmerge79 = select i1 %200, i1 true, i1 %56
  br i1 %brmerge79, label %203, label %201

201:                                              ; preds = %197
  %.sroa.07.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.06.0.copyload = load i64, ptr %5, align 8, !tbaa !32
  %202 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.07.0.copyload, i64 %.sroa.06.0.copyload)
  br label %203

203:                                              ; preds = %197, %201, %194
  %204 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %205 = trunc nuw i8 %204 to i1
  br i1 %205, label %212, label %206

206:                                              ; preds = %203
  %207 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %4, i64 noundef 0) #3
  %208 = load i32, ptr %207, align 4, !tbaa !8
  %209 = icmp slt i32 %208, 0
  %brmerge81 = select i1 %209, i1 true, i1 %23
  br i1 %brmerge81, label %212, label %210

210:                                              ; preds = %206
  %.sroa.05.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.04.0.copyload = load i64, ptr %4, align 8, !tbaa !32
  %211 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.05.0.copyload, i64 %.sroa.04.0.copyload)
  br label %212

212:                                              ; preds = %206, %210, %203
  %213 = load i8, ptr %81, align 1, !tbaa !15, !range !13, !noundef !14
  %214 = trunc nuw i8 %213 to i1
  br i1 %214, label %221, label %215

215:                                              ; preds = %212
  %216 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5arrayIiLm2EEixEm(ptr noundef nonnull align 4 dereferenceable(8) %7, i64 noundef 1) #3
  %217 = load i32, ptr %216, align 4, !tbaa !8
  %218 = icmp sgt i32 %217, 15
  %brmerge83 = select i1 %218, i1 true, i1 %45
  br i1 %brmerge83, label %221, label %219

219:                                              ; preds = %215
  %.sroa.03.0.copyload = load i64, ptr %3, align 8, !tbaa !32
  %.sroa.0.0.copyload = load i64, ptr %7, align 8, !tbaa !32
  %220 = call noundef zeroext i1 @_ZN2fp9Algorithm12AddNeighbourESt5arrayIiLm2EES2_(ptr noundef nonnull align 8 dereferenceable(7920) %0, i64 %.sroa.03.0.copyload, i64 %.sroa.0.0.copyload)
  br label %221

221:                                              ; preds = %215, %180, %146, %112, %150, %143, %186, %219, %212, %177, %184, %109, %116
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #3
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt19__shared_ptr_accessIN2fp14LandBasedRobotELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(16) ptr @_ZNSt5arrayIS_IbLm16EELm16EEixEm(ptr noundef nonnull align 1 dereferenceable(256), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt5arrayIbLm16EEixEm(ptr noundef nonnull align 1 dereferenceable(16), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #2

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !10, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{!16, !12, i64 1}
!16 = !{!"_ZTSN2fp9AlgorithmE", !12, i64 0, !12, i64 1, !12, i64 2, !17, i64 3, !10, i64 1027, !19, i64 1028, !19, i64 1036, !20, i64 1048, !28, i64 1128, !20, i64 1144, !31, i64 1224, !31, i64 4296, !18, i64 7368, !18, i64 7624, !19, i64 7880, !19, i64 7888, !19, i64 7896, !19, i64 7904, !19, i64 7912}
!17 = !{!"_ZTSN2fp4MazeE", !18, i64 0, !18, i64 256, !18, i64 512, !18, i64 768}
!18 = !{!"_ZTSSt5arrayIS_IbLm16EELm16EE", !10, i64 0}
!19 = !{!"_ZTSSt5arrayIiLm2EE", !10, i64 0}
!20 = !{!"_ZTSSt5stackISt5arrayIiLm2EESt5dequeIS1_SaIS1_EEE", !21, i64 0}
!21 = !{!"_ZTSSt5dequeISt5arrayIiLm2EESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSSt11_Deque_baseISt5arrayIiLm2EESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSNSt11_Deque_baseISt5arrayIiLm2EESaIS1_EE11_Deque_implE", !24, i64 0}
!24 = !{!"_ZTSNSt11_Deque_baseISt5arrayIiLm2EESaIS1_EE16_Deque_impl_dataE", !25, i64 0, !26, i64 8, !27, i64 16, !27, i64 48}
!25 = !{!"any pointer", !10, i64 0}
!26 = !{!"long", !10, i64 0}
!27 = !{!"_ZTSSt15_Deque_iteratorISt5arrayIiLm2EERS1_PS1_E", !25, i64 0, !25, i64 8, !25, i64 16, !25, i64 24}
!28 = !{!"_ZTSSt10shared_ptrIN2fp14LandBasedRobotEE", !29, i64 0}
!29 = !{!"_ZTSSt12__shared_ptrIN2fp14LandBasedRobotELN9__gnu_cxx12_Lock_policyE2EE", !25, i64 0, !30, i64 8}
!30 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !25, i64 0}
!31 = !{!"_ZTSSt5arrayIS_IN2fp4NodeELm16EELm16EE", !10, i64 0}
!32 = !{!10, !10, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,SROAPass,SimplifyCFGPass,TailCallElimPass