; LLVM IR from tangjz/acm-icpc :: lydsy (3160)

; 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.complex = type { double, double }

@x = external dso_local global [262144 x %struct.complex], align 16
@y = external dso_local global [262144 x %struct.complex], align 16
@n = external dso_local global i32, align 4
@len = external dso_local global i32, align 4
@pw = external dso_local global [100001 x i32], align 16
@f = external dso_local global [200002 x i32], align 16
@h = external dso_local global [200002 x i32], align 16
@ans = external dso_local global i32, align 4
@str = external dso_local global [100001 x i8], align 16
@buf = external dso_local global [200002 x i8], align 16
@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z3FFTP7complexii(ptr noundef, i32 noundef, i32 noundef) #0

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7complexC2Edd(ptr noundef nonnull align 8 dereferenceable(16), double noundef, double noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZmlRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #0

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZmiRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #0

; 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: mustprogress norecurse uwtable
define dso_local noundef i32 @main() #4 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i8, align 1
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca %struct.complex, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %struct.complex, align 8
  %11 = alloca %struct.complex, align 8
  %12 = alloca %struct.complex, align 8
  %13 = alloca %struct.complex, align 8
  %14 = alloca %struct.complex, align 8
  %15 = alloca %struct.complex, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %23 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str, ptr noundef @str)
  %24 = call i64 @strlen(ptr noundef @str) #8
  %25 = trunc i64 %24 to i32
  store i32 %25, ptr @n, align 4, !tbaa !5
  store i32 1, ptr @pw, align 16, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #9
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %26

26:                                               ; preds = %51, %0
  %27 = load i32, ptr %2, align 4, !tbaa !5
  %28 = load i32, ptr @n, align 4, !tbaa !5
  %29 = add nsw i32 %28, 1
  %30 = ashr i32 %29, 1
  %31 = icmp sle i32 %27, %30
  br i1 %31, label %33, label %32

32:                                               ; preds = %26
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #9
  br label %54

33:                                               ; preds = %26
  %34 = load i32, ptr %2, align 4, !tbaa !5
  %35 = sub nsw i32 %34, 1
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds [100001 x i32], ptr @pw, i64 0, i64 %36
  %38 = load i32, ptr %37, align 4, !tbaa !5
  %39 = shl i32 %38, 1
  %40 = load i32, ptr %2, align 4, !tbaa !5
  %41 = sext i32 %40 to i64
  %42 = getelementptr inbounds [100001 x i32], ptr @pw, i64 0, i64 %41
  store i32 %39, ptr %42, align 4, !tbaa !5
  %43 = icmp sge i32 %39, 1000000007
  br i1 %43, label %44, label %50

44:                                               ; preds = %33
  %45 = load i32, ptr %2, align 4, !tbaa !5
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds [100001 x i32], ptr @pw, i64 0, i64 %46
  %48 = load i32, ptr %47, align 4, !tbaa !5
  %49 = sub nsw i32 %48, 1000000007
  store i32 %49, ptr %47, align 4, !tbaa !5
  br label %50

50:                                               ; preds = %44, %33
  br label %51

51:                                               ; preds = %50
  %52 = load i32, ptr %2, align 4, !tbaa !5
  %53 = add nsw i32 %52, 1
  store i32 %53, ptr %2, align 4, !tbaa !5
  br label %26, !llvm.loop !9

54:                                               ; preds = %32
  store i32 1, ptr @len, align 4, !tbaa !5
  br label %55

55:                                               ; preds = %61, %54
  %56 = load i32, ptr @len, align 4, !tbaa !5
  %57 = load i32, ptr @n, align 4, !tbaa !5
  %58 = shl i32 %57, 1
  %59 = icmp slt i32 %56, %58
  br i1 %59, label %60, label %64

60:                                               ; preds = %55
  br label %61

61:                                               ; preds = %60
  %62 = load i32, ptr @len, align 4, !tbaa !5
  %63 = shl i32 %62, 1
  store i32 %63, ptr @len, align 4, !tbaa !5
  br label %55, !llvm.loop !11

64:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 1, ptr %3) #9
  store i8 97, ptr %3, align 1, !tbaa !12
  br label %65

65:                                               ; preds = %185, %64
  %66 = load i8, ptr %3, align 1, !tbaa !12
  %67 = sext i8 %66 to i32
  %68 = icmp sle i32 %67, 98
  br i1 %68, label %70, label %69

69:                                               ; preds = %65
  store i32 8, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %3) #9
  br label %188

70:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #9
  store i32 0, ptr %5, align 4, !tbaa !5
  br label %71

71:                                               ; preds = %99, %70
  %72 = load i32, ptr %5, align 4, !tbaa !5
  %73 = load i32, ptr @len, align 4, !tbaa !5
  %74 = icmp slt i32 %72, %73
  br i1 %74, label %76, label %75

75:                                               ; preds = %71
  store i32 11, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #9
  br label %102

76:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  %77 = load i32, ptr %5, align 4, !tbaa !5
  %78 = load i32, ptr @n, align 4, !tbaa !5
  %79 = icmp slt i32 %77, %78
  br i1 %79, label %80, label %89

80:                                               ; preds = %76
  %81 = load i32, ptr %5, align 4, !tbaa !5
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds [100001 x i8], ptr @str, i64 0, i64 %82
  %84 = load i8, ptr %83, align 1, !tbaa !12
  %85 = sext i8 %84 to i32
  %86 = load i8, ptr %3, align 1, !tbaa !12
  %87 = sext i8 %86 to i32
  %88 = icmp eq i32 %85, %87
  br label %89

89:                                               ; preds = %80, %76
  %90 = phi i1 [ false, %76 ], [ %88, %80 ]
  %91 = zext i1 %90 to i32
  store i32 %91, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #9
  %92 = load i32, ptr %6, align 4, !tbaa !5
  %93 = sitofp i32 %92 to double
  %94 = load i32, ptr %6, align 4, !tbaa !5
  %95 = sitofp i32 %94 to double
  call void @_ZN7complexC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %7, double noundef %93, double noundef %95)
  %96 = load i32, ptr %5, align 4, !tbaa !5
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds [262144 x %struct.complex], ptr @x, i64 0, i64 %97
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %98, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  br label %99

99:                                               ; preds = %89
  %100 = load i32, ptr %5, align 4, !tbaa !5
  %101 = add nsw i32 %100, 1
  store i32 %101, ptr %5, align 4, !tbaa !5
  br label %71, !llvm.loop !16

102:                                              ; preds = %75
  %103 = load i32, ptr @len, align 4, !tbaa !5
  call void @_Z3FFTP7complexii(ptr noundef @x, i32 noundef %103, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #9
  store i32 0, ptr %8, align 4, !tbaa !5
  br label %104

104:                                              ; preds = %156, %102
  %105 = load i32, ptr %8, align 4, !tbaa !5
  %106 = load i32, ptr @len, align 4, !tbaa !5
  %107 = icmp slt i32 %105, %106
  br i1 %107, label %109, label %108

108:                                              ; preds = %104
  store i32 14, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  br label %159

109:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  %110 = load i32, ptr @len, align 4, !tbaa !5
  %111 = load i32, ptr %8, align 4, !tbaa !5
  %112 = sub nsw i32 %110, %111
  %113 = load i32, ptr @len, align 4, !tbaa !5
  %114 = sub nsw i32 %113, 1
  %115 = and i32 %112, %114
  store i32 %115, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #9
  %116 = load i32, ptr %8, align 4, !tbaa !5
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds [262144 x %struct.complex], ptr @x, i64 0, i64 %117
  %119 = load i32, ptr %8, align 4, !tbaa !5
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds [262144 x %struct.complex], ptr @x, i64 0, i64 %120
  %122 = call { double, double } @_ZmlRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %118, ptr noundef nonnull align 8 dereferenceable(16) %121)
  %123 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %124 = extractvalue { double, double } %122, 0
  store double %124, ptr %123, align 8
  %125 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %126 = extractvalue { double, double } %122, 1
  store double %126, ptr %125, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #9
  %127 = load i32, ptr %9, align 4, !tbaa !5
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds [262144 x %struct.complex], ptr @x, i64 0, i64 %128
  %130 = load i32, ptr %9, align 4, !tbaa !5
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds [262144 x %struct.complex], ptr @x, i64 0, i64 %131
  %133 = call { double, double } @_ZmlRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %129, ptr noundef nonnull align 8 dereferenceable(16) %132)
  %134 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  %135 = extractvalue { double, double } %133, 0
  store double %135, ptr %134, align 8
  %136 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  %137 = extractvalue { double, double } %133, 1
  store double %137, ptr %136, align 8
  %138 = call { double, double } @_ZNK7complex4conjEv(ptr noundef nonnull align 8 dereferenceable(16) %14)
  %139 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  %140 = extractvalue { double, double } %138, 0
  store double %140, ptr %139, align 8
  %141 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  %142 = extractvalue { double, double } %138, 1
  store double %142, ptr %141, align 8
  %143 = call { double, double } @_ZmiRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(16) %13)
  %144 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 0
  %145 = extractvalue { double, double } %143, 0
  store double %145, ptr %144, align 8
  %146 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 1
  %147 = extractvalue { double, double } %143, 1
  store double %147, ptr %146, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #9
  call void @_ZN7complexC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %15, double noundef 0.000000e+00, double noundef -2.500000e-01)
  %148 = call { double, double } @_ZmlRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(16) %15)
  %149 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 0
  %150 = extractvalue { double, double } %148, 0
  store double %150, ptr %149, align 8
  %151 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 1
  %152 = extractvalue { double, double } %148, 1
  store double %152, ptr %151, align 8
  %153 = load i32, ptr %8, align 4, !tbaa !5
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %154
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %155, ptr align 8 %10, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  br label %156

156:                                              ; preds = %109
  %157 = load i32, ptr %8, align 4, !tbaa !5
  %158 = add nsw i32 %157, 1
  store i32 %158, ptr %8, align 4, !tbaa !5
  br label %104, !llvm.loop !17

159:                                              ; preds = %108
  %160 = load i32, ptr @len, align 4, !tbaa !5
  call void @_Z3FFTP7complexii(ptr noundef @y, i32 noundef %160, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %161

161:                                              ; preds = %181, %159
  %162 = load i32, ptr %16, align 4, !tbaa !5
  %163 = load i32, ptr @n, align 4, !tbaa !5
  %164 = sub nsw i32 %163, 1
  %165 = shl i32 %164, 1
  %166 = icmp sle i32 %162, %165
  br i1 %166, label %168, label %167

167:                                              ; preds = %161
  store i32 17, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  br label %184

168:                                              ; preds = %161
  %169 = load i32, ptr %16, align 4, !tbaa !5
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %170
  %172 = getelementptr inbounds %struct.complex, ptr %171, i32 0, i32 0
  %173 = load double, ptr %172, align 16, !tbaa !18
  %174 = fadd double %173, 5.000000e-01
  %175 = fptosi double %174 to i32
  %176 = load i32, ptr %16, align 4, !tbaa !5
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds [200002 x i32], ptr @f, i64 0, i64 %177
  %179 = load i32, ptr %178, align 4, !tbaa !5
  %180 = add nsw i32 %179, %175
  store i32 %180, ptr %178, align 4, !tbaa !5
  br label %181

181:                                              ; preds = %168
  %182 = load i32, ptr %16, align 4, !tbaa !5
  %183 = add nsw i32 %182, 1
  store i32 %183, ptr %16, align 4, !tbaa !5
  br label %161, !llvm.loop !20

184:                                              ; preds = %167
  br label %185

185:                                              ; preds = %184
  %186 = load i8, ptr %3, align 1, !tbaa !12
  %187 = add i8 %186, 1
  store i8 %187, ptr %3, align 1, !tbaa !12
  br label %65, !llvm.loop !21

188:                                              ; preds = %69
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  store i32 0, ptr %17, align 4, !tbaa !5
  br label %189

189:                                              ; preds = %208, %188
  %190 = load i32, ptr %17, align 4, !tbaa !5
  %191 = load i32, ptr @n, align 4, !tbaa !5
  %192 = icmp slt i32 %190, %191
  br i1 %192, label %194, label %193

193:                                              ; preds = %189
  store i32 20, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  br label %211

194:                                              ; preds = %189
  %195 = load i32, ptr %17, align 4, !tbaa !5
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds [100001 x i8], ptr @str, i64 0, i64 %196
  %198 = load i8, ptr %197, align 1, !tbaa !12
  %199 = load i32, ptr %17, align 4, !tbaa !5
  %200 = shl i32 %199, 1
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %201
  store i8 %198, ptr %202, align 1, !tbaa !12
  %203 = load i32, ptr %17, align 4, !tbaa !5
  %204 = shl i32 %203, 1
  %205 = or i32 %204, 1
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %206
  store i8 35, ptr %207, align 1, !tbaa !12
  br label %208

208:                                              ; preds = %194
  %209 = load i32, ptr %17, align 4, !tbaa !5
  %210 = add nsw i32 %209, 1
  store i32 %210, ptr %17, align 4, !tbaa !5
  br label %189, !llvm.loop !22

211:                                              ; preds = %193
  %212 = load i32, ptr @n, align 4, !tbaa !5
  %213 = sub nsw i32 %212, 1
  %214 = shl i32 %213, 1
  %215 = or i32 %214, 1
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %216
  store i8 0, ptr %217, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  store i32 0, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  store i32 0, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %218

218:                                              ; preds = %303, %211
  %219 = load i32, ptr %18, align 4, !tbaa !5
  %220 = load i32, ptr @n, align 4, !tbaa !5
  %221 = sub nsw i32 %220, 1
  %222 = shl i32 %221, 1
  %223 = icmp sle i32 %219, %222
  br i1 %223, label %225, label %224

224:                                              ; preds = %218
  store i32 23, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  br label %306

225:                                              ; preds = %218
  %226 = load i32, ptr %18, align 4, !tbaa !5
  %227 = load i32, ptr %19, align 4, !tbaa !5
  %228 = icmp slt i32 %226, %227
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  br i1 %228, label %229, label %241

229:                                              ; preds = %225
  %230 = load i32, ptr %19, align 4, !tbaa !5
  %231 = load i32, ptr %18, align 4, !tbaa !5
  %232 = sub nsw i32 %230, %231
  store i32 %232, ptr %21, align 4, !tbaa !5
  %233 = load i32, ptr %20, align 4, !tbaa !5
  %234 = shl i32 %233, 1
  %235 = load i32, ptr %18, align 4, !tbaa !5
  %236 = sub nsw i32 %234, %235
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %237
  %239 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %21, ptr noundef nonnull align 4 dereferenceable(4) %238)
  %240 = load i32, ptr %239, align 4, !tbaa !5
  br label %242

241:                                              ; preds = %225
  br label %242

242:                                              ; preds = %241, %229
  %243 = phi i32 [ %240, %229 ], [ 0, %241 ]
  %244 = load i32, ptr %18, align 4, !tbaa !5
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %245
  store i32 %243, ptr %246, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  br label %247

247:                                              ; preds = %279, %242
  %248 = load i32, ptr %18, align 4, !tbaa !5
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %249
  %251 = load i32, ptr %250, align 4, !tbaa !5
  %252 = load i32, ptr %18, align 4, !tbaa !5
  %253 = icmp sle i32 %251, %252
  br i1 %253, label %254, label %276

254:                                              ; preds = %247
  %255 = load i32, ptr %18, align 4, !tbaa !5
  %256 = load i32, ptr %18, align 4, !tbaa !5
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %257
  %259 = load i32, ptr %258, align 4, !tbaa !5
  %260 = sub nsw i32 %255, %259
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %261
  %263 = load i8, ptr %262, align 1, !tbaa !12
  %264 = sext i8 %263 to i32
  %265 = load i32, ptr %18, align 4, !tbaa !5
  %266 = load i32, ptr %18, align 4, !tbaa !5
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %267
  %269 = load i32, ptr %268, align 4, !tbaa !5
  %270 = add nsw i32 %265, %269
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %271
  %273 = load i8, ptr %272, align 1, !tbaa !12
  %274 = sext i8 %273 to i32
  %275 = icmp eq i32 %264, %274
  br label %276

276:                                              ; preds = %254, %247
  %277 = phi i1 [ false, %247 ], [ %275, %254 ]
  br i1 %277, label %278, label %285

278:                                              ; preds = %276
  br label %279

279:                                              ; preds = %278
  %280 = load i32, ptr %18, align 4, !tbaa !5
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %281
  %283 = load i32, ptr %282, align 4, !tbaa !5
  %284 = add nsw i32 %283, 1
  store i32 %284, ptr %282, align 4, !tbaa !5
  br label %247, !llvm.loop !23

285:                                              ; preds = %276
  %286 = load i32, ptr %19, align 4, !tbaa !5
  %287 = load i32, ptr %18, align 4, !tbaa !5
  %288 = load i32, ptr %18, align 4, !tbaa !5
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %289
  %291 = load i32, ptr %290, align 4, !tbaa !5
  %292 = add nsw i32 %287, %291
  %293 = icmp slt i32 %286, %292
  br i1 %293, label %294, label %302

294:                                              ; preds = %285
  %295 = load i32, ptr %18, align 4, !tbaa !5
  %296 = load i32, ptr %18, align 4, !tbaa !5
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %297
  %299 = load i32, ptr %298, align 4, !tbaa !5
  %300 = add nsw i32 %295, %299
  store i32 %300, ptr %19, align 4, !tbaa !5
  %301 = load i32, ptr %18, align 4, !tbaa !5
  store i32 %301, ptr %20, align 4, !tbaa !5
  br label %302

302:                                              ; preds = %294, %285
  br label %303

303:                                              ; preds = %302
  %304 = load i32, ptr %18, align 4, !tbaa !5
  %305 = add nsw i32 %304, 1
  store i32 %305, ptr %18, align 4, !tbaa !5
  br label %218, !llvm.loop !24

306:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %307

307:                                              ; preds = %357, %306
  %308 = load i32, ptr %22, align 4, !tbaa !5
  %309 = load i32, ptr @n, align 4, !tbaa !5
  %310 = sub nsw i32 %309, 1
  %311 = shl i32 %310, 1
  %312 = icmp sle i32 %308, %311
  br i1 %312, label %314, label %313

313:                                              ; preds = %307
  store i32 29, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %360

314:                                              ; preds = %307
  %315 = load i32, ptr %22, align 4, !tbaa !5
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds [200002 x i32], ptr @f, i64 0, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !5
  %319 = add nsw i32 %318, 1
  %320 = ashr i32 %319, 1
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds [100001 x i32], ptr @pw, i64 0, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !5
  %324 = sub nsw i32 %323, 1
  %325 = load i32, ptr @ans, align 4, !tbaa !5
  %326 = add nsw i32 %325, %324
  store i32 %326, ptr @ans, align 4, !tbaa !5
  %327 = icmp sge i32 %326, 1000000007
  br i1 %327, label %328, label %331

328:                                              ; preds = %314
  %329 = load i32, ptr @ans, align 4, !tbaa !5
  %330 = sub nsw i32 %329, 1000000007
  store i32 %330, ptr @ans, align 4, !tbaa !5
  br label %331

331:                                              ; preds = %328, %314
  %332 = load i32, ptr %22, align 4, !tbaa !5
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %333
  %335 = load i32, ptr %334, align 4, !tbaa !5
  %336 = load i32, ptr %22, align 4, !tbaa !5
  %337 = and i32 %336, 1
  %338 = sub nsw i32 %335, %337
  %339 = load i32, ptr %22, align 4, !tbaa !5
  %340 = load i32, ptr %22, align 4, !tbaa !5
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %341
  %343 = load i32, ptr %342, align 4, !tbaa !5
  %344 = sub nsw i32 %339, %343
  %345 = xor i32 %344, -1
  %346 = and i32 %345, 1
  %347 = sub nsw i32 %338, %346
  %348 = add nsw i32 %347, 1
  %349 = ashr i32 %348, 1
  %350 = load i32, ptr @ans, align 4, !tbaa !5
  %351 = sub nsw i32 %350, %349
  store i32 %351, ptr @ans, align 4, !tbaa !5
  %352 = icmp slt i32 %351, 0
  br i1 %352, label %353, label %356

353:                                              ; preds = %331
  %354 = load i32, ptr @ans, align 4, !tbaa !5
  %355 = add nsw i32 %354, 1000000007
  store i32 %355, ptr @ans, align 4, !tbaa !5
  br label %356

356:                                              ; preds = %353, %331
  br label %357

357:                                              ; preds = %356
  %358 = load i32, ptr %22, align 4, !tbaa !5
  %359 = add nsw i32 %358, 1
  store i32 %359, ptr %22, align 4, !tbaa !5
  br label %307, !llvm.loop !25

360:                                              ; preds = %313
  %361 = load i32, ptr @ans, align 4, !tbaa !5
  %362 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef %361)
  ret i32 0
}

declare i32 @__isoc99_scanf(ptr noundef, ...) #5

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #6

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK7complex4conjEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #7

declare i32 @printf(ptr noundef, ...) #5

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 nosync 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 nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { mustprogress norecurse 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 #5 = { "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 #6 = { nounwind willreturn memory(read) "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 #7 = { inlinehint 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 #8 = { nounwind willreturn memory(read) }
attributes #9 = { 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}
!12 = !{!7, !7, i64 0}
!13 = !{i64 0, i64 8, !14, i64 8, i64 8, !14}
!14 = !{!15, !15, i64 0}
!15 = !{!"double", !7, i64 0}
!16 = distinct !{!16, !10}
!17 = distinct !{!17, !10}
!18 = !{!19, !15, i64 0}
!19 = !{!"_ZTS7complex", !15, i64 0, !15, i64 8}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10}
!22 = distinct !{!22, !10}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !10}


; 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.complex = type { double, double }

@x = external dso_local global [262144 x %struct.complex], align 16
@y = external dso_local global [262144 x %struct.complex], align 16
@n = external dso_local local_unnamed_addr global i32, align 4
@len = external dso_local local_unnamed_addr global i32, align 4
@pw = external dso_local local_unnamed_addr global [100001 x i32], align 16
@f = external dso_local local_unnamed_addr global [200002 x i32], align 16
@h = external dso_local global [200002 x i32], align 16
@ans = external dso_local local_unnamed_addr global i32, align 4
@str = external dso_local global [100001 x i8], align 16
@buf = external dso_local local_unnamed_addr global [200002 x i8], align 16
@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z3FFTP7complexii(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7complexC2Edd(ptr noundef nonnull align 8 dereferenceable(16), double noundef, double noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZmlRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZmiRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0

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

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() local_unnamed_addr #4 {
  %1 = alloca %struct.complex, align 8
  %2 = alloca %struct.complex, align 8
  %3 = alloca %struct.complex, align 8
  %4 = alloca %struct.complex, align 8
  %5 = alloca %struct.complex, align 8
  %6 = alloca %struct.complex, align 8
  %7 = alloca i32, align 4
  %8 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str, ptr noundef nonnull @str)
  %9 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) @str) #9
  %10 = trunc i64 %9 to i32
  store i32 %10, ptr @n, align 4, !tbaa !5
  store i32 1, ptr @pw, align 16, !tbaa !5
  %11 = add nsw i32 %10, 1
  %12 = ashr i32 %11, 1
  %.not102 = icmp slt i32 %12, 1
  br i1 %.not102, label %.preheader97, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %0
  %13 = zext nneg i32 %12 to i64
  %xtraiter = and i64 %13, 1
  %14 = icmp eq i32 %12, 1
  br i1 %14, label %.preheader97.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %13, 2147483646
  br label %.lr.ph

.preheader97.loopexit.unr-lcssa:                  ; preds = %.lr.ph, %.lr.ph.preheader
  %.unr = phi i32 [ 1, %.lr.ph.preheader ], [ %spec.select.1, %.lr.ph ]
  %indvars.iv.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next.1, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader97, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %.preheader97.loopexit.unr-lcssa
  %15 = shl i32 %.unr, 1
  %16 = getelementptr inbounds [100001 x i32], ptr @pw, i64 0, i64 %indvars.iv.unr
  %17 = icmp sgt i32 %15, 1000000006
  %18 = add nsw i32 %15, -1000000007
  %spec.select.epil = select i1 %17, i32 %18, i32 %15
  store i32 %spec.select.epil, ptr %16, align 4, !tbaa !5
  br label %.preheader97

.preheader97:                                     ; preds = %.lr.ph.epil, %.preheader97.loopexit.unr-lcssa, %0
  %19 = shl i32 %10, 1
  br label %29

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %20 = phi i32 [ 1, %.lr.ph.preheader.new ], [ %spec.select.1, %.lr.ph ]
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader.new ], [ %indvars.iv.next.1, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %21 = shl i32 %20, 1
  %22 = getelementptr inbounds [100001 x i32], ptr @pw, i64 0, i64 %indvars.iv
  %23 = icmp sgt i32 %21, 1000000006
  %24 = add nsw i32 %21, -1000000007
  %spec.select = select i1 %23, i32 %24, i32 %21
  store i32 %spec.select, ptr %22, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %25 = shl i32 %spec.select, 1
  %26 = getelementptr inbounds [100001 x i32], ptr @pw, i64 0, i64 %indvars.iv.next
  %27 = icmp sgt i32 %25, 1000000006
  %28 = add nsw i32 %25, -1000000007
  %spec.select.1 = select i1 %27, i32 %28, i32 %25
  store i32 %spec.select.1, ptr %26, align 4, !tbaa !5
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.preheader97.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !9

29:                                               ; preds = %29, %.preheader97
  %storemerge = phi i32 [ %31, %29 ], [ 1, %.preheader97 ]
  %30 = icmp slt i32 %storemerge, %19
  %31 = shl i32 %storemerge, 1
  br i1 %30, label %29, label %.preheader96, !llvm.loop !11

.preheader96:                                     ; preds = %29
  store i32 %storemerge, ptr @len, align 4, !tbaa !5
  %32 = getelementptr inbounds i8, ptr %3, i64 8
  %33 = getelementptr inbounds i8, ptr %5, i64 8
  %34 = getelementptr inbounds i8, ptr %4, i64 8
  %35 = getelementptr inbounds i8, ptr %2, i64 8
  %36 = icmp sgt i32 %storemerge, 0
  br i1 %36, label %.lr.ph105, label %._crit_edge

.lr.ph118.preheader:                              ; preds = %._crit_edge115.1
  %wide.trip.count159 = zext nneg i32 %182 to i64
  %min.iters.check212 = icmp ult i32 %182, 24
  br i1 %min.iters.check212, label %.lr.ph118.preheader227, label %vector.scevcheck

.lr.ph118.preheader227:                           ; preds = %middle.block210, %vector.scevcheck, %.lr.ph118.preheader
  %indvars.iv156.ph = phi i64 [ 0, %vector.scevcheck ], [ 0, %.lr.ph118.preheader ], [ %n.vec215, %middle.block210 ]
  %xtraiter233 = and i64 %wide.trip.count159, 1
  %lcmp.mod234.not = icmp eq i64 %xtraiter233, 0
  br i1 %lcmp.mod234.not, label %.lr.ph118.prol.loopexit, label %.lr.ph118.prol

.lr.ph118.prol:                                   ; preds = %.lr.ph118.preheader227
  %37 = getelementptr inbounds [100001 x i8], ptr @str, i64 0, i64 %indvars.iv156.ph
  %38 = load i8, ptr %37, align 16, !tbaa !12
  %sext.prol = shl nuw i64 %indvars.iv156.ph, 33
  %39 = ashr exact i64 %sext.prol, 32
  %40 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %39
  store i8 %38, ptr %40, align 16, !tbaa !12
  %indvars.iv156.tr.prol = trunc nuw nsw i64 %indvars.iv156.ph to i32
  %41 = shl nuw i32 %indvars.iv156.tr.prol, 1
  %42 = or disjoint i32 %41, 1
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %43
  store i8 35, ptr %44, align 1, !tbaa !12
  %indvars.iv.next157.prol = or disjoint i64 %indvars.iv156.ph, 1
  br label %.lr.ph118.prol.loopexit

.lr.ph118.prol.loopexit:                          ; preds = %.lr.ph118.prol, %.lr.ph118.preheader227
  %indvars.iv156.unr = phi i64 [ %indvars.iv156.ph, %.lr.ph118.preheader227 ], [ %indvars.iv.next157.prol, %.lr.ph118.prol ]
  %45 = add nsw i64 %wide.trip.count159, -1
  %46 = icmp eq i64 %indvars.iv156.ph, %45
  br i1 %46, label %._crit_edge119, label %.lr.ph118

vector.scevcheck:                                 ; preds = %.lr.ph118.preheader
  %47 = add nsw i64 %wide.trip.count159, -1
  %48 = and i64 %47, -3221225472
  %49 = icmp ne i64 %48, 0
  %mul.result205 = shl nsw i64 %47, 1
  %50 = getelementptr i8, ptr @buf, i64 %mul.result205
  %51 = icmp ult ptr %50, @buf
  %mul.result208 = shl nsw i64 %47, 1
  %52 = getelementptr i8, ptr getelementptr inbounds (i8, ptr @buf, i64 1), i64 %mul.result208
  %53 = icmp ult ptr %52, getelementptr inbounds (i8, ptr @buf, i64 1)
  %54 = or i1 %49, %51
  %55 = or i1 %54, %53
  br i1 %55, label %.lr.ph118.preheader227, label %vector.ph213

vector.ph213:                                     ; preds = %vector.scevcheck
  %n.vec215 = and i64 %wide.trip.count159, 2147483632
  br label %vector.body217

vector.body217:                                   ; preds = %vector.body217, %vector.ph213
  %index218 = phi i64 [ 0, %vector.ph213 ], [ %index.next222, %vector.body217 ]
  %56 = trunc i64 %index218 to i32
  %57 = getelementptr inbounds [100001 x i8], ptr @str, i64 0, i64 %index218
  %58 = getelementptr inbounds i8, ptr %57, i64 8
  %wide.load219 = load <8 x i8>, ptr %57, align 16, !tbaa !12
  %wide.load220 = load <8 x i8>, ptr %58, align 8, !tbaa !12
  %59 = shl i32 %56, 1
  %60 = shl i32 %56, 1
  %61 = or disjoint i32 %59, 1
  %62 = or disjoint i32 %60, 17
  %63 = sext i32 %61 to i64
  %64 = sext i32 %62 to i64
  %gep = getelementptr [200002 x i8], ptr getelementptr (i8, ptr @buf, i64 -1), i64 0, i64 %63
  %gep242 = getelementptr [200002 x i8], ptr getelementptr (i8, ptr @buf, i64 -1), i64 0, i64 %64
  %interleaved.vec = shufflevector <8 x i8> %wide.load219, <8 x i8> <i8 35, i8 35, i8 35, i8 35, i8 35, i8 35, i8 35, i8 35>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
  store <16 x i8> %interleaved.vec, ptr %gep, align 2, !tbaa !12
  %interleaved.vec221 = shufflevector <8 x i8> %wide.load220, <8 x i8> <i8 35, i8 35, i8 35, i8 35, i8 35, i8 35, i8 35, i8 35>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
  store <16 x i8> %interleaved.vec221, ptr %gep242, align 2, !tbaa !12
  %index.next222 = add nuw i64 %index218, 16
  %65 = icmp eq i64 %index.next222, %n.vec215
  br i1 %65, label %middle.block210, label %vector.body217, !llvm.loop !13

middle.block210:                                  ; preds = %vector.body217
  %cmp.n = icmp eq i64 %n.vec215, %wide.trip.count159
  br i1 %cmp.n, label %._crit_edge119, label %.lr.ph118.preheader227

._crit_edge:                                      ; preds = %75, %.preheader96
  %.lcssa100 = phi i32 [ %storemerge, %.preheader96 ], [ %79, %75 ]
  call void @_Z3FFTP7complexii(ptr noundef nonnull @x, i32 noundef %.lcssa100, i32 noundef 1)
  %66 = load i32, ptr @len, align 4, !tbaa !5
  %67 = icmp sgt i32 %66, 0
  br i1 %67, label %.lr.ph108, label %._crit_edge109

.lr.ph105:                                        ; preds = %.preheader96, %75
  %indvars.iv144 = phi i64 [ %indvars.iv.next145, %75 ], [ 0, %.preheader96 ]
  %68 = load i32, ptr @n, align 4, !tbaa !5
  %69 = sext i32 %68 to i64
  %70 = icmp slt i64 %indvars.iv144, %69
  br i1 %70, label %71, label %75

71:                                               ; preds = %.lr.ph105
  %72 = getelementptr inbounds [100001 x i8], ptr @str, i64 0, i64 %indvars.iv144
  %73 = load i8, ptr %72, align 1, !tbaa !12
  %74 = icmp eq i8 %73, 97
  br label %75

75:                                               ; preds = %71, %.lr.ph105
  %76 = phi i1 [ false, %.lr.ph105 ], [ %74, %71 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %1) #10
  %77 = uitofp i1 %76 to double
  call void @_ZN7complexC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %1, double noundef %77, double noundef %77)
  %78 = getelementptr inbounds [262144 x %struct.complex], ptr @x, i64 0, i64 %indvars.iv144
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %78, ptr noundef nonnull align 8 dereferenceable(16) %1, i64 16, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %1) #10
  %indvars.iv.next145 = add nuw nsw i64 %indvars.iv144, 1
  %79 = load i32, ptr @len, align 4, !tbaa !5
  %80 = sext i32 %79 to i64
  %81 = icmp slt i64 %indvars.iv.next145, %80
  br i1 %81, label %.lr.ph105, label %._crit_edge, !llvm.loop !19

._crit_edge109:                                   ; preds = %.lr.ph108, %._crit_edge
  %.lcssa101 = phi i32 [ %66, %._crit_edge ], [ %134, %.lr.ph108 ]
  call void @_Z3FFTP7complexii(ptr noundef nonnull @y, i32 noundef %.lcssa101, i32 noundef -1)
  %82 = load i32, ptr @n, align 4, !tbaa !5
  %83 = shl i32 %82, 1
  %84 = add i32 %83, -2
  %.not87111 = icmp slt i32 %84, 0
  br i1 %.not87111, label %._crit_edge115, label %.lr.ph114.preheader

.lr.ph114.preheader:                              ; preds = %._crit_edge109
  %85 = add i32 %83, -1
  %wide.trip.count153 = zext i32 %85 to i64
  %min.iters.check = icmp ult i32 %85, 5
  br i1 %min.iters.check, label %.lr.ph114.preheader230, label %vector.ph

.lr.ph114.preheader230:                           ; preds = %vector.body, %.lr.ph114.preheader
  %indvars.iv150.ph = phi i64 [ 0, %.lr.ph114.preheader ], [ %n.vec, %vector.body ]
  br label %.lr.ph114

vector.ph:                                        ; preds = %.lr.ph114.preheader
  %n.vec = and i64 %wide.trip.count153, 4294967292
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %86 = or disjoint i64 %index, 1
  %87 = or disjoint i64 %index, 2
  %88 = or disjoint i64 %index, 3
  %89 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %index
  %90 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %86
  %91 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %87
  %92 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %88
  %93 = load double, ptr %89, align 16, !tbaa !20
  %94 = load double, ptr %90, align 16, !tbaa !20
  %95 = insertelement <2 x double> poison, double %93, i64 0
  %96 = insertelement <2 x double> %95, double %94, i64 1
  %97 = load double, ptr %91, align 16, !tbaa !20
  %98 = load double, ptr %92, align 16, !tbaa !20
  %99 = insertelement <2 x double> poison, double %97, i64 0
  %100 = insertelement <2 x double> %99, double %98, i64 1
  %101 = fadd <2 x double> %96, <double 5.000000e-01, double 5.000000e-01>
  %102 = fadd <2 x double> %100, <double 5.000000e-01, double 5.000000e-01>
  %103 = fptosi <2 x double> %101 to <2 x i32>
  %104 = fptosi <2 x double> %102 to <2 x i32>
  %105 = getelementptr inbounds [200002 x i32], ptr @f, i64 0, i64 %index
  %106 = getelementptr inbounds i8, ptr %105, i64 8
  %wide.load = load <2 x i32>, ptr %105, align 16, !tbaa !5
  %wide.load191 = load <2 x i32>, ptr %106, align 8, !tbaa !5
  %107 = add nsw <2 x i32> %wide.load, %103
  %108 = add nsw <2 x i32> %wide.load191, %104
  store <2 x i32> %107, ptr %105, align 16, !tbaa !5
  store <2 x i32> %108, ptr %106, align 8, !tbaa !5
  %index.next = add nuw i64 %index, 4
  %109 = icmp eq i64 %index.next, %n.vec
  br i1 %109, label %.lr.ph114.preheader230, label %vector.body, !llvm.loop !22

.lr.ph108:                                        ; preds = %._crit_edge, %.lr.ph108
  %indvars.iv147 = phi i64 [ %indvars.iv.next148, %.lr.ph108 ], [ 0, %._crit_edge ]
  %110 = phi i32 [ %134, %.lr.ph108 ], [ %66, %._crit_edge ]
  %111 = trunc nuw nsw i64 %indvars.iv147 to i32
  %112 = sub nsw i32 %110, %111
  %113 = add nsw i32 %110, -1
  %114 = and i32 %112, %113
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #10
  %115 = getelementptr inbounds [262144 x %struct.complex], ptr @x, i64 0, i64 %indvars.iv147
  %116 = call { double, double } @_ZmlRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %115, ptr noundef nonnull align 8 dereferenceable(16) %115)
  %117 = extractvalue { double, double } %116, 0
  store double %117, ptr %3, align 8
  %118 = extractvalue { double, double } %116, 1
  store double %118, ptr %32, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #10
  %119 = sext i32 %114 to i64
  %120 = getelementptr inbounds [262144 x %struct.complex], ptr @x, i64 0, i64 %119
  %121 = call { double, double } @_ZmlRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %120, ptr noundef nonnull align 8 dereferenceable(16) %120)
  %122 = extractvalue { double, double } %121, 0
  store double %122, ptr %5, align 8
  %123 = extractvalue { double, double } %121, 1
  store double %123, ptr %33, align 8
  %124 = call { double, double } @_ZNK7complex4conjEv(ptr noundef nonnull align 8 dereferenceable(16) %5)
  %125 = extractvalue { double, double } %124, 0
  store double %125, ptr %4, align 8
  %126 = extractvalue { double, double } %124, 1
  store double %126, ptr %34, align 8
  %127 = call { double, double } @_ZmiRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) %4)
  %128 = extractvalue { double, double } %127, 0
  store double %128, ptr %2, align 8
  %129 = extractvalue { double, double } %127, 1
  store double %129, ptr %35, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #10
  call void @_ZN7complexC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %6, double noundef 0.000000e+00, double noundef -2.500000e-01)
  %130 = call { double, double } @_ZmlRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %2, ptr noundef nonnull align 8 dereferenceable(16) %6)
  %131 = extractvalue { double, double } %130, 0
  %132 = extractvalue { double, double } %130, 1
  %133 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %indvars.iv147
  store double %131, ptr %133, align 16, !tbaa !17
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %133, i64 8
  store double %132, ptr %.sroa.4.0..sroa_idx, align 8, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #10
  %indvars.iv.next148 = add nuw nsw i64 %indvars.iv147, 1
  %134 = load i32, ptr @len, align 4, !tbaa !5
  %135 = sext i32 %134 to i64
  %136 = icmp slt i64 %indvars.iv.next148, %135
  br i1 %136, label %.lr.ph108, label %._crit_edge109, !llvm.loop !23

._crit_edge115:                                   ; preds = %.lr.ph114, %._crit_edge109
  %137 = load i32, ptr @len, align 4, !tbaa !5
  %138 = icmp sgt i32 %137, 0
  br i1 %138, label %.lr.ph105.1, label %._crit_edge.1

.lr.ph105.1:                                      ; preds = %._crit_edge115, %146
  %indvars.iv144.1 = phi i64 [ %indvars.iv.next145.1, %146 ], [ 0, %._crit_edge115 ]
  %139 = load i32, ptr @n, align 4, !tbaa !5
  %140 = sext i32 %139 to i64
  %141 = icmp slt i64 %indvars.iv144.1, %140
  br i1 %141, label %142, label %146

142:                                              ; preds = %.lr.ph105.1
  %143 = getelementptr inbounds [100001 x i8], ptr @str, i64 0, i64 %indvars.iv144.1
  %144 = load i8, ptr %143, align 1, !tbaa !12
  %145 = icmp eq i8 %144, 98
  br label %146

146:                                              ; preds = %142, %.lr.ph105.1
  %147 = phi i1 [ false, %.lr.ph105.1 ], [ %145, %142 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %1) #10
  %148 = uitofp i1 %147 to double
  call void @_ZN7complexC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %1, double noundef %148, double noundef %148)
  %149 = getelementptr inbounds [262144 x %struct.complex], ptr @x, i64 0, i64 %indvars.iv144.1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %149, ptr noundef nonnull align 8 dereferenceable(16) %1, i64 16, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %1) #10
  %indvars.iv.next145.1 = add nuw nsw i64 %indvars.iv144.1, 1
  %150 = load i32, ptr @len, align 4, !tbaa !5
  %151 = sext i32 %150 to i64
  %152 = icmp slt i64 %indvars.iv.next145.1, %151
  br i1 %152, label %.lr.ph105.1, label %._crit_edge.1, !llvm.loop !19

._crit_edge.1:                                    ; preds = %146, %._crit_edge115
  %.lcssa100.1 = phi i32 [ %137, %._crit_edge115 ], [ %150, %146 ]
  call void @_Z3FFTP7complexii(ptr noundef nonnull @x, i32 noundef %.lcssa100.1, i32 noundef 1)
  %153 = load i32, ptr @len, align 4, !tbaa !5
  %154 = icmp sgt i32 %153, 0
  br i1 %154, label %.lr.ph108.1, label %._crit_edge109.1

.lr.ph108.1:                                      ; preds = %._crit_edge.1, %.lr.ph108.1
  %indvars.iv147.1 = phi i64 [ %indvars.iv.next148.1, %.lr.ph108.1 ], [ 0, %._crit_edge.1 ]
  %155 = phi i32 [ %179, %.lr.ph108.1 ], [ %153, %._crit_edge.1 ]
  %156 = trunc nuw nsw i64 %indvars.iv147.1 to i32
  %157 = sub nsw i32 %155, %156
  %158 = add nsw i32 %155, -1
  %159 = and i32 %157, %158
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #10
  %160 = getelementptr inbounds [262144 x %struct.complex], ptr @x, i64 0, i64 %indvars.iv147.1
  %161 = call { double, double } @_ZmlRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %160, ptr noundef nonnull align 8 dereferenceable(16) %160)
  %162 = extractvalue { double, double } %161, 0
  store double %162, ptr %3, align 8
  %163 = extractvalue { double, double } %161, 1
  store double %163, ptr %32, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #10
  %164 = sext i32 %159 to i64
  %165 = getelementptr inbounds [262144 x %struct.complex], ptr @x, i64 0, i64 %164
  %166 = call { double, double } @_ZmlRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %165, ptr noundef nonnull align 8 dereferenceable(16) %165)
  %167 = extractvalue { double, double } %166, 0
  store double %167, ptr %5, align 8
  %168 = extractvalue { double, double } %166, 1
  store double %168, ptr %33, align 8
  %169 = call { double, double } @_ZNK7complex4conjEv(ptr noundef nonnull align 8 dereferenceable(16) %5)
  %170 = extractvalue { double, double } %169, 0
  store double %170, ptr %4, align 8
  %171 = extractvalue { double, double } %169, 1
  store double %171, ptr %34, align 8
  %172 = call { double, double } @_ZmiRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) %4)
  %173 = extractvalue { double, double } %172, 0
  store double %173, ptr %2, align 8
  %174 = extractvalue { double, double } %172, 1
  store double %174, ptr %35, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #10
  call void @_ZN7complexC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %6, double noundef 0.000000e+00, double noundef -2.500000e-01)
  %175 = call { double, double } @_ZmlRK7complexS1_(ptr noundef nonnull align 8 dereferenceable(16) %2, ptr noundef nonnull align 8 dereferenceable(16) %6)
  %176 = extractvalue { double, double } %175, 0
  %177 = extractvalue { double, double } %175, 1
  %178 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %indvars.iv147.1
  store double %176, ptr %178, align 16, !tbaa !17
  %.sroa.4.0..sroa_idx.1 = getelementptr inbounds i8, ptr %178, i64 8
  store double %177, ptr %.sroa.4.0..sroa_idx.1, align 8, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #10
  %indvars.iv.next148.1 = add nuw nsw i64 %indvars.iv147.1, 1
  %179 = load i32, ptr @len, align 4, !tbaa !5
  %180 = sext i32 %179 to i64
  %181 = icmp slt i64 %indvars.iv.next148.1, %180
  br i1 %181, label %.lr.ph108.1, label %._crit_edge109.1, !llvm.loop !23

._crit_edge109.1:                                 ; preds = %.lr.ph108.1, %._crit_edge.1
  %.lcssa101.1 = phi i32 [ %153, %._crit_edge.1 ], [ %179, %.lr.ph108.1 ]
  call void @_Z3FFTP7complexii(ptr noundef nonnull @y, i32 noundef %.lcssa101.1, i32 noundef -1)
  %182 = load i32, ptr @n, align 4, !tbaa !5
  %183 = shl i32 %182, 1
  %184 = add i32 %183, -2
  %.not87111.1 = icmp slt i32 %184, 0
  br i1 %.not87111.1, label %._crit_edge115.1, label %.lr.ph114.preheader.1

.lr.ph114.preheader.1:                            ; preds = %._crit_edge109.1
  %185 = add i32 %183, -1
  %wide.trip.count153.1 = zext i32 %185 to i64
  %min.iters.check194 = icmp ult i32 %185, 5
  br i1 %min.iters.check194, label %.lr.ph114.1.preheader, label %vector.ph195

vector.ph195:                                     ; preds = %.lr.ph114.preheader.1
  %n.vec197 = and i64 %wide.trip.count153.1, 4294967292
  br label %vector.body199

vector.body199:                                   ; preds = %vector.body199, %vector.ph195
  %index200 = phi i64 [ 0, %vector.ph195 ], [ %index.next203, %vector.body199 ]
  %186 = or disjoint i64 %index200, 1
  %187 = or disjoint i64 %index200, 2
  %188 = or disjoint i64 %index200, 3
  %189 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %index200
  %190 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %186
  %191 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %187
  %192 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %188
  %193 = load double, ptr %189, align 16, !tbaa !20
  %194 = load double, ptr %190, align 16, !tbaa !20
  %195 = insertelement <2 x double> poison, double %193, i64 0
  %196 = insertelement <2 x double> %195, double %194, i64 1
  %197 = load double, ptr %191, align 16, !tbaa !20
  %198 = load double, ptr %192, align 16, !tbaa !20
  %199 = insertelement <2 x double> poison, double %197, i64 0
  %200 = insertelement <2 x double> %199, double %198, i64 1
  %201 = fadd <2 x double> %196, <double 5.000000e-01, double 5.000000e-01>
  %202 = fadd <2 x double> %200, <double 5.000000e-01, double 5.000000e-01>
  %203 = fptosi <2 x double> %201 to <2 x i32>
  %204 = fptosi <2 x double> %202 to <2 x i32>
  %205 = getelementptr inbounds [200002 x i32], ptr @f, i64 0, i64 %index200
  %206 = getelementptr inbounds i8, ptr %205, i64 8
  %wide.load201 = load <2 x i32>, ptr %205, align 16, !tbaa !5
  %wide.load202 = load <2 x i32>, ptr %206, align 8, !tbaa !5
  %207 = add nsw <2 x i32> %wide.load201, %203
  %208 = add nsw <2 x i32> %wide.load202, %204
  store <2 x i32> %207, ptr %205, align 16, !tbaa !5
  store <2 x i32> %208, ptr %206, align 8, !tbaa !5
  %index.next203 = add nuw i64 %index200, 4
  %209 = icmp eq i64 %index.next203, %n.vec197
  br i1 %209, label %.lr.ph114.1.preheader, label %vector.body199, !llvm.loop !24

.lr.ph114.1.preheader:                            ; preds = %vector.body199, %.lr.ph114.preheader.1
  %indvars.iv150.1.ph = phi i64 [ 0, %.lr.ph114.preheader.1 ], [ %n.vec197, %vector.body199 ]
  br label %.lr.ph114.1

.lr.ph114.1:                                      ; preds = %.lr.ph114.1.preheader, %.lr.ph114.1
  %indvars.iv150.1 = phi i64 [ %indvars.iv.next151.1, %.lr.ph114.1 ], [ %indvars.iv150.1.ph, %.lr.ph114.1.preheader ]
  %210 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %indvars.iv150.1
  %211 = load double, ptr %210, align 16, !tbaa !20
  %212 = fadd double %211, 5.000000e-01
  %213 = fptosi double %212 to i32
  %214 = getelementptr inbounds [200002 x i32], ptr @f, i64 0, i64 %indvars.iv150.1
  %215 = load i32, ptr %214, align 4, !tbaa !5
  %216 = add nsw i32 %215, %213
  store i32 %216, ptr %214, align 4, !tbaa !5
  %indvars.iv.next151.1 = add nuw nsw i64 %indvars.iv150.1, 1
  %exitcond154.1.not = icmp eq i64 %indvars.iv.next151.1, %wide.trip.count153.1
  br i1 %exitcond154.1.not, label %._crit_edge115.1, label %.lr.ph114.1, !llvm.loop !25

._crit_edge115.1:                                 ; preds = %.lr.ph114.1, %._crit_edge109.1
  %217 = icmp sgt i32 %182, 0
  br i1 %217, label %.lr.ph118.preheader, label %._crit_edge119

.lr.ph114:                                        ; preds = %.lr.ph114.preheader230, %.lr.ph114
  %indvars.iv150 = phi i64 [ %indvars.iv.next151, %.lr.ph114 ], [ %indvars.iv150.ph, %.lr.ph114.preheader230 ]
  %218 = getelementptr inbounds [262144 x %struct.complex], ptr @y, i64 0, i64 %indvars.iv150
  %219 = load double, ptr %218, align 16, !tbaa !20
  %220 = fadd double %219, 5.000000e-01
  %221 = fptosi double %220 to i32
  %222 = getelementptr inbounds [200002 x i32], ptr @f, i64 0, i64 %indvars.iv150
  %223 = load i32, ptr %222, align 4, !tbaa !5
  %224 = add nsw i32 %223, %221
  store i32 %224, ptr %222, align 4, !tbaa !5
  %indvars.iv.next151 = add nuw nsw i64 %indvars.iv150, 1
  %exitcond154.not = icmp eq i64 %indvars.iv.next151, %wide.trip.count153
  br i1 %exitcond154.not, label %._crit_edge115, label %.lr.ph114, !llvm.loop !26

._crit_edge119:                                   ; preds = %.lr.ph118.prol.loopexit, %.lr.ph118, %middle.block210, %._crit_edge115.1
  %225 = add i32 %183, -1
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %226
  store i8 0, ptr %227, align 1, !tbaa !12
  br i1 %.not87111.1, label %.preheader.thread, label %.lr.ph132

.preheader.thread:                                ; preds = %._crit_edge119
  %ans.promoted175 = load i32, ptr @ans, align 4, !tbaa !5
  br label %277

.lr.ph118:                                        ; preds = %.lr.ph118.prol.loopexit, %.lr.ph118
  %indvars.iv156 = phi i64 [ %indvars.iv.next157.1, %.lr.ph118 ], [ %indvars.iv156.unr, %.lr.ph118.prol.loopexit ]
  %228 = getelementptr inbounds [100001 x i8], ptr @str, i64 0, i64 %indvars.iv156
  %229 = load i8, ptr %228, align 1, !tbaa !12
  %sext = shl i64 %indvars.iv156, 33
  %230 = ashr exact i64 %sext, 32
  %231 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %230
  store i8 %229, ptr %231, align 2, !tbaa !12
  %indvars.iv156.tr = trunc i64 %indvars.iv156 to i32
  %232 = shl i32 %indvars.iv156.tr, 1
  %233 = or disjoint i32 %232, 1
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %234
  store i8 35, ptr %235, align 1, !tbaa !12
  %indvars.iv.next157 = add nuw nsw i64 %indvars.iv156, 1
  %236 = getelementptr inbounds [100001 x i8], ptr @str, i64 0, i64 %indvars.iv.next157
  %237 = load i8, ptr %236, align 1, !tbaa !12
  %sext.1 = shl i64 %indvars.iv.next157, 33
  %238 = ashr exact i64 %sext.1, 32
  %239 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %238
  store i8 %237, ptr %239, align 2, !tbaa !12
  %indvars.iv156.tr.1 = trunc i64 %indvars.iv.next157 to i32
  %240 = shl i32 %indvars.iv156.tr.1, 1
  %241 = or disjoint i32 %240, 1
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %242
  store i8 35, ptr %243, align 1, !tbaa !12
  %indvars.iv.next157.1 = add nuw nsw i64 %indvars.iv156, 2
  %exitcond160.not.1 = icmp eq i64 %indvars.iv.next157.1, %wide.trip.count159
  br i1 %exitcond160.not.1, label %._crit_edge119, label %.lr.ph118, !llvm.loop !27

.preheader:                                       ; preds = %.critedge
  %ans.promoted = load i32, ptr @ans, align 4, !tbaa !5
  %.not83135 = icmp slt i32 %275, 0
  br i1 %.not83135, label %277, label %.lr.ph138.preheader

.lr.ph138.preheader:                              ; preds = %.preheader
  %244 = add i32 %274, -1
  %wide.trip.count172 = zext nneg i32 %244 to i64
  br label %.lr.ph138

.lr.ph132:                                        ; preds = %._crit_edge119, %.critedge
  %indvars.iv166 = phi i64 [ %indvars.iv.next167, %.critedge ], [ 0, %._crit_edge119 ]
  %indvars.iv163 = phi i32 [ %indvars.iv.next164, %.critedge ], [ 1, %._crit_edge119 ]
  %.061130 = phi i32 [ %spec.select90, %.critedge ], [ 0, %._crit_edge119 ]
  %.062129 = phi i32 [ %spec.select89, %.critedge ], [ 0, %._crit_edge119 ]
  %245 = sext i32 %.062129 to i64
  %246 = icmp slt i64 %indvars.iv166, %245
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #10
  br i1 %246, label %247, label %256

247:                                              ; preds = %.lr.ph132
  %248 = trunc nuw nsw i64 %indvars.iv166 to i32
  %249 = sub nsw i32 %.062129, %248
  store i32 %249, ptr %7, align 4, !tbaa !5
  %250 = shl i32 %.061130, 1
  %251 = sext i32 %250 to i64
  %252 = sub nsw i64 %251, %indvars.iv166
  %253 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %252
  %254 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %253)
  %255 = load i32, ptr %254, align 4, !tbaa !5
  br label %256

256:                                              ; preds = %.lr.ph132, %247
  %257 = phi i32 [ %255, %247 ], [ 0, %.lr.ph132 ]
  %258 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %indvars.iv166
  store i32 %257, ptr %258, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #10
  %259 = sext i32 %257 to i64
  %.not86121 = icmp slt i64 %indvars.iv166, %259
  br i1 %.not86121, label %.critedge, label %.lr.ph123

.lr.ph123:                                        ; preds = %256, %267
  %indvars.iv161 = phi i64 [ %indvars.iv.next162, %267 ], [ %259, %256 ]
  %260 = sub nsw i64 %indvars.iv166, %indvars.iv161
  %261 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %260
  %262 = load i8, ptr %261, align 1, !tbaa !12
  %263 = add nsw i64 %indvars.iv161, %indvars.iv166
  %264 = getelementptr inbounds [200002 x i8], ptr @buf, i64 0, i64 %263
  %265 = load i8, ptr %264, align 1, !tbaa !12
  %266 = icmp eq i8 %262, %265
  br i1 %266, label %267, label %.critedge.loopexit.split.loop.exit182

267:                                              ; preds = %.lr.ph123
  %indvars.iv.next162 = add nsw i64 %indvars.iv161, 1
  %268 = trunc nsw i64 %indvars.iv.next162 to i32
  store i32 %268, ptr %258, align 4, !tbaa !5
  %.not86.not = icmp slt i64 %indvars.iv161, %indvars.iv166
  br i1 %.not86.not, label %.lr.ph123, label %.critedge, !llvm.loop !28

.critedge.loopexit.split.loop.exit182:            ; preds = %.lr.ph123
  %269 = trunc nsw i64 %indvars.iv161 to i32
  br label %.critedge

.critedge:                                        ; preds = %267, %.critedge.loopexit.split.loop.exit182, %256
  %.lcssa = phi i32 [ %257, %256 ], [ %269, %.critedge.loopexit.split.loop.exit182 ], [ %indvars.iv163, %267 ]
  %270 = trunc nuw nsw i64 %indvars.iv166 to i32
  %271 = add nsw i32 %.lcssa, %270
  %272 = icmp slt i32 %.062129, %271
  %spec.select89 = call i32 @llvm.smax.i32(i32 %.062129, i32 %271)
  %spec.select90 = select i1 %272, i32 %270, i32 %.061130
  %indvars.iv.next167 = add nuw nsw i64 %indvars.iv166, 1
  %273 = load i32, ptr @n, align 4, !tbaa !5
  %274 = shl i32 %273, 1
  %275 = add i32 %274, -2
  %276 = sext i32 %275 to i64
  %.not82.not = icmp slt i64 %indvars.iv166, %276
  %indvars.iv.next164 = add nuw i32 %indvars.iv163, 1
  br i1 %.not82.not, label %.lr.ph132, label %.preheader, !llvm.loop !29

._crit_edge139:                                   ; preds = %.lr.ph138
  store i32 %storemerge85, ptr @ans, align 4, !tbaa !5
  br label %277

277:                                              ; preds = %.preheader.thread, %._crit_edge139, %.preheader
  %278 = phi i32 [ %storemerge85, %._crit_edge139 ], [ %ans.promoted, %.preheader ], [ %ans.promoted175, %.preheader.thread ]
  %279 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef %278)
  ret i32 0

.lr.ph138:                                        ; preds = %.lr.ph138.preheader, %.lr.ph138
  %indvars.iv169 = phi i64 [ 0, %.lr.ph138.preheader ], [ %indvars.iv.next170, %.lr.ph138 ]
  %storemerge85134136 = phi i32 [ %ans.promoted, %.lr.ph138.preheader ], [ %storemerge85, %.lr.ph138 ]
  %280 = getelementptr inbounds [200002 x i32], ptr @f, i64 0, i64 %indvars.iv169
  %281 = load i32, ptr %280, align 4, !tbaa !5
  %282 = add nsw i32 %281, 1
  %283 = ashr i32 %282, 1
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds [100001 x i32], ptr @pw, i64 0, i64 %284
  %286 = load i32, ptr %285, align 4, !tbaa !5
  %287 = add nsw i32 %286, -1
  %288 = add nsw i32 %287, %storemerge85134136
  %289 = icmp sgt i32 %288, 1000000006
  %290 = add nsw i32 %288, -1000000007
  %spec.select91 = select i1 %289, i32 %290, i32 %288
  %291 = getelementptr inbounds [200002 x i32], ptr @h, i64 0, i64 %indvars.iv169
  %292 = load i32, ptr %291, align 4, !tbaa !5
  %293 = trunc nuw nsw i64 %indvars.iv169 to i32
  %294 = or i32 %293, -2
  %.neg = sub i32 %292, %294
  %295 = sub i32 %293, %292
  %296 = or i32 %295, -2
  %297 = add i32 %.neg, %296
  %298 = ashr i32 %297, 1
  %299 = sub nsw i32 %spec.select91, %298
  %300 = icmp slt i32 %299, 0
  %301 = add nsw i32 %299, 1000000007
  %storemerge85 = select i1 %300, i32 %301, i32 %299
  %indvars.iv.next170 = add nuw nsw i64 %indvars.iv169, 1
  %exitcond173.not = icmp eq i64 %indvars.iv.next170, %wide.trip.count172
  br i1 %exitcond173.not, label %._crit_edge139, label %.lr.ph138, !llvm.loop !30
}

; Function Attrs: nofree nounwind
declare noundef i32 @__isoc99_scanf(ptr nocapture noundef readonly, ...) local_unnamed_addr #5

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK7complex4conjEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #7

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #5

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

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 nocallback nofree nosync 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { mustprogress norecurse 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 #5 = { nofree nounwind "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 #6 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 #7 = { inlinehint 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 #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { 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}
!12 = !{!7, !7, i64 0}
!13 = distinct !{!13, !10, !14, !15}
!14 = !{!"llvm.loop.isvectorized", i32 1}
!15 = !{!"llvm.loop.unroll.runtime.disable"}
!16 = !{i64 0, i64 8, !17, i64 8, i64 8, !17}
!17 = !{!18, !18, i64 0}
!18 = !{!"double", !7, i64 0}
!19 = distinct !{!19, !10}
!20 = !{!21, !18, i64 0}
!21 = !{!"_ZTS7complex", !18, i64 0, !18, i64 8}
!22 = distinct !{!22, !10, !14, !15}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10, !14, !15}
!25 = distinct !{!25, !10, !15, !14}
!26 = distinct !{!26, !10, !15, !14}
!27 = distinct !{!27, !10, !14}
!28 = distinct !{!28, !10}
!29 = distinct !{!29, !10}
!30 = distinct !{!30, !10}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass