; LLVM IR from bondhugula/pluto :: examples/lbm/ldc/d2q9 (ldc_d2q9)

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

@omega = external dso_local global double, align 8

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

; Function Attrs: nounwind uwtable
define dso_local void @lbm_kernel(double noundef %0, double noundef %1, double noundef %2, double noundef %3, double noundef %4, double noundef %5, double noundef %6, double noundef %7, double noundef %8, ptr noalias noundef %9, ptr noalias noundef %10, ptr noalias noundef %11, ptr noalias noundef %12, ptr noalias noundef %13, ptr noalias noundef %14, ptr noalias noundef %15, ptr noalias noundef %16, ptr noalias noundef %17, i32 noundef %18, i32 noundef %19, i32 noundef %20) #1 {
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  %47 = alloca i32, align 4
  store double %0, ptr %22, align 8, !tbaa !5
  store double %1, ptr %23, align 8, !tbaa !5
  store double %2, ptr %24, align 8, !tbaa !5
  store double %3, ptr %25, align 8, !tbaa !5
  store double %4, ptr %26, align 8, !tbaa !5
  store double %5, ptr %27, align 8, !tbaa !5
  store double %6, ptr %28, align 8, !tbaa !5
  store double %7, ptr %29, align 8, !tbaa !5
  store double %8, ptr %30, align 8, !tbaa !5
  store ptr %9, ptr %31, align 8, !tbaa !9
  store ptr %10, ptr %32, align 8, !tbaa !9
  store ptr %11, ptr %33, align 8, !tbaa !9
  store ptr %12, ptr %34, align 8, !tbaa !9
  store ptr %13, ptr %35, align 8, !tbaa !9
  store ptr %14, ptr %36, align 8, !tbaa !9
  store ptr %15, ptr %37, align 8, !tbaa !9
  store ptr %16, ptr %38, align 8, !tbaa !9
  store ptr %17, ptr %39, align 8, !tbaa !9
  store i32 %18, ptr %40, align 4, !tbaa !11
  store i32 %19, ptr %41, align 4, !tbaa !11
  store i32 %20, ptr %42, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #3
  %48 = load i32, ptr %41, align 4, !tbaa !11
  %49 = icmp eq i32 %48, 2
  br i1 %49, label %53, label %50

50:                                               ; preds = %21
  %51 = load i32, ptr %41, align 4, !tbaa !11
  %52 = icmp eq i32 %51, 1027
  br i1 %52, label %53, label %59

53:                                               ; preds = %50, %21
  %54 = load i32, ptr %42, align 4, !tbaa !11
  %55 = icmp sgt i32 %54, 1
  br i1 %55, label %56, label %59

56:                                               ; preds = %53
  %57 = load i32, ptr %42, align 4, !tbaa !11
  %58 = icmp slt i32 %57, 1026
  br i1 %58, label %71, label %59

59:                                               ; preds = %56, %53, %50
  %60 = load i32, ptr %42, align 4, !tbaa !11
  %61 = icmp eq i32 %60, 1
  br i1 %61, label %65, label %62

62:                                               ; preds = %59
  %63 = load i32, ptr %42, align 4, !tbaa !11
  %64 = icmp eq i32 %63, 1026
  br i1 %64, label %65, label %90

65:                                               ; preds = %62, %59
  %66 = load i32, ptr %41, align 4, !tbaa !11
  %67 = icmp sgt i32 %66, 2
  br i1 %67, label %68, label %90

68:                                               ; preds = %65
  %69 = load i32, ptr %41, align 4, !tbaa !11
  %70 = icmp slt i32 %69, 1027
  br i1 %70, label %71, label %90

71:                                               ; preds = %68, %56
  %72 = load double, ptr %22, align 8, !tbaa !5
  %73 = load ptr, ptr %31, align 8, !tbaa !9
  store double %72, ptr %73, align 8, !tbaa !5
  %74 = load double, ptr %23, align 8, !tbaa !5
  %75 = load ptr, ptr %33, align 8, !tbaa !9
  store double %74, ptr %75, align 8, !tbaa !5
  %76 = load double, ptr %24, align 8, !tbaa !5
  %77 = load ptr, ptr %32, align 8, !tbaa !9
  store double %76, ptr %77, align 8, !tbaa !5
  %78 = load double, ptr %25, align 8, !tbaa !5
  %79 = load ptr, ptr %35, align 8, !tbaa !9
  store double %78, ptr %79, align 8, !tbaa !5
  %80 = load double, ptr %26, align 8, !tbaa !5
  %81 = load ptr, ptr %34, align 8, !tbaa !9
  store double %80, ptr %81, align 8, !tbaa !5
  %82 = load double, ptr %27, align 8, !tbaa !5
  %83 = load ptr, ptr %39, align 8, !tbaa !9
  store double %82, ptr %83, align 8, !tbaa !5
  %84 = load double, ptr %28, align 8, !tbaa !5
  %85 = load ptr, ptr %38, align 8, !tbaa !9
  store double %84, ptr %85, align 8, !tbaa !5
  %86 = load double, ptr %29, align 8, !tbaa !5
  %87 = load ptr, ptr %37, align 8, !tbaa !9
  store double %86, ptr %87, align 8, !tbaa !5
  %88 = load double, ptr %30, align 8, !tbaa !5
  %89 = load ptr, ptr %36, align 8, !tbaa !9
  store double %88, ptr %89, align 8, !tbaa !5
  store i32 1, ptr %47, align 4
  br label %339

90:                                               ; preds = %68, %65, %62
  %91 = load double, ptr %23, align 8, !tbaa !5
  %92 = load double, ptr %24, align 8, !tbaa !5
  %93 = fadd double %91, %92
  %94 = load double, ptr %25, align 8, !tbaa !5
  %95 = fadd double %93, %94
  %96 = load double, ptr %26, align 8, !tbaa !5
  %97 = fadd double %95, %96
  %98 = load double, ptr %27, align 8, !tbaa !5
  %99 = fadd double %97, %98
  %100 = load double, ptr %28, align 8, !tbaa !5
  %101 = fadd double %99, %100
  %102 = load double, ptr %29, align 8, !tbaa !5
  %103 = fadd double %101, %102
  %104 = load double, ptr %30, align 8, !tbaa !5
  %105 = fadd double %103, %104
  %106 = load double, ptr %22, align 8, !tbaa !5
  %107 = fadd double %105, %106
  store double %107, ptr %43, align 8, !tbaa !5
  %108 = load double, ptr %29, align 8, !tbaa !5
  %109 = load double, ptr %25, align 8, !tbaa !5
  %110 = fadd double %108, %109
  %111 = load double, ptr %27, align 8, !tbaa !5
  %112 = fadd double %110, %111
  %113 = load double, ptr %30, align 8, !tbaa !5
  %114 = load double, ptr %26, align 8, !tbaa !5
  %115 = fadd double %113, %114
  %116 = load double, ptr %28, align 8, !tbaa !5
  %117 = fadd double %115, %116
  %118 = fsub double %112, %117
  store double %118, ptr %44, align 8, !tbaa !5
  %119 = load double, ptr %44, align 8, !tbaa !5
  %120 = load double, ptr %43, align 8, !tbaa !5
  %121 = fdiv double %119, %120
  store double %121, ptr %44, align 8, !tbaa !5
  %122 = load double, ptr %28, align 8, !tbaa !5
  %123 = load double, ptr %23, align 8, !tbaa !5
  %124 = fadd double %122, %123
  %125 = load double, ptr %27, align 8, !tbaa !5
  %126 = fadd double %124, %125
  %127 = load double, ptr %30, align 8, !tbaa !5
  %128 = load double, ptr %24, align 8, !tbaa !5
  %129 = fadd double %127, %128
  %130 = load double, ptr %29, align 8, !tbaa !5
  %131 = fadd double %129, %130
  %132 = fsub double %126, %131
  store double %132, ptr %45, align 8, !tbaa !5
  %133 = load double, ptr %45, align 8, !tbaa !5
  %134 = load double, ptr %43, align 8, !tbaa !5
  %135 = fdiv double %133, %134
  store double %135, ptr %45, align 8, !tbaa !5
  %136 = load i32, ptr %41, align 4, !tbaa !11
  %137 = icmp eq i32 %136, 1026
  br i1 %137, label %138, label %145

138:                                              ; preds = %90
  %139 = load i32, ptr %42, align 4, !tbaa !11
  %140 = icmp sgt i32 %139, 1
  br i1 %140, label %141, label %145

141:                                              ; preds = %138
  %142 = load i32, ptr %42, align 4, !tbaa !11
  %143 = icmp slt i32 %142, 1026
  br i1 %143, label %144, label %145

144:                                              ; preds = %141
  store double 1.000000e-02, ptr %44, align 8, !tbaa !5
  store double 0.000000e+00, ptr %45, align 8, !tbaa !5
  br label %145

145:                                              ; preds = %144, %141, %138, %90
  %146 = load double, ptr %44, align 8, !tbaa !5
  %147 = load double, ptr %44, align 8, !tbaa !5
  %148 = load double, ptr %45, align 8, !tbaa !5
  %149 = load double, ptr %45, align 8, !tbaa !5
  %150 = fmul double %148, %149
  %151 = call double @llvm.fmuladd.f64(double %146, double %147, double %150)
  %152 = fmul double 1.500000e+00, %151
  store double %152, ptr %46, align 8, !tbaa !5
  %153 = load double, ptr @omega, align 8, !tbaa !5
  %154 = fsub double 1.000000e+00, %153
  %155 = load double, ptr %22, align 8, !tbaa !5
  %156 = load double, ptr @omega, align 8, !tbaa !5
  %157 = load double, ptr %43, align 8, !tbaa !5
  %158 = fmul double 0x3FDC71C71C71C71C, %157
  %159 = load double, ptr %46, align 8, !tbaa !5
  %160 = fsub double 1.000000e+00, %159
  %161 = fmul double %158, %160
  %162 = fmul double %156, %161
  %163 = call double @llvm.fmuladd.f64(double %154, double %155, double %162)
  %164 = load ptr, ptr %31, align 8, !tbaa !9
  store double %163, ptr %164, align 8, !tbaa !5
  %165 = load double, ptr @omega, align 8, !tbaa !5
  %166 = fsub double 1.000000e+00, %165
  %167 = load double, ptr %23, align 8, !tbaa !5
  %168 = load double, ptr @omega, align 8, !tbaa !5
  %169 = load double, ptr %43, align 8, !tbaa !5
  %170 = fmul double 0x3FBC71C71C71C71C, %169
  %171 = load double, ptr %45, align 8, !tbaa !5
  %172 = call double @llvm.fmuladd.f64(double 3.000000e+00, double %171, double 1.000000e+00)
  %173 = load double, ptr %45, align 8, !tbaa !5
  %174 = fmul double 4.500000e+00, %173
  %175 = load double, ptr %45, align 8, !tbaa !5
  %176 = call double @llvm.fmuladd.f64(double %174, double %175, double %172)
  %177 = load double, ptr %46, align 8, !tbaa !5
  %178 = fsub double %176, %177
  %179 = fmul double %170, %178
  %180 = fmul double %168, %179
  %181 = call double @llvm.fmuladd.f64(double %166, double %167, double %180)
  %182 = load ptr, ptr %32, align 8, !tbaa !9
  store double %181, ptr %182, align 8, !tbaa !5
  %183 = load double, ptr @omega, align 8, !tbaa !5
  %184 = fsub double 1.000000e+00, %183
  %185 = load double, ptr %24, align 8, !tbaa !5
  %186 = load double, ptr @omega, align 8, !tbaa !5
  %187 = load double, ptr %43, align 8, !tbaa !5
  %188 = fmul double 0x3FBC71C71C71C71C, %187
  %189 = load double, ptr %45, align 8, !tbaa !5
  %190 = call double @llvm.fmuladd.f64(double -3.000000e+00, double %189, double 1.000000e+00)
  %191 = load double, ptr %45, align 8, !tbaa !5
  %192 = fmul double 4.500000e+00, %191
  %193 = load double, ptr %45, align 8, !tbaa !5
  %194 = call double @llvm.fmuladd.f64(double %192, double %193, double %190)
  %195 = load double, ptr %46, align 8, !tbaa !5
  %196 = fsub double %194, %195
  %197 = fmul double %188, %196
  %198 = fmul double %186, %197
  %199 = call double @llvm.fmuladd.f64(double %184, double %185, double %198)
  %200 = load ptr, ptr %33, align 8, !tbaa !9
  store double %199, ptr %200, align 8, !tbaa !5
  %201 = load double, ptr @omega, align 8, !tbaa !5
  %202 = fsub double 1.000000e+00, %201
  %203 = load double, ptr %25, align 8, !tbaa !5
  %204 = load double, ptr @omega, align 8, !tbaa !5
  %205 = load double, ptr %43, align 8, !tbaa !5
  %206 = fmul double 0x3FBC71C71C71C71C, %205
  %207 = load double, ptr %44, align 8, !tbaa !5
  %208 = call double @llvm.fmuladd.f64(double 3.000000e+00, double %207, double 1.000000e+00)
  %209 = load double, ptr %44, align 8, !tbaa !5
  %210 = fmul double 4.500000e+00, %209
  %211 = load double, ptr %44, align 8, !tbaa !5
  %212 = call double @llvm.fmuladd.f64(double %210, double %211, double %208)
  %213 = load double, ptr %46, align 8, !tbaa !5
  %214 = fsub double %212, %213
  %215 = fmul double %206, %214
  %216 = fmul double %204, %215
  %217 = call double @llvm.fmuladd.f64(double %202, double %203, double %216)
  %218 = load ptr, ptr %34, align 8, !tbaa !9
  store double %217, ptr %218, align 8, !tbaa !5
  %219 = load double, ptr @omega, align 8, !tbaa !5
  %220 = fsub double 1.000000e+00, %219
  %221 = load double, ptr %26, align 8, !tbaa !5
  %222 = load double, ptr @omega, align 8, !tbaa !5
  %223 = load double, ptr %43, align 8, !tbaa !5
  %224 = fmul double 0x3FBC71C71C71C71C, %223
  %225 = load double, ptr %44, align 8, !tbaa !5
  %226 = call double @llvm.fmuladd.f64(double -3.000000e+00, double %225, double 1.000000e+00)
  %227 = load double, ptr %44, align 8, !tbaa !5
  %228 = fmul double 4.500000e+00, %227
  %229 = load double, ptr %44, align 8, !tbaa !5
  %230 = call double @llvm.fmuladd.f64(double %228, double %229, double %226)
  %231 = load double, ptr %46, align 8, !tbaa !5
  %232 = fsub double %230, %231
  %233 = fmul double %224, %232
  %234 = fmul double %222, %233
  %235 = call double @llvm.fmuladd.f64(double %220, double %221, double %234)
  %236 = load ptr, ptr %35, align 8, !tbaa !9
  store double %235, ptr %236, align 8, !tbaa !5
  %237 = load double, ptr @omega, align 8, !tbaa !5
  %238 = fsub double 1.000000e+00, %237
  %239 = load double, ptr %27, align 8, !tbaa !5
  %240 = load double, ptr @omega, align 8, !tbaa !5
  %241 = load double, ptr %43, align 8, !tbaa !5
  %242 = fmul double 0x3F9C71C71C71C71C, %241
  %243 = load double, ptr %44, align 8, !tbaa !5
  %244 = load double, ptr %45, align 8, !tbaa !5
  %245 = fadd double %243, %244
  %246 = call double @llvm.fmuladd.f64(double 3.000000e+00, double %245, double 1.000000e+00)
  %247 = load double, ptr %44, align 8, !tbaa !5
  %248 = load double, ptr %45, align 8, !tbaa !5
  %249 = fadd double %247, %248
  %250 = fmul double 4.500000e+00, %249
  %251 = load double, ptr %44, align 8, !tbaa !5
  %252 = load double, ptr %45, align 8, !tbaa !5
  %253 = fadd double %251, %252
  %254 = call double @llvm.fmuladd.f64(double %250, double %253, double %246)
  %255 = load double, ptr %46, align 8, !tbaa !5
  %256 = fsub double %254, %255
  %257 = fmul double %242, %256
  %258 = fmul double %240, %257
  %259 = call double @llvm.fmuladd.f64(double %238, double %239, double %258)
  %260 = load ptr, ptr %36, align 8, !tbaa !9
  store double %259, ptr %260, align 8, !tbaa !5
  %261 = load double, ptr @omega, align 8, !tbaa !5
  %262 = fsub double 1.000000e+00, %261
  %263 = load double, ptr %28, align 8, !tbaa !5
  %264 = load double, ptr @omega, align 8, !tbaa !5
  %265 = load double, ptr %43, align 8, !tbaa !5
  %266 = fmul double 0x3F9C71C71C71C71C, %265
  %267 = load double, ptr %44, align 8, !tbaa !5
  %268 = fneg double %267
  %269 = load double, ptr %45, align 8, !tbaa !5
  %270 = fadd double %268, %269
  %271 = call double @llvm.fmuladd.f64(double 3.000000e+00, double %270, double 1.000000e+00)
  %272 = load double, ptr %44, align 8, !tbaa !5
  %273 = fneg double %272
  %274 = load double, ptr %45, align 8, !tbaa !5
  %275 = fadd double %273, %274
  %276 = fmul double 4.500000e+00, %275
  %277 = load double, ptr %44, align 8, !tbaa !5
  %278 = fneg double %277
  %279 = load double, ptr %45, align 8, !tbaa !5
  %280 = fadd double %278, %279
  %281 = call double @llvm.fmuladd.f64(double %276, double %280, double %271)
  %282 = load double, ptr %46, align 8, !tbaa !5
  %283 = fsub double %281, %282
  %284 = fmul double %266, %283
  %285 = fmul double %264, %284
  %286 = call double @llvm.fmuladd.f64(double %262, double %263, double %285)
  %287 = load ptr, ptr %37, align 8, !tbaa !9
  store double %286, ptr %287, align 8, !tbaa !5
  %288 = load double, ptr @omega, align 8, !tbaa !5
  %289 = fsub double 1.000000e+00, %288
  %290 = load double, ptr %29, align 8, !tbaa !5
  %291 = load double, ptr @omega, align 8, !tbaa !5
  %292 = load double, ptr %43, align 8, !tbaa !5
  %293 = fmul double 0x3F9C71C71C71C71C, %292
  %294 = load double, ptr %44, align 8, !tbaa !5
  %295 = load double, ptr %45, align 8, !tbaa !5
  %296 = fsub double %294, %295
  %297 = call double @llvm.fmuladd.f64(double 3.000000e+00, double %296, double 1.000000e+00)
  %298 = load double, ptr %44, align 8, !tbaa !5
  %299 = load double, ptr %45, align 8, !tbaa !5
  %300 = fsub double %298, %299
  %301 = fmul double 4.500000e+00, %300
  %302 = load double, ptr %44, align 8, !tbaa !5
  %303 = load double, ptr %45, align 8, !tbaa !5
  %304 = fsub double %302, %303
  %305 = call double @llvm.fmuladd.f64(double %301, double %304, double %297)
  %306 = load double, ptr %46, align 8, !tbaa !5
  %307 = fsub double %305, %306
  %308 = fmul double %293, %307
  %309 = fmul double %291, %308
  %310 = call double @llvm.fmuladd.f64(double %289, double %290, double %309)
  %311 = load ptr, ptr %38, align 8, !tbaa !9
  store double %310, ptr %311, align 8, !tbaa !5
  %312 = load double, ptr @omega, align 8, !tbaa !5
  %313 = fsub double 1.000000e+00, %312
  %314 = load double, ptr %30, align 8, !tbaa !5
  %315 = load double, ptr @omega, align 8, !tbaa !5
  %316 = load double, ptr %43, align 8, !tbaa !5
  %317 = fmul double 0x3F9C71C71C71C71C, %316
  %318 = load double, ptr %44, align 8, !tbaa !5
  %319 = fneg double %318
  %320 = load double, ptr %45, align 8, !tbaa !5
  %321 = fsub double %319, %320
  %322 = call double @llvm.fmuladd.f64(double 3.000000e+00, double %321, double 1.000000e+00)
  %323 = load double, ptr %44, align 8, !tbaa !5
  %324 = fneg double %323
  %325 = load double, ptr %45, align 8, !tbaa !5
  %326 = fsub double %324, %325
  %327 = fmul double 4.500000e+00, %326
  %328 = load double, ptr %44, align 8, !tbaa !5
  %329 = fneg double %328
  %330 = load double, ptr %45, align 8, !tbaa !5
  %331 = fsub double %329, %330
  %332 = call double @llvm.fmuladd.f64(double %327, double %331, double %322)
  %333 = load double, ptr %46, align 8, !tbaa !5
  %334 = fsub double %332, %333
  %335 = fmul double %317, %334
  %336 = fmul double %315, %335
  %337 = call double @llvm.fmuladd.f64(double %313, double %314, double %336)
  %338 = load ptr, ptr %39, align 8, !tbaa !9
  store double %337, ptr %338, align 8, !tbaa !5
  store i32 0, ptr %47, align 4
  br label %339

339:                                              ; preds = %145, %71
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  %340 = load i32, ptr %47, align 4
  switch i32 %340, label %342 [
    i32 0, label %341
    i32 1, label %341
  ]

341:                                              ; preds = %339, %339
  ret void

342:                                              ; preds = %339
  unreachable
}

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}


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

@omega = external dso_local local_unnamed_addr global double, align 8

; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(read, argmem: write, inaccessiblemem: none) uwtable
define dso_local void @lbm_kernel(double noundef %0, double noundef %1, double noundef %2, double noundef %3, double noundef %4, double noundef %5, double noundef %6, double noundef %7, double noundef %8, ptr noalias nocapture noundef writeonly %9, ptr noalias nocapture noundef writeonly %10, ptr noalias nocapture noundef writeonly %11, ptr noalias nocapture noundef writeonly %12, ptr noalias nocapture noundef writeonly %13, ptr noalias nocapture noundef writeonly %14, ptr noalias nocapture noundef writeonly %15, ptr noalias nocapture noundef writeonly %16, ptr noalias nocapture noundef writeonly %17, i32 noundef %18, i32 noundef %19, i32 noundef %20) local_unnamed_addr #0 {
  %22 = icmp eq i32 %19, 2
  %23 = icmp eq i32 %19, 1027
  %or.cond = or i1 %22, %23
  %24 = add i32 %20, -2
  %25 = icmp ult i32 %24, 1024
  %or.cond5 = and i1 %or.cond, %25
  br i1 %or.cond5, label %31, label %26

26:                                               ; preds = %21
  %27 = icmp eq i32 %20, 1
  %28 = icmp eq i32 %20, 1026
  %or.cond7 = or i1 %27, %28
  %29 = add i32 %19, -3
  %30 = icmp ult i32 %29, 1024
  %or.cond11 = and i1 %30, %or.cond7
  br i1 %or.cond11, label %31, label %32

31:                                               ; preds = %26, %21
  store double %0, ptr %9, align 8, !tbaa !5
  store double %1, ptr %11, align 8, !tbaa !5
  store double %2, ptr %10, align 8, !tbaa !5
  store double %3, ptr %13, align 8, !tbaa !5
  store double %4, ptr %12, align 8, !tbaa !5
  store double %5, ptr %17, align 8, !tbaa !5
  store double %6, ptr %16, align 8, !tbaa !5
  store double %7, ptr %15, align 8, !tbaa !5
  store double %8, ptr %14, align 8, !tbaa !5
  br label %138

32:                                               ; preds = %26
  %33 = fadd double %1, %2
  %34 = fadd double %33, %3
  %35 = fadd double %34, %4
  %36 = fadd double %35, %5
  %37 = fadd double %36, %6
  %38 = fadd double %37, %7
  %39 = fadd double %38, %8
  %40 = fadd double %39, %0
  %41 = insertelement <2 x double> poison, double %1, i64 0
  %42 = insertelement <2 x double> %41, double %3, i64 1
  %43 = insertelement <2 x double> poison, double %6, i64 0
  %44 = insertelement <2 x double> %43, double %7, i64 1
  %45 = fadd <2 x double> %42, %44
  %46 = insertelement <2 x double> poison, double %2, i64 0
  %47 = insertelement <2 x double> %46, double %4, i64 1
  %48 = insertelement <2 x double> poison, double %8, i64 0
  %49 = shufflevector <2 x double> %48, <2 x double> poison, <2 x i32> zeroinitializer
  %50 = fadd <2 x double> %47, %49
  %51 = icmp eq i32 %19, 1026
  %or.cond15 = and i1 %51, %25
  %52 = insertelement <2 x double> poison, double %5, i64 0
  %53 = shufflevector <2 x double> %52, <2 x double> poison, <2 x i32> zeroinitializer
  %54 = fadd <2 x double> %45, %53
  %55 = shufflevector <2 x double> %44, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %56 = fadd <2 x double> %50, %55
  %57 = fsub <2 x double> %54, %56
  %58 = insertelement <2 x double> poison, double %40, i64 0
  %59 = shufflevector <2 x double> %58, <2 x double> poison, <2 x i32> zeroinitializer
  %60 = fdiv <2 x double> %57, %59
  %61 = insertelement <2 x i1> poison, i1 %or.cond15, i64 0
  %62 = shufflevector <2 x i1> %61, <2 x i1> poison, <2 x i32> zeroinitializer
  %63 = select <2 x i1> %62, <2 x double> <double 0.000000e+00, double 1.000000e-02>, <2 x double> %60
  %64 = extractelement <2 x double> %63, i64 0
  %65 = fmul <2 x double> %63, %63
  %66 = extractelement <2 x double> %65, i64 0
  %67 = extractelement <2 x double> %63, i64 1
  %68 = tail call double @llvm.fmuladd.f64(double %67, double %67, double %66)
  %69 = fmul double %68, 1.500000e+00
  %70 = load double, ptr @omega, align 8, !tbaa !5
  %71 = fsub double 1.000000e+00, %70
  %72 = fmul double %40, 0x3FDC71C71C71C71C
  %73 = fsub double 1.000000e+00, %69
  %74 = fmul double %72, %73
  %75 = fmul double %74, %70
  %76 = tail call double @llvm.fmuladd.f64(double %71, double %0, double %75)
  store double %76, ptr %9, align 8, !tbaa !5
  %77 = fmul double %40, 0x3FBC71C71C71C71C
  %78 = tail call double @llvm.fmuladd.f64(double %64, double 3.000000e+00, double 1.000000e+00)
  %79 = fmul double %64, 4.500000e+00
  %80 = tail call double @llvm.fmuladd.f64(double %79, double %64, double %78)
  %81 = fsub double %80, %69
  %82 = fmul double %77, %81
  %83 = fmul double %82, %70
  %84 = tail call double @llvm.fmuladd.f64(double %71, double %1, double %83)
  store double %84, ptr %10, align 8, !tbaa !5
  %85 = tail call double @llvm.fmuladd.f64(double %64, double -3.000000e+00, double 1.000000e+00)
  %86 = tail call double @llvm.fmuladd.f64(double %79, double %64, double %85)
  %87 = fsub double %86, %69
  %88 = fmul double %77, %87
  %89 = fmul double %88, %70
  %90 = tail call double @llvm.fmuladd.f64(double %71, double %2, double %89)
  store double %90, ptr %11, align 8, !tbaa !5
  %91 = tail call double @llvm.fmuladd.f64(double %67, double 3.000000e+00, double 1.000000e+00)
  %92 = fmul double %67, 4.500000e+00
  %93 = tail call double @llvm.fmuladd.f64(double %92, double %67, double %91)
  %94 = fsub double %93, %69
  %95 = fmul double %77, %94
  %96 = fmul double %95, %70
  %97 = tail call double @llvm.fmuladd.f64(double %71, double %3, double %96)
  store double %97, ptr %12, align 8, !tbaa !5
  %98 = tail call double @llvm.fmuladd.f64(double %67, double -3.000000e+00, double 1.000000e+00)
  %99 = tail call double @llvm.fmuladd.f64(double %92, double %67, double %98)
  %100 = fsub double %99, %69
  %101 = fmul double %77, %100
  %102 = fmul double %101, %70
  %103 = tail call double @llvm.fmuladd.f64(double %71, double %4, double %102)
  store double %103, ptr %13, align 8, !tbaa !5
  %104 = fmul double %40, 0x3F9C71C71C71C71C
  %105 = fadd double %67, %64
  %106 = tail call double @llvm.fmuladd.f64(double %105, double 3.000000e+00, double 1.000000e+00)
  %107 = fmul double %105, 4.500000e+00
  %108 = tail call double @llvm.fmuladd.f64(double %107, double %105, double %106)
  %109 = fsub double %108, %69
  %110 = fmul double %104, %109
  %111 = fmul double %110, %70
  %112 = tail call double @llvm.fmuladd.f64(double %71, double %5, double %111)
  store double %112, ptr %14, align 8, !tbaa !5
  %113 = fneg double %67
  %114 = fsub double %64, %67
  %115 = tail call double @llvm.fmuladd.f64(double %114, double 3.000000e+00, double 1.000000e+00)
  %116 = fmul double %114, 4.500000e+00
  %117 = tail call double @llvm.fmuladd.f64(double %116, double %114, double %115)
  %118 = fsub double %117, %69
  %119 = fmul double %104, %118
  %120 = fmul double %119, %70
  %121 = tail call double @llvm.fmuladd.f64(double %71, double %6, double %120)
  store double %121, ptr %15, align 8, !tbaa !5
  %122 = fsub double %67, %64
  %123 = tail call double @llvm.fmuladd.f64(double %122, double 3.000000e+00, double 1.000000e+00)
  %124 = fmul double %122, 4.500000e+00
  %125 = tail call double @llvm.fmuladd.f64(double %124, double %122, double %123)
  %126 = fsub double %125, %69
  %127 = fmul double %104, %126
  %128 = fmul double %127, %70
  %129 = tail call double @llvm.fmuladd.f64(double %71, double %7, double %128)
  store double %129, ptr %16, align 8, !tbaa !5
  %130 = fsub double %113, %64
  %131 = tail call double @llvm.fmuladd.f64(double %130, double 3.000000e+00, double 1.000000e+00)
  %132 = fmul double %130, 4.500000e+00
  %133 = tail call double @llvm.fmuladd.f64(double %132, double %130, double %131)
  %134 = fsub double %133, %69
  %135 = fmul double %104, %134
  %136 = fmul double %135, %70
  %137 = tail call double @llvm.fmuladd.f64(double %71, double %8, double %136)
  store double %137, ptr %17, align 8, !tbaa !5
  br label %138

138:                                              ; preds = %32, %31
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(read, argmem: write, inaccessiblemem: none) 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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass