; LLVM IR from niessner/Matterport :: code/gaps/pkgs/R3Shapes/R3Grid.ll (ZN6R3Grid21RasterizeGridTriangleEPKiS1_S1_di)

; 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"

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6R3Grid17RasterizeGridSpanEPKiS1_di(ptr noundef nonnull align 8 dereferenceable(592), ptr noundef, ptr noundef, double noundef, i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6R3Grid21RasterizeGridTriangleEPKiS1_S1_di(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, double noundef %4, i32 noundef %5) #1 align 2 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca double, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca [3 x i32], align 4
  %16 = alloca [3 x i32], align 4
  %17 = alloca [3 x i32], align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca [3 x i32], align 4
  %27 = alloca [3 x i32], align 4
  %28 = alloca [3 x i32], align 4
  %29 = alloca [3 x i32], align 4
  %30 = alloca [3 x i32], align 4
  %31 = alloca [3 x i32], align 4
  %32 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store double %4, ptr %11, align 8, !tbaa !9
  store i32 %5, ptr %12, align 4, !tbaa !11
  %33 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr %16) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr %17) #2
  store i32 0, ptr %13, align 4, !tbaa !11
  br label %34

34:                                               ; preds = %141, %6
  %35 = load i32, ptr %13, align 4, !tbaa !11
  %36 = icmp slt i32 %35, 3
  br i1 %36, label %37, label %144

37:                                               ; preds = %34
  %38 = load ptr, ptr %8, align 8, !tbaa !5
  %39 = load i32, ptr %13, align 4, !tbaa !11
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds i32, ptr %38, i64 %40
  %42 = load i32, ptr %41, align 4, !tbaa !11
  %43 = load i32, ptr %13, align 4, !tbaa !11
  %44 = sext i32 %43 to i64
  %45 = getelementptr inbounds [3 x i32], ptr %15, i64 0, i64 %44
  store i32 %42, ptr %45, align 4, !tbaa !11
  %46 = load i32, ptr %13, align 4, !tbaa !11
  %47 = sext i32 %46 to i64
  %48 = getelementptr inbounds [3 x i32], ptr %16, i64 0, i64 %47
  store i32 %42, ptr %48, align 4, !tbaa !11
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = load i32, ptr %13, align 4, !tbaa !11
  %51 = sext i32 %50 to i64
  %52 = getelementptr inbounds i32, ptr %49, i64 %51
  %53 = load i32, ptr %52, align 4, !tbaa !11
  %54 = load i32, ptr %13, align 4, !tbaa !11
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds [3 x i32], ptr %15, i64 0, i64 %55
  %57 = load i32, ptr %56, align 4, !tbaa !11
  %58 = icmp slt i32 %53, %57
  br i1 %58, label %59, label %68

59:                                               ; preds = %37
  %60 = load ptr, ptr %9, align 8, !tbaa !5
  %61 = load i32, ptr %13, align 4, !tbaa !11
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds i32, ptr %60, i64 %62
  %64 = load i32, ptr %63, align 4, !tbaa !11
  %65 = load i32, ptr %13, align 4, !tbaa !11
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds [3 x i32], ptr %15, i64 0, i64 %66
  store i32 %64, ptr %67, align 4, !tbaa !11
  br label %68

68:                                               ; preds = %59, %37
  %69 = load ptr, ptr %10, align 8, !tbaa !5
  %70 = load i32, ptr %13, align 4, !tbaa !11
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds i32, ptr %69, i64 %71
  %73 = load i32, ptr %72, align 4, !tbaa !11
  %74 = load i32, ptr %13, align 4, !tbaa !11
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds [3 x i32], ptr %15, i64 0, i64 %75
  %77 = load i32, ptr %76, align 4, !tbaa !11
  %78 = icmp slt i32 %73, %77
  br i1 %78, label %79, label %88

79:                                               ; preds = %68
  %80 = load ptr, ptr %10, align 8, !tbaa !5
  %81 = load i32, ptr %13, align 4, !tbaa !11
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds i32, ptr %80, i64 %82
  %84 = load i32, ptr %83, align 4, !tbaa !11
  %85 = load i32, ptr %13, align 4, !tbaa !11
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds [3 x i32], ptr %15, i64 0, i64 %86
  store i32 %84, ptr %87, align 4, !tbaa !11
  br label %88

88:                                               ; preds = %79, %68
  %89 = load ptr, ptr %9, align 8, !tbaa !5
  %90 = load i32, ptr %13, align 4, !tbaa !11
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds i32, ptr %89, i64 %91
  %93 = load i32, ptr %92, align 4, !tbaa !11
  %94 = load i32, ptr %13, align 4, !tbaa !11
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds [3 x i32], ptr %16, i64 0, i64 %95
  %97 = load i32, ptr %96, align 4, !tbaa !11
  %98 = icmp sgt i32 %93, %97
  br i1 %98, label %99, label %108

99:                                               ; preds = %88
  %100 = load ptr, ptr %9, align 8, !tbaa !5
  %101 = load i32, ptr %13, align 4, !tbaa !11
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds i32, ptr %100, i64 %102
  %104 = load i32, ptr %103, align 4, !tbaa !11
  %105 = load i32, ptr %13, align 4, !tbaa !11
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds [3 x i32], ptr %16, i64 0, i64 %106
  store i32 %104, ptr %107, align 4, !tbaa !11
  br label %108

108:                                              ; preds = %99, %88
  %109 = load ptr, ptr %10, align 8, !tbaa !5
  %110 = load i32, ptr %13, align 4, !tbaa !11
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds i32, ptr %109, i64 %111
  %113 = load i32, ptr %112, align 4, !tbaa !11
  %114 = load i32, ptr %13, align 4, !tbaa !11
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds [3 x i32], ptr %16, i64 0, i64 %115
  %117 = load i32, ptr %116, align 4, !tbaa !11
  %118 = icmp sgt i32 %113, %117
  br i1 %118, label %119, label %128

119:                                              ; preds = %108
  %120 = load ptr, ptr %10, align 8, !tbaa !5
  %121 = load i32, ptr %13, align 4, !tbaa !11
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds i32, ptr %120, i64 %122
  %124 = load i32, ptr %123, align 4, !tbaa !11
  %125 = load i32, ptr %13, align 4, !tbaa !11
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds [3 x i32], ptr %16, i64 0, i64 %126
  store i32 %124, ptr %127, align 4, !tbaa !11
  br label %128

128:                                              ; preds = %119, %108
  %129 = load i32, ptr %13, align 4, !tbaa !11
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds [3 x i32], ptr %16, i64 0, i64 %130
  %132 = load i32, ptr %131, align 4, !tbaa !11
  %133 = load i32, ptr %13, align 4, !tbaa !11
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds [3 x i32], ptr %15, i64 0, i64 %134
  %136 = load i32, ptr %135, align 4, !tbaa !11
  %137 = sub nsw i32 %132, %136
  %138 = load i32, ptr %13, align 4, !tbaa !11
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds [3 x i32], ptr %17, i64 0, i64 %139
  store i32 %137, ptr %140, align 4, !tbaa !11
  br label %141

141:                                              ; preds = %128
  %142 = load i32, ptr %13, align 4, !tbaa !11
  %143 = add nsw i32 %142, 1
  store i32 %143, ptr %13, align 4, !tbaa !11
  br label %34, !llvm.loop !13

144:                                              ; preds = %34
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #2
  store i32 0, ptr %18, align 4, !tbaa !11
  %145 = getelementptr inbounds [3 x i32], ptr %17, i64 0, i64 1
  %146 = load i32, ptr %145, align 4, !tbaa !11
  %147 = getelementptr inbounds [3 x i32], ptr %17, i64 0, i64 0
  %148 = load i32, ptr %147, align 4, !tbaa !11
  %149 = icmp sgt i32 %146, %148
  br i1 %149, label %150, label %157

150:                                              ; preds = %144
  %151 = getelementptr inbounds [3 x i32], ptr %17, i64 0, i64 1
  %152 = load i32, ptr %151, align 4, !tbaa !11
  %153 = getelementptr inbounds [3 x i32], ptr %17, i64 0, i64 2
  %154 = load i32, ptr %153, align 4, !tbaa !11
  %155 = icmp sgt i32 %152, %154
  br i1 %155, label %156, label %157

156:                                              ; preds = %150
  store i32 1, ptr %18, align 4, !tbaa !11
  br label %165

157:                                              ; preds = %150, %144
  %158 = getelementptr inbounds [3 x i32], ptr %17, i64 0, i64 2
  %159 = load i32, ptr %158, align 4, !tbaa !11
  %160 = getelementptr inbounds [3 x i32], ptr %17, i64 0, i64 0
  %161 = load i32, ptr %160, align 4, !tbaa !11
  %162 = icmp sgt i32 %159, %161
  br i1 %162, label %163, label %164

163:                                              ; preds = %157
  store i32 2, ptr %18, align 4, !tbaa !11
  br label %164

164:                                              ; preds = %163, %157
  br label %165

165:                                              ; preds = %164, %156
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #2
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  %167 = load i32, ptr %18, align 4, !tbaa !11
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds i32, ptr %166, i64 %168
  %170 = load i32, ptr %169, align 4, !tbaa !11
  %171 = load ptr, ptr %9, align 8, !tbaa !5
  %172 = load i32, ptr %18, align 4, !tbaa !11
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds i32, ptr %171, i64 %173
  %175 = load i32, ptr %174, align 4, !tbaa !11
  %176 = icmp sge i32 %170, %175
  br i1 %176, label %177, label %209

177:                                              ; preds = %165
  %178 = load ptr, ptr %8, align 8, !tbaa !5
  %179 = load i32, ptr %18, align 4, !tbaa !11
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i32, ptr %178, i64 %180
  %182 = load i32, ptr %181, align 4, !tbaa !11
  %183 = load ptr, ptr %10, align 8, !tbaa !5
  %184 = load i32, ptr %18, align 4, !tbaa !11
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds i32, ptr %183, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !11
  %188 = icmp sge i32 %182, %187
  br i1 %188, label %189, label %209

189:                                              ; preds = %177
  %190 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %190, ptr %19, align 8, !tbaa !5
  %191 = load ptr, ptr %9, align 8, !tbaa !5
  %192 = load i32, ptr %18, align 4, !tbaa !11
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds i32, ptr %191, i64 %193
  %195 = load i32, ptr %194, align 4, !tbaa !11
  %196 = load ptr, ptr %10, align 8, !tbaa !5
  %197 = load i32, ptr %18, align 4, !tbaa !11
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i32, ptr %196, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !11
  %201 = icmp sge i32 %195, %200
  br i1 %201, label %202, label %205

202:                                              ; preds = %189
  %203 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %203, ptr %20, align 8, !tbaa !5
  %204 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %204, ptr %21, align 8, !tbaa !5
  br label %208

205:                                              ; preds = %189
  %206 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %206, ptr %20, align 8, !tbaa !5
  %207 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %207, ptr %21, align 8, !tbaa !5
  br label %208

208:                                              ; preds = %205, %202
  br label %274

209:                                              ; preds = %177, %165
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  %211 = load i32, ptr %18, align 4, !tbaa !11
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds i32, ptr %210, i64 %212
  %214 = load i32, ptr %213, align 4, !tbaa !11
  %215 = load ptr, ptr %8, align 8, !tbaa !5
  %216 = load i32, ptr %18, align 4, !tbaa !11
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds i32, ptr %215, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !11
  %220 = icmp sge i32 %214, %219
  br i1 %220, label %221, label %253

221:                                              ; preds = %209
  %222 = load ptr, ptr %9, align 8, !tbaa !5
  %223 = load i32, ptr %18, align 4, !tbaa !11
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds i32, ptr %222, i64 %224
  %226 = load i32, ptr %225, align 4, !tbaa !11
  %227 = load ptr, ptr %10, align 8, !tbaa !5
  %228 = load i32, ptr %18, align 4, !tbaa !11
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds i32, ptr %227, i64 %229
  %231 = load i32, ptr %230, align 4, !tbaa !11
  %232 = icmp sge i32 %226, %231
  br i1 %232, label %233, label %253

233:                                              ; preds = %221
  %234 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %234, ptr %19, align 8, !tbaa !5
  %235 = load ptr, ptr %8, align 8, !tbaa !5
  %236 = load i32, ptr %18, align 4, !tbaa !11
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds i32, ptr %235, i64 %237
  %239 = load i32, ptr %238, align 4, !tbaa !11
  %240 = load ptr, ptr %10, align 8, !tbaa !5
  %241 = load i32, ptr %18, align 4, !tbaa !11
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds i32, ptr %240, i64 %242
  %244 = load i32, ptr %243, align 4, !tbaa !11
  %245 = icmp sge i32 %239, %244
  br i1 %245, label %246, label %249

246:                                              ; preds = %233
  %247 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %247, ptr %20, align 8, !tbaa !5
  %248 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %248, ptr %21, align 8, !tbaa !5
  br label %252

249:                                              ; preds = %233
  %250 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %250, ptr %20, align 8, !tbaa !5
  %251 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %251, ptr %21, align 8, !tbaa !5
  br label %252

252:                                              ; preds = %249, %246
  br label %273

253:                                              ; preds = %221, %209
  %254 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %254, ptr %19, align 8, !tbaa !5
  %255 = load ptr, ptr %8, align 8, !tbaa !5
  %256 = load i32, ptr %18, align 4, !tbaa !11
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds i32, ptr %255, i64 %257
  %259 = load i32, ptr %258, align 4, !tbaa !11
  %260 = load ptr, ptr %9, align 8, !tbaa !5
  %261 = load i32, ptr %18, align 4, !tbaa !11
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds i32, ptr %260, i64 %262
  %264 = load i32, ptr %263, align 4, !tbaa !11
  %265 = icmp sge i32 %259, %264
  br i1 %265, label %266, label %269

266:                                              ; preds = %253
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %267, ptr %20, align 8, !tbaa !5
  %268 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %268, ptr %21, align 8, !tbaa !5
  br label %272

269:                                              ; preds = %253
  %270 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %270, ptr %20, align 8, !tbaa !5
  %271 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %271, ptr %21, align 8, !tbaa !5
  br label %272

272:                                              ; preds = %269, %266
  br label %273

273:                                              ; preds = %272, %252
  br label %274

274:                                              ; preds = %273, %208
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #2
  %275 = load ptr, ptr %19, align 8, !tbaa !5
  %276 = load i32, ptr %18, align 4, !tbaa !11
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds i32, ptr %275, i64 %277
  %279 = load i32, ptr %278, align 4, !tbaa !11
  %280 = load ptr, ptr %20, align 8, !tbaa !5
  %281 = load i32, ptr %18, align 4, !tbaa !11
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds i32, ptr %280, i64 %282
  %284 = load i32, ptr %283, align 4, !tbaa !11
  %285 = sub nsw i32 %279, %284
  store i32 %285, ptr %22, align 4, !tbaa !11
  %286 = load ptr, ptr %19, align 8, !tbaa !5
  %287 = load i32, ptr %18, align 4, !tbaa !11
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds i32, ptr %286, i64 %288
  %290 = load i32, ptr %289, align 4, !tbaa !11
  %291 = load ptr, ptr %20, align 8, !tbaa !5
  %292 = load i32, ptr %18, align 4, !tbaa !11
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i32, ptr %291, i64 %293
  %295 = load i32, ptr %294, align 4, !tbaa !11
  %296 = sub nsw i32 %290, %295
  store i32 %296, ptr %23, align 4, !tbaa !11
  %297 = load ptr, ptr %19, align 8, !tbaa !5
  %298 = load i32, ptr %18, align 4, !tbaa !11
  %299 = sext i32 %298 to i64
  %300 = getelementptr inbounds i32, ptr %297, i64 %299
  %301 = load i32, ptr %300, align 4, !tbaa !11
  %302 = load ptr, ptr %21, align 8, !tbaa !5
  %303 = load i32, ptr %18, align 4, !tbaa !11
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds i32, ptr %302, i64 %304
  %306 = load i32, ptr %305, align 4, !tbaa !11
  %307 = sub nsw i32 %301, %306
  store i32 %307, ptr %24, align 4, !tbaa !11
  %308 = load i32, ptr %23, align 4, !tbaa !11
  %309 = load i32, ptr %24, align 4, !tbaa !11
  %310 = mul nsw i32 %308, %309
  store i32 %310, ptr %25, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 12, ptr %26) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr %27) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr %28) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr %29) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr %30) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr %31) #2
  store i32 0, ptr %13, align 4, !tbaa !11
  br label %311

311:                                              ; preds = %371, %274
  %312 = load i32, ptr %13, align 4, !tbaa !11
  %313 = icmp slt i32 %312, 3
  br i1 %313, label %314, label %374

314:                                              ; preds = %311
  %315 = load ptr, ptr %19, align 8, !tbaa !5
  %316 = load i32, ptr %13, align 4, !tbaa !11
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds i32, ptr %315, i64 %317
  %319 = load i32, ptr %318, align 4, !tbaa !11
  %320 = load i32, ptr %13, align 4, !tbaa !11
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds [3 x i32], ptr %28, i64 0, i64 %321
  store i32 %319, ptr %322, align 4, !tbaa !11
  %323 = load ptr, ptr %19, align 8, !tbaa !5
  %324 = load i32, ptr %13, align 4, !tbaa !11
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds i32, ptr %323, i64 %325
  %327 = load i32, ptr %326, align 4, !tbaa !11
  %328 = load i32, ptr %13, align 4, !tbaa !11
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds [3 x i32], ptr %29, i64 0, i64 %329
  store i32 %327, ptr %330, align 4, !tbaa !11
  %331 = load i32, ptr %13, align 4, !tbaa !11
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %332
  store i32 0, ptr %333, align 4, !tbaa !11
  %334 = load i32, ptr %13, align 4, !tbaa !11
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %335
  store i32 0, ptr %336, align 4, !tbaa !11
  %337 = load ptr, ptr %19, align 8, !tbaa !5
  %338 = load i32, ptr %13, align 4, !tbaa !11
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds i32, ptr %337, i64 %339
  %341 = load i32, ptr %340, align 4, !tbaa !11
  %342 = sub nsw i32 0, %341
  %343 = load ptr, ptr %20, align 8, !tbaa !5
  %344 = load i32, ptr %13, align 4, !tbaa !11
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds i32, ptr %343, i64 %345
  %347 = load i32, ptr %346, align 4, !tbaa !11
  %348 = add nsw i32 %342, %347
  %349 = load i32, ptr %24, align 4, !tbaa !11
  %350 = mul nsw i32 %348, %349
  %351 = load i32, ptr %13, align 4, !tbaa !11
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds [3 x i32], ptr %26, i64 0, i64 %352
  store i32 %350, ptr %353, align 4, !tbaa !11
  %354 = load ptr, ptr %19, align 8, !tbaa !5
  %355 = load i32, ptr %13, align 4, !tbaa !11
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i32, ptr %354, i64 %356
  %358 = load i32, ptr %357, align 4, !tbaa !11
  %359 = sub nsw i32 0, %358
  %360 = load ptr, ptr %21, align 8, !tbaa !5
  %361 = load i32, ptr %13, align 4, !tbaa !11
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds i32, ptr %360, i64 %362
  %364 = load i32, ptr %363, align 4, !tbaa !11
  %365 = add nsw i32 %359, %364
  %366 = load i32, ptr %23, align 4, !tbaa !11
  %367 = mul nsw i32 %365, %366
  %368 = load i32, ptr %13, align 4, !tbaa !11
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds [3 x i32], ptr %27, i64 0, i64 %369
  store i32 %367, ptr %370, align 4, !tbaa !11
  br label %371

371:                                              ; preds = %314
  %372 = load i32, ptr %13, align 4, !tbaa !11
  %373 = add nsw i32 %372, 1
  store i32 %373, ptr %13, align 4, !tbaa !11
  br label %311, !llvm.loop !15

374:                                              ; preds = %311
  %375 = load i32, ptr %22, align 4, !tbaa !11
  %376 = icmp eq i32 %375, 0
  br i1 %376, label %377, label %402

377:                                              ; preds = %374
  store i32 0, ptr %13, align 4, !tbaa !11
  br label %378

378:                                              ; preds = %398, %377
  %379 = load i32, ptr %13, align 4, !tbaa !11
  %380 = icmp slt i32 %379, 3
  br i1 %380, label %381, label %401

381:                                              ; preds = %378
  %382 = load ptr, ptr %19, align 8, !tbaa !5
  %383 = load i32, ptr %13, align 4, !tbaa !11
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i32, ptr %382, i64 %384
  %386 = load i32, ptr %385, align 4, !tbaa !11
  %387 = load i32, ptr %13, align 4, !tbaa !11
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds [3 x i32], ptr %28, i64 0, i64 %388
  store i32 %386, ptr %389, align 4, !tbaa !11
  %390 = load ptr, ptr %20, align 8, !tbaa !5
  %391 = load i32, ptr %13, align 4, !tbaa !11
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds i32, ptr %390, i64 %392
  %394 = load i32, ptr %393, align 4, !tbaa !11
  %395 = load i32, ptr %13, align 4, !tbaa !11
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds [3 x i32], ptr %29, i64 0, i64 %396
  store i32 %394, ptr %397, align 4, !tbaa !11
  br label %398

398:                                              ; preds = %381
  %399 = load i32, ptr %13, align 4, !tbaa !11
  %400 = add nsw i32 %399, 1
  store i32 %400, ptr %13, align 4, !tbaa !11
  br label %378, !llvm.loop !16

401:                                              ; preds = %378
  br label %513

402:                                              ; preds = %374
  store i32 0, ptr %13, align 4, !tbaa !11
  br label %403

403:                                              ; preds = %509, %402
  %404 = load i32, ptr %13, align 4, !tbaa !11
  %405 = load i32, ptr %22, align 4, !tbaa !11
  %406 = icmp slt i32 %404, %405
  br i1 %406, label %407, label %512

407:                                              ; preds = %403
  %408 = getelementptr inbounds [3 x i32], ptr %28, i64 0, i64 0
  %409 = getelementptr inbounds [3 x i32], ptr %29, i64 0, i64 0
  %410 = load double, ptr %11, align 8, !tbaa !9
  call void @_ZN6R3Grid17RasterizeGridSpanEPKiS1_di(ptr noundef nonnull align 8 dereferenceable(592) %33, ptr noundef %408, ptr noundef %409, double noundef %410, i32 noundef 0)
  store i32 0, ptr %14, align 4, !tbaa !11
  br label %411

411:                                              ; preds = %505, %407
  %412 = load i32, ptr %14, align 4, !tbaa !11
  %413 = icmp slt i32 %412, 3
  br i1 %413, label %414, label %508

414:                                              ; preds = %411
  %415 = load i32, ptr %14, align 4, !tbaa !11
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds [3 x i32], ptr %26, i64 0, i64 %416
  %418 = load i32, ptr %417, align 4, !tbaa !11
  %419 = load i32, ptr %14, align 4, !tbaa !11
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %420
  %422 = load i32, ptr %421, align 4, !tbaa !11
  %423 = add nsw i32 %422, %418
  store i32 %423, ptr %421, align 4, !tbaa !11
  %424 = load i32, ptr %14, align 4, !tbaa !11
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds [3 x i32], ptr %27, i64 0, i64 %425
  %427 = load i32, ptr %426, align 4, !tbaa !11
  %428 = load i32, ptr %14, align 4, !tbaa !11
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %429
  %431 = load i32, ptr %430, align 4, !tbaa !11
  %432 = add nsw i32 %431, %427
  store i32 %432, ptr %430, align 4, !tbaa !11
  %433 = load i32, ptr %14, align 4, !tbaa !11
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %434
  %436 = load i32, ptr %435, align 4, !tbaa !11
  %437 = load i32, ptr %25, align 4, !tbaa !11
  %438 = sdiv i32 %436, %437
  %439 = load i32, ptr %14, align 4, !tbaa !11
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds [3 x i32], ptr %28, i64 0, i64 %440
  %442 = load i32, ptr %441, align 4, !tbaa !11
  %443 = add nsw i32 %442, %438
  store i32 %443, ptr %441, align 4, !tbaa !11
  %444 = load i32, ptr %14, align 4, !tbaa !11
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %445
  %447 = load i32, ptr %446, align 4, !tbaa !11
  %448 = icmp slt i32 %447, 0
  br i1 %448, label %449, label %461

449:                                              ; preds = %414
  %450 = load i32, ptr %14, align 4, !tbaa !11
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %451
  %453 = load i32, ptr %452, align 4, !tbaa !11
  %454 = sub nsw i32 0, %453
  %455 = load i32, ptr %25, align 4, !tbaa !11
  %456 = srem i32 %454, %455
  %457 = sub nsw i32 0, %456
  %458 = load i32, ptr %14, align 4, !tbaa !11
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %459
  store i32 %457, ptr %460, align 4, !tbaa !11
  br label %468

461:                                              ; preds = %414
  %462 = load i32, ptr %25, align 4, !tbaa !11
  %463 = load i32, ptr %14, align 4, !tbaa !11
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %464
  %466 = load i32, ptr %465, align 4, !tbaa !11
  %467 = srem i32 %466, %462
  store i32 %467, ptr %465, align 4, !tbaa !11
  br label %468

468:                                              ; preds = %461, %449
  %469 = load i32, ptr %14, align 4, !tbaa !11
  %470 = sext i32 %469 to i64
  %471 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %470
  %472 = load i32, ptr %471, align 4, !tbaa !11
  %473 = load i32, ptr %25, align 4, !tbaa !11
  %474 = sdiv i32 %472, %473
  %475 = load i32, ptr %14, align 4, !tbaa !11
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds [3 x i32], ptr %29, i64 0, i64 %476
  %478 = load i32, ptr %477, align 4, !tbaa !11
  %479 = add nsw i32 %478, %474
  store i32 %479, ptr %477, align 4, !tbaa !11
  %480 = load i32, ptr %14, align 4, !tbaa !11
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %481
  %483 = load i32, ptr %482, align 4, !tbaa !11
  %484 = icmp slt i32 %483, 0
  br i1 %484, label %485, label %497

485:                                              ; preds = %468
  %486 = load i32, ptr %14, align 4, !tbaa !11
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %487
  %489 = load i32, ptr %488, align 4, !tbaa !11
  %490 = sub nsw i32 0, %489
  %491 = load i32, ptr %25, align 4, !tbaa !11
  %492 = srem i32 %490, %491
  %493 = sub nsw i32 0, %492
  %494 = load i32, ptr %14, align 4, !tbaa !11
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %495
  store i32 %493, ptr %496, align 4, !tbaa !11
  br label %504

497:                                              ; preds = %468
  %498 = load i32, ptr %25, align 4, !tbaa !11
  %499 = load i32, ptr %14, align 4, !tbaa !11
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %500
  %502 = load i32, ptr %501, align 4, !tbaa !11
  %503 = srem i32 %502, %498
  store i32 %503, ptr %501, align 4, !tbaa !11
  br label %504

504:                                              ; preds = %497, %485
  br label %505

505:                                              ; preds = %504
  %506 = load i32, ptr %14, align 4, !tbaa !11
  %507 = add nsw i32 %506, 1
  store i32 %507, ptr %14, align 4, !tbaa !11
  br label %411, !llvm.loop !17

508:                                              ; preds = %411
  br label %509

509:                                              ; preds = %508
  %510 = load i32, ptr %13, align 4, !tbaa !11
  %511 = add nsw i32 %510, 1
  store i32 %511, ptr %13, align 4, !tbaa !11
  br label %403, !llvm.loop !18

512:                                              ; preds = %403
  br label %513

513:                                              ; preds = %512, %401
  %514 = load ptr, ptr %20, align 8, !tbaa !5
  %515 = load i32, ptr %18, align 4, !tbaa !11
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds i32, ptr %514, i64 %516
  %518 = load i32, ptr %517, align 4, !tbaa !11
  %519 = load ptr, ptr %21, align 8, !tbaa !5
  %520 = load i32, ptr %18, align 4, !tbaa !11
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds i32, ptr %519, i64 %521
  %523 = load i32, ptr %522, align 4, !tbaa !11
  %524 = sub nsw i32 %518, %523
  store i32 %524, ptr %22, align 4, !tbaa !11
  %525 = load i32, ptr %18, align 4, !tbaa !11
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds [3 x i32], ptr %28, i64 0, i64 %526
  %528 = load i32, ptr %527, align 4, !tbaa !11
  %529 = load ptr, ptr %21, align 8, !tbaa !5
  %530 = load i32, ptr %18, align 4, !tbaa !11
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds i32, ptr %529, i64 %531
  %533 = load i32, ptr %532, align 4, !tbaa !11
  %534 = sub nsw i32 %528, %533
  store i32 %534, ptr %23, align 4, !tbaa !11
  %535 = load i32, ptr %18, align 4, !tbaa !11
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds [3 x i32], ptr %29, i64 0, i64 %536
  %538 = load i32, ptr %537, align 4, !tbaa !11
  %539 = load ptr, ptr %21, align 8, !tbaa !5
  %540 = load i32, ptr %18, align 4, !tbaa !11
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds i32, ptr %539, i64 %541
  %543 = load i32, ptr %542, align 4, !tbaa !11
  %544 = sub nsw i32 %538, %543
  store i32 %544, ptr %24, align 4, !tbaa !11
  %545 = load i32, ptr %23, align 4, !tbaa !11
  %546 = load i32, ptr %24, align 4, !tbaa !11
  %547 = mul nsw i32 %545, %546
  store i32 %547, ptr %25, align 4, !tbaa !11
  %548 = load i32, ptr %22, align 4, !tbaa !11
  %549 = icmp eq i32 %548, 0
  br i1 %549, label %550, label %554

550:                                              ; preds = %513
  %551 = load ptr, ptr %20, align 8, !tbaa !5
  %552 = load ptr, ptr %21, align 8, !tbaa !5
  %553 = load double, ptr %11, align 8, !tbaa !9
  call void @_ZN6R3Grid17RasterizeGridSpanEPKiS1_di(ptr noundef nonnull align 8 dereferenceable(592) %33, ptr noundef %551, ptr noundef %552, double noundef %553, i32 noundef 0)
  store i32 1, ptr %32, align 4
  br label %711

554:                                              ; preds = %513
  store i32 0, ptr %13, align 4, !tbaa !11
  br label %555

555:                                              ; preds = %597, %554
  %556 = load i32, ptr %13, align 4, !tbaa !11
  %557 = icmp slt i32 %556, 3
  br i1 %557, label %558, label %600

558:                                              ; preds = %555
  %559 = load i32, ptr %13, align 4, !tbaa !11
  %560 = sext i32 %559 to i64
  %561 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %560
  store i32 0, ptr %561, align 4, !tbaa !11
  %562 = load i32, ptr %13, align 4, !tbaa !11
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %563
  store i32 0, ptr %564, align 4, !tbaa !11
  %565 = load i32, ptr %13, align 4, !tbaa !11
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds [3 x i32], ptr %28, i64 0, i64 %566
  %568 = load i32, ptr %567, align 4, !tbaa !11
  %569 = sub nsw i32 0, %568
  %570 = load ptr, ptr %21, align 8, !tbaa !5
  %571 = load i32, ptr %13, align 4, !tbaa !11
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds i32, ptr %570, i64 %572
  %574 = load i32, ptr %573, align 4, !tbaa !11
  %575 = add nsw i32 %569, %574
  %576 = load i32, ptr %24, align 4, !tbaa !11
  %577 = mul nsw i32 %575, %576
  %578 = load i32, ptr %13, align 4, !tbaa !11
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds [3 x i32], ptr %26, i64 0, i64 %579
  store i32 %577, ptr %580, align 4, !tbaa !11
  %581 = load i32, ptr %13, align 4, !tbaa !11
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds [3 x i32], ptr %29, i64 0, i64 %582
  %584 = load i32, ptr %583, align 4, !tbaa !11
  %585 = sub nsw i32 0, %584
  %586 = load ptr, ptr %21, align 8, !tbaa !5
  %587 = load i32, ptr %13, align 4, !tbaa !11
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds i32, ptr %586, i64 %588
  %590 = load i32, ptr %589, align 4, !tbaa !11
  %591 = add nsw i32 %585, %590
  %592 = load i32, ptr %23, align 4, !tbaa !11
  %593 = mul nsw i32 %591, %592
  %594 = load i32, ptr %13, align 4, !tbaa !11
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds [3 x i32], ptr %27, i64 0, i64 %595
  store i32 %593, ptr %596, align 4, !tbaa !11
  br label %597

597:                                              ; preds = %558
  %598 = load i32, ptr %13, align 4, !tbaa !11
  %599 = add nsw i32 %598, 1
  store i32 %599, ptr %13, align 4, !tbaa !11
  br label %555, !llvm.loop !19

600:                                              ; preds = %555
  store i32 0, ptr %13, align 4, !tbaa !11
  br label %601

601:                                              ; preds = %707, %600
  %602 = load i32, ptr %13, align 4, !tbaa !11
  %603 = load i32, ptr %22, align 4, !tbaa !11
  %604 = icmp sle i32 %602, %603
  br i1 %604, label %605, label %710

605:                                              ; preds = %601
  %606 = getelementptr inbounds [3 x i32], ptr %28, i64 0, i64 0
  %607 = getelementptr inbounds [3 x i32], ptr %29, i64 0, i64 0
  %608 = load double, ptr %11, align 8, !tbaa !9
  call void @_ZN6R3Grid17RasterizeGridSpanEPKiS1_di(ptr noundef nonnull align 8 dereferenceable(592) %33, ptr noundef %606, ptr noundef %607, double noundef %608, i32 noundef 0)
  store i32 0, ptr %14, align 4, !tbaa !11
  br label %609

609:                                              ; preds = %703, %605
  %610 = load i32, ptr %14, align 4, !tbaa !11
  %611 = icmp slt i32 %610, 3
  br i1 %611, label %612, label %706

612:                                              ; preds = %609
  %613 = load i32, ptr %14, align 4, !tbaa !11
  %614 = sext i32 %613 to i64
  %615 = getelementptr inbounds [3 x i32], ptr %26, i64 0, i64 %614
  %616 = load i32, ptr %615, align 4, !tbaa !11
  %617 = load i32, ptr %14, align 4, !tbaa !11
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %618
  %620 = load i32, ptr %619, align 4, !tbaa !11
  %621 = add nsw i32 %620, %616
  store i32 %621, ptr %619, align 4, !tbaa !11
  %622 = load i32, ptr %14, align 4, !tbaa !11
  %623 = sext i32 %622 to i64
  %624 = getelementptr inbounds [3 x i32], ptr %27, i64 0, i64 %623
  %625 = load i32, ptr %624, align 4, !tbaa !11
  %626 = load i32, ptr %14, align 4, !tbaa !11
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %627
  %629 = load i32, ptr %628, align 4, !tbaa !11
  %630 = add nsw i32 %629, %625
  store i32 %630, ptr %628, align 4, !tbaa !11
  %631 = load i32, ptr %14, align 4, !tbaa !11
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %632
  %634 = load i32, ptr %633, align 4, !tbaa !11
  %635 = load i32, ptr %25, align 4, !tbaa !11
  %636 = sdiv i32 %634, %635
  %637 = load i32, ptr %14, align 4, !tbaa !11
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds [3 x i32], ptr %28, i64 0, i64 %638
  %640 = load i32, ptr %639, align 4, !tbaa !11
  %641 = add nsw i32 %640, %636
  store i32 %641, ptr %639, align 4, !tbaa !11
  %642 = load i32, ptr %14, align 4, !tbaa !11
  %643 = sext i32 %642 to i64
  %644 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %643
  %645 = load i32, ptr %644, align 4, !tbaa !11
  %646 = icmp slt i32 %645, 0
  br i1 %646, label %647, label %659

647:                                              ; preds = %612
  %648 = load i32, ptr %14, align 4, !tbaa !11
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %649
  %651 = load i32, ptr %650, align 4, !tbaa !11
  %652 = sub nsw i32 0, %651
  %653 = load i32, ptr %25, align 4, !tbaa !11
  %654 = srem i32 %652, %653
  %655 = sub nsw i32 0, %654
  %656 = load i32, ptr %14, align 4, !tbaa !11
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %657
  store i32 %655, ptr %658, align 4, !tbaa !11
  br label %666

659:                                              ; preds = %612
  %660 = load i32, ptr %25, align 4, !tbaa !11
  %661 = load i32, ptr %14, align 4, !tbaa !11
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds [3 x i32], ptr %30, i64 0, i64 %662
  %664 = load i32, ptr %663, align 4, !tbaa !11
  %665 = srem i32 %664, %660
  store i32 %665, ptr %663, align 4, !tbaa !11
  br label %666

666:                                              ; preds = %659, %647
  %667 = load i32, ptr %14, align 4, !tbaa !11
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %668
  %670 = load i32, ptr %669, align 4, !tbaa !11
  %671 = load i32, ptr %25, align 4, !tbaa !11
  %672 = sdiv i32 %670, %671
  %673 = load i32, ptr %14, align 4, !tbaa !11
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds [3 x i32], ptr %29, i64 0, i64 %674
  %676 = load i32, ptr %675, align 4, !tbaa !11
  %677 = add nsw i32 %676, %672
  store i32 %677, ptr %675, align 4, !tbaa !11
  %678 = load i32, ptr %14, align 4, !tbaa !11
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %679
  %681 = load i32, ptr %680, align 4, !tbaa !11
  %682 = icmp slt i32 %681, 0
  br i1 %682, label %683, label %695

683:                                              ; preds = %666
  %684 = load i32, ptr %14, align 4, !tbaa !11
  %685 = sext i32 %684 to i64
  %686 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %685
  %687 = load i32, ptr %686, align 4, !tbaa !11
  %688 = sub nsw i32 0, %687
  %689 = load i32, ptr %25, align 4, !tbaa !11
  %690 = srem i32 %688, %689
  %691 = sub nsw i32 0, %690
  %692 = load i32, ptr %14, align 4, !tbaa !11
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %693
  store i32 %691, ptr %694, align 4, !tbaa !11
  br label %702

695:                                              ; preds = %666
  %696 = load i32, ptr %25, align 4, !tbaa !11
  %697 = load i32, ptr %14, align 4, !tbaa !11
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds [3 x i32], ptr %31, i64 0, i64 %698
  %700 = load i32, ptr %699, align 4, !tbaa !11
  %701 = srem i32 %700, %696
  store i32 %701, ptr %699, align 4, !tbaa !11
  br label %702

702:                                              ; preds = %695, %683
  br label %703

703:                                              ; preds = %702
  %704 = load i32, ptr %14, align 4, !tbaa !11
  %705 = add nsw i32 %704, 1
  store i32 %705, ptr %14, align 4, !tbaa !11
  br label %609, !llvm.loop !20

706:                                              ; preds = %609
  br label %707

707:                                              ; preds = %706
  %708 = load i32, ptr %13, align 4, !tbaa !11
  %709 = add nsw i32 %708, 1
  store i32 %709, ptr %13, align 4, !tbaa !11
  br label %601, !llvm.loop !21

710:                                              ; preds = %601
  store i32 0, ptr %32, align 4
  br label %711

711:                                              ; preds = %710, %550
  call void @llvm.lifetime.end.p0(i64 12, ptr %31) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr %30) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr %29) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr %28) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr %27) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr %26) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #2
  %712 = load i32, ptr %32, align 4
  switch i32 %712, label %714 [
    i32 0, label %713
    i32 1, label %713
  ]

713:                                              ; preds = %711, %711
  ret void

714:                                              ; preds = %711
  unreachable
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}


; 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"

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6R3Grid17RasterizeGridSpanEPKiS1_di(ptr noundef nonnull align 8 dereferenceable(592), ptr noundef, ptr noundef, double noundef, i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6R3Grid21RasterizeGridTriangleEPKiS1_S1_di(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, double noundef %4, i32 noundef %5) local_unnamed_addr #1 align 2 {
  %7 = alloca [3 x i32], align 4
  %8 = alloca [3 x i32], align 4
  %9 = load i32, ptr %1, align 4, !tbaa !5
  %10 = load i32, ptr %2, align 4, !tbaa !5
  %spec.store.select253 = tail call i32 @llvm.smin.i32(i32 %10, i32 %9)
  %11 = load i32, ptr %3, align 4, !tbaa !5
  %spec.store.select = tail call i32 @llvm.smin.i32(i32 %11, i32 %spec.store.select253)
  %spec.store.select252 = tail call i32 @llvm.smax.i32(i32 %10, i32 %9)
  %spec.store.select244 = tail call i32 @llvm.smax.i32(i32 %11, i32 %spec.store.select252)
  %12 = sub nsw i32 %spec.store.select244, %spec.store.select
  %13 = getelementptr inbounds i8, ptr %1, i64 4
  %14 = getelementptr inbounds i8, ptr %2, i64 4
  %15 = getelementptr inbounds i8, ptr %3, i64 4
  %16 = load <2 x i32>, ptr %13, align 4, !tbaa !5
  %17 = load <2 x i32>, ptr %14, align 4, !tbaa !5
  %18 = tail call <2 x i32> @llvm.smin.v2i32(<2 x i32> %17, <2 x i32> %16)
  %19 = load <2 x i32>, ptr %15, align 4, !tbaa !5
  %20 = tail call <2 x i32> @llvm.smin.v2i32(<2 x i32> %19, <2 x i32> %18)
  %21 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %17, <2 x i32> %16)
  %22 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %19, <2 x i32> %21)
  %23 = sub nsw <2 x i32> %22, %20
  %24 = extractelement <2 x i32> %23, i64 0
  %25 = icmp sgt i32 %24, %12
  %26 = extractelement <2 x i32> %23, i64 1
  %27 = icmp sgt i32 %24, %26
  %or.cond = select i1 %25, i1 %27, i1 false
  %28 = icmp sgt i32 %26, %12
  %spec.select = select i1 %28, i64 2, i64 0
  %.0209 = select i1 %or.cond, i64 1, i64 %spec.select
  %29 = getelementptr inbounds i32, ptr %1, i64 %.0209
  %30 = load i32, ptr %29, align 4, !tbaa !5
  %31 = getelementptr inbounds i32, ptr %2, i64 %.0209
  %32 = load i32, ptr %31, align 4, !tbaa !5
  %.not = icmp slt i32 %30, %32
  br i1 %.not, label %37, label %33

33:                                               ; preds = %6
  %34 = getelementptr inbounds i32, ptr %3, i64 %.0209
  %35 = load i32, ptr %34, align 4, !tbaa !5
  %.not234 = icmp slt i32 %30, %35
  br i1 %.not234, label %37, label %36

36:                                               ; preds = %33
  %.not239 = icmp slt i32 %32, %35
  %. = select i1 %.not239, ptr %3, ptr %2
  %.247 = select i1 %.not239, ptr %2, ptr %3
  br label %43

37:                                               ; preds = %33, %6
  %.not235 = icmp slt i32 %32, %30
  br i1 %.not235, label %42, label %38

38:                                               ; preds = %37
  %39 = getelementptr inbounds i32, ptr %3, i64 %.0209
  %40 = load i32, ptr %39, align 4, !tbaa !5
  %.not236 = icmp slt i32 %32, %40
  br i1 %.not236, label %42, label %41

41:                                               ; preds = %38
  %.not238 = icmp slt i32 %30, %40
  %.248 = select i1 %.not238, ptr %3, ptr %1
  %.249 = select i1 %.not238, ptr %1, ptr %3
  br label %43

42:                                               ; preds = %38, %37
  %.250 = select i1 %.not, ptr %2, ptr %1
  %.251 = select i1 %.not, ptr %1, ptr %2
  br label %43

43:                                               ; preds = %42, %41, %36
  %.0208 = phi ptr [ %1, %36 ], [ %2, %41 ], [ %3, %42 ]
  %.0207 = phi ptr [ %., %36 ], [ %.248, %41 ], [ %.250, %42 ]
  %.0 = phi ptr [ %.247, %36 ], [ %.249, %41 ], [ %.251, %42 ]
  %44 = getelementptr inbounds i32, ptr %.0208, i64 %.0209
  %45 = load i32, ptr %44, align 4, !tbaa !5
  %46 = getelementptr inbounds i32, ptr %.0207, i64 %.0209
  %47 = load i32, ptr %46, align 4, !tbaa !5
  %48 = sub i32 %45, %47
  %49 = getelementptr inbounds i32, ptr %.0, i64 %.0209
  %50 = load i32, ptr %49, align 4, !tbaa !5
  %51 = sub nsw i32 %45, %50
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %7) #4
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %8) #4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %7, ptr noundef nonnull align 4 dereferenceable(12) %.0208, i64 12, i1 false), !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %8, ptr noundef nonnull align 4 dereferenceable(12) %.0208, i64 12, i1 false), !tbaa !5
  %52 = load i32, ptr %.0208, align 4, !tbaa !5
  %53 = load i32, ptr %.0207, align 4, !tbaa !5
  %54 = sub i32 %53, %52
  %55 = mul nsw i32 %54, %51
  %56 = load i32, ptr %.0, align 4, !tbaa !5
  %57 = sub i32 %56, %52
  %58 = mul nsw i32 %57, %48
  %59 = getelementptr inbounds i8, ptr %.0208, i64 4
  %60 = load i32, ptr %59, align 4, !tbaa !5
  %61 = getelementptr inbounds i8, ptr %.0207, i64 4
  %62 = load i32, ptr %61, align 4, !tbaa !5
  %63 = sub i32 %62, %60
  %64 = mul nsw i32 %63, %51
  %65 = getelementptr inbounds i8, ptr %.0, i64 4
  %66 = load i32, ptr %65, align 4, !tbaa !5
  %67 = sub i32 %66, %60
  %68 = mul nsw i32 %67, %48
  %69 = getelementptr inbounds i8, ptr %.0208, i64 8
  %70 = load i32, ptr %69, align 4, !tbaa !5
  %71 = getelementptr inbounds i8, ptr %.0207, i64 8
  %72 = load i32, ptr %71, align 4, !tbaa !5
  %73 = sub i32 %72, %70
  %74 = mul nsw i32 %73, %51
  %75 = getelementptr inbounds i8, ptr %.0, i64 8
  %76 = load i32, ptr %75, align 4, !tbaa !5
  %77 = sub i32 %76, %70
  %78 = mul nsw i32 %77, %48
  %79 = mul nsw i32 %51, %48
  %80 = icmp eq i32 %45, %47
  br i1 %80, label %.preheader255.preheader, label %.preheader257

.preheader255.preheader:                          ; preds = %43
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %7, ptr noundef nonnull align 4 dereferenceable(12) %.0208, i64 12, i1 false), !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %8, ptr noundef nonnull align 4 dereferenceable(12) %.0207, i64 12, i1 false), !tbaa !5
  br label %.loopexit256

.preheader257:                                    ; preds = %43
  %81 = icmp sgt i32 %48, 0
  br i1 %81, label %.lr.ph.preheader, label %.loopexit256

.lr.ph.preheader:                                 ; preds = %.preheader257
  %82 = getelementptr inbounds i8, ptr %7, i64 4
  %83 = getelementptr inbounds i8, ptr %8, i64 4
  %84 = getelementptr inbounds i8, ptr %7, i64 8
  %85 = getelementptr inbounds i8, ptr %8, i64 8
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %.sroa.0287.0 = phi i32 [ 0, %.lr.ph.preheader ], [ %storemerge, %.lr.ph ]
  %.sroa.10289.0 = phi i32 [ 0, %.lr.ph.preheader ], [ %storemerge.1, %.lr.ph ]
  %.sroa.16291.0 = phi i32 [ 0, %.lr.ph.preheader ], [ %storemerge.2, %.lr.ph ]
  %.sroa.0.0 = phi i32 [ 0, %.lr.ph.preheader ], [ %storemerge240, %.lr.ph ]
  %.sroa.10.0 = phi i32 [ 0, %.lr.ph.preheader ], [ %storemerge240.1, %.lr.ph ]
  %.sroa.16.0 = phi i32 [ 0, %.lr.ph.preheader ], [ %storemerge240.2, %.lr.ph ]
  %.3262 = phi i32 [ 0, %.lr.ph.preheader ], [ %110, %.lr.ph ]
  call void @_ZN6R3Grid17RasterizeGridSpanEPKiS1_di(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull %7, ptr noundef nonnull %8, double noundef %4, i32 noundef 0)
  %86 = add nsw i32 %.sroa.0287.0, %55
  %87 = add nsw i32 %.sroa.0.0, %58
  %88 = sdiv i32 %86, %79
  %89 = load i32, ptr %7, align 4, !tbaa !5
  %90 = add nsw i32 %89, %88
  store i32 %90, ptr %7, align 4, !tbaa !5
  %storemerge = srem i32 %86, %79
  %91 = sdiv i32 %87, %79
  %92 = load i32, ptr %8, align 4, !tbaa !5
  %93 = add nsw i32 %92, %91
  store i32 %93, ptr %8, align 4, !tbaa !5
  %storemerge240 = srem i32 %87, %79
  %94 = add nsw i32 %.sroa.10289.0, %64
  %95 = add nsw i32 %.sroa.10.0, %68
  %96 = sdiv i32 %94, %79
  %97 = load i32, ptr %82, align 4, !tbaa !5
  %98 = add nsw i32 %97, %96
  store i32 %98, ptr %82, align 4, !tbaa !5
  %storemerge.1 = srem i32 %94, %79
  %99 = sdiv i32 %95, %79
  %100 = load i32, ptr %83, align 4, !tbaa !5
  %101 = add nsw i32 %100, %99
  store i32 %101, ptr %83, align 4, !tbaa !5
  %storemerge240.1 = srem i32 %95, %79
  %102 = add nsw i32 %.sroa.16291.0, %74
  %103 = add nsw i32 %.sroa.16.0, %78
  %104 = sdiv i32 %102, %79
  %105 = load i32, ptr %84, align 4, !tbaa !5
  %106 = add nsw i32 %105, %104
  store i32 %106, ptr %84, align 4, !tbaa !5
  %storemerge.2 = srem i32 %102, %79
  %107 = sdiv i32 %103, %79
  %108 = load i32, ptr %85, align 4, !tbaa !5
  %109 = add nsw i32 %108, %107
  store i32 %109, ptr %85, align 4, !tbaa !5
  %storemerge240.2 = srem i32 %103, %79
  %110 = add nuw nsw i32 %.3262, 1
  %exitcond.not = icmp eq i32 %110, %48
  br i1 %exitcond.not, label %.loopexit256.loopexit269, label %.lr.ph, !llvm.loop !9

.loopexit256.loopexit269:                         ; preds = %.lr.ph
  %.pre = load i32, ptr %46, align 4, !tbaa !5
  %.pre312 = load i32, ptr %49, align 4, !tbaa !5
  br label %.loopexit256

.loopexit256:                                     ; preds = %.loopexit256.loopexit269, %.preheader255.preheader, %.preheader257
  %111 = phi i32 [ %50, %.preheader255.preheader ], [ %.pre312, %.loopexit256.loopexit269 ], [ %50, %.preheader257 ]
  %112 = phi i32 [ %45, %.preheader255.preheader ], [ %.pre, %.loopexit256.loopexit269 ], [ %47, %.preheader257 ]
  %113 = getelementptr inbounds [3 x i32], ptr %7, i64 0, i64 %.0209
  %114 = load i32, ptr %113, align 4, !tbaa !5
  %115 = sub nsw i32 %114, %111
  %116 = getelementptr inbounds [3 x i32], ptr %8, i64 0, i64 %.0209
  %117 = load i32, ptr %116, align 4, !tbaa !5
  %118 = sub nsw i32 %117, %111
  %119 = mul nsw i32 %118, %115
  %120 = icmp eq i32 %112, %111
  br i1 %120, label %146, label %.preheader254.preheader

.preheader254.preheader:                          ; preds = %.loopexit256
  %121 = load i32, ptr %7, align 4, !tbaa !5
  %122 = load i32, ptr %.0, align 4, !tbaa !5
  %123 = sub i32 %122, %121
  %124 = mul nsw i32 %123, %118
  %125 = load i32, ptr %8, align 4, !tbaa !5
  %126 = sub i32 %122, %125
  %127 = mul nsw i32 %126, %115
  %128 = getelementptr inbounds i8, ptr %7, i64 4
  %129 = load i32, ptr %128, align 4, !tbaa !5
  %130 = load i32, ptr %65, align 4, !tbaa !5
  %131 = sub i32 %130, %129
  %132 = mul nsw i32 %131, %118
  %133 = getelementptr inbounds i8, ptr %8, i64 4
  %134 = load i32, ptr %133, align 4, !tbaa !5
  %135 = sub i32 %130, %134
  %136 = mul nsw i32 %135, %115
  %137 = getelementptr inbounds i8, ptr %7, i64 8
  %138 = load i32, ptr %137, align 4, !tbaa !5
  %139 = load i32, ptr %75, align 4, !tbaa !5
  %140 = sub i32 %139, %138
  %141 = mul nsw i32 %140, %118
  %142 = getelementptr inbounds i8, ptr %8, i64 8
  %143 = load i32, ptr %142, align 4, !tbaa !5
  %144 = sub i32 %139, %143
  %145 = mul nsw i32 %144, %115
  %.not241266 = icmp slt i32 %112, %111
  br i1 %.not241266, label %.loopexit, label %.lr.ph268.preheader

146:                                              ; preds = %.loopexit256
  call void @_ZN6R3Grid17RasterizeGridSpanEPKiS1_di(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull %.0207, ptr noundef nonnull %.0, double noundef %4, i32 noundef 0)
  br label %.loopexit

.lr.ph268.preheader:                              ; preds = %.preheader254.preheader
  %147 = add i32 %112, 1
  %148 = sub i32 %147, %111
  br label %.lr.ph268

.lr.ph268:                                        ; preds = %.lr.ph268.preheader, %.lr.ph268
  %.sroa.0287.2 = phi i32 [ 0, %.lr.ph268.preheader ], [ %storemerge242, %.lr.ph268 ]
  %.sroa.10289.2 = phi i32 [ 0, %.lr.ph268.preheader ], [ %storemerge242.1, %.lr.ph268 ]
  %.sroa.16291.2 = phi i32 [ 0, %.lr.ph268.preheader ], [ %storemerge242.2, %.lr.ph268 ]
  %.sroa.0.2 = phi i32 [ 0, %.lr.ph268.preheader ], [ %storemerge243, %.lr.ph268 ]
  %.sroa.10.2 = phi i32 [ 0, %.lr.ph268.preheader ], [ %storemerge243.1, %.lr.ph268 ]
  %.sroa.16.2 = phi i32 [ 0, %.lr.ph268.preheader ], [ %storemerge243.2, %.lr.ph268 ]
  %.5267 = phi i32 [ 0, %.lr.ph268.preheader ], [ %173, %.lr.ph268 ]
  call void @_ZN6R3Grid17RasterizeGridSpanEPKiS1_di(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull %7, ptr noundef nonnull %8, double noundef %4, i32 noundef 0)
  %149 = add nsw i32 %.sroa.0287.2, %124
  %150 = add nsw i32 %.sroa.0.2, %127
  %151 = sdiv i32 %149, %119
  %152 = load i32, ptr %7, align 4, !tbaa !5
  %153 = add nsw i32 %152, %151
  store i32 %153, ptr %7, align 4, !tbaa !5
  %storemerge242 = srem i32 %149, %119
  %154 = sdiv i32 %150, %119
  %155 = load i32, ptr %8, align 4, !tbaa !5
  %156 = add nsw i32 %155, %154
  store i32 %156, ptr %8, align 4, !tbaa !5
  %storemerge243 = srem i32 %150, %119
  %157 = add nsw i32 %.sroa.10289.2, %132
  %158 = add nsw i32 %.sroa.10.2, %136
  %159 = sdiv i32 %157, %119
  %160 = load i32, ptr %128, align 4, !tbaa !5
  %161 = add nsw i32 %160, %159
  store i32 %161, ptr %128, align 4, !tbaa !5
  %storemerge242.1 = srem i32 %157, %119
  %162 = sdiv i32 %158, %119
  %163 = load i32, ptr %133, align 4, !tbaa !5
  %164 = add nsw i32 %163, %162
  store i32 %164, ptr %133, align 4, !tbaa !5
  %storemerge243.1 = srem i32 %158, %119
  %165 = add nsw i32 %.sroa.16291.2, %141
  %166 = add nsw i32 %.sroa.16.2, %145
  %167 = sdiv i32 %165, %119
  %168 = load i32, ptr %137, align 4, !tbaa !5
  %169 = add nsw i32 %168, %167
  store i32 %169, ptr %137, align 4, !tbaa !5
  %storemerge242.2 = srem i32 %165, %119
  %170 = sdiv i32 %166, %119
  %171 = load i32, ptr %142, align 4, !tbaa !5
  %172 = add nsw i32 %171, %170
  store i32 %172, ptr %142, align 4, !tbaa !5
  %storemerge243.2 = srem i32 %166, %119
  %173 = add nuw i32 %.5267, 1
  %exitcond278.not = icmp eq i32 %173, %148
  br i1 %exitcond278.not, label %.loopexit, label %.lr.ph268, !llvm.loop !11

.loopexit:                                        ; preds = %.lr.ph268, %.preheader254.preheader, %146
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %7) #4
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #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) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x i32> @llvm.smax.v2i32(<2 x i32>, <2 x i32>) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x i32> @llvm.smin.v2i32(<2 x i32>, <2 x i32>) #2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nocallback nofree 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass