; LLVM IR from ox-vgg/vise :: src/search_engine/relja_retrival/external/KMCode_relja/descriptor/EdgeDetector._351d3c76 (Z11displayCircP12ImageContentP16CornerDescriptorf)

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

%class.ImageContent = type { i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4rintf(float noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK6Corner14getCornerScaleEv(ptr noundef nonnull align 4 dereferenceable(88)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK6Corner4getXEv(ptr noundef nonnull align 4 dereferenceable(88)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK6Corner4getYEv(ptr noundef nonnull align 4 dereferenceable(88)) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_Z11displayCircP12ImageContentP16CornerDescriptorf(ptr noundef %0, ptr noundef %1, float noundef %2) #3 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca float, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store float %2, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  %15 = load ptr, ptr %5, align 8, !tbaa !5
  %16 = call noundef float @_ZNK6Corner4getXEv(ptr noundef nonnull align 4 dereferenceable(88) %15)
  %17 = fptosi float %16 to i32
  store i32 %17, ptr %7, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  %18 = load ptr, ptr %5, align 8, !tbaa !5
  %19 = call noundef float @_ZNK6Corner4getYEv(ptr noundef nonnull align 4 dereferenceable(88) %18)
  %20 = fptosi float %19 to i32
  store i32 %20, ptr %8, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  store i32 -2, ptr %9, align 4, !tbaa !11
  br label %21

21:                                               ; preds = %92, %3
  %22 = load i32, ptr %9, align 4, !tbaa !11
  %23 = icmp sle i32 %22, 2
  br i1 %23, label %25, label %24

24:                                               ; preds = %21
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  br label %95

25:                                               ; preds = %21
  %26 = load i32, ptr %8, align 4, !tbaa !11
  %27 = icmp sgt i32 %26, 0
  br i1 %27, label %28, label %91

28:                                               ; preds = %25
  %29 = load i32, ptr %8, align 4, !tbaa !11
  %30 = load ptr, ptr %4, align 8, !tbaa !5
  %31 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %30)
  %32 = icmp ult i32 %29, %31
  br i1 %32, label %33, label %91

33:                                               ; preds = %28
  %34 = load i32, ptr %8, align 4, !tbaa !11
  %35 = load i32, ptr %9, align 4, !tbaa !11
  %36 = add nsw i32 %34, %35
  %37 = icmp sgt i32 %36, 0
  br i1 %37, label %38, label %91

38:                                               ; preds = %33
  %39 = load i32, ptr %8, align 4, !tbaa !11
  %40 = load i32, ptr %9, align 4, !tbaa !11
  %41 = add nsw i32 %39, %40
  %42 = load ptr, ptr %4, align 8, !tbaa !5
  %43 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %42)
  %44 = icmp ult i32 %41, %43
  br i1 %44, label %45, label %91

45:                                               ; preds = %38
  %46 = load i32, ptr %7, align 4, !tbaa !11
  %47 = icmp sgt i32 %46, 0
  br i1 %47, label %48, label %91

48:                                               ; preds = %45
  %49 = load i32, ptr %7, align 4, !tbaa !11
  %50 = load ptr, ptr %4, align 8, !tbaa !5
  %51 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %50)
  %52 = icmp ult i32 %49, %51
  br i1 %52, label %53, label %91

53:                                               ; preds = %48
  %54 = load i32, ptr %7, align 4, !tbaa !11
  %55 = load i32, ptr %9, align 4, !tbaa !11
  %56 = add nsw i32 %54, %55
  %57 = icmp sgt i32 %56, 0
  br i1 %57, label %58, label %91

58:                                               ; preds = %53
  %59 = load i32, ptr %7, align 4, !tbaa !11
  %60 = load i32, ptr %9, align 4, !tbaa !11
  %61 = add nsw i32 %59, %60
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %62)
  %64 = icmp ult i32 %61, %63
  br i1 %64, label %65, label %91

65:                                               ; preds = %58
  %66 = load float, ptr %6, align 4, !tbaa !9
  %67 = load ptr, ptr %4, align 8, !tbaa !5
  %68 = getelementptr inbounds %class.ImageContent, ptr %67, i32 0, i32 4
  %69 = load ptr, ptr %68, align 8, !tbaa !13
  %70 = load i32, ptr %8, align 4, !tbaa !11
  %71 = load i32, ptr %9, align 4, !tbaa !11
  %72 = add nsw i32 %70, %71
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds ptr, ptr %69, i64 %73
  %75 = load ptr, ptr %74, align 8, !tbaa !5
  %76 = load i32, ptr %7, align 4, !tbaa !11
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds float, ptr %75, i64 %77
  store float %66, ptr %78, align 4, !tbaa !9
  %79 = load ptr, ptr %4, align 8, !tbaa !5
  %80 = getelementptr inbounds %class.ImageContent, ptr %79, i32 0, i32 4
  %81 = load ptr, ptr %80, align 8, !tbaa !13
  %82 = load i32, ptr %8, align 4, !tbaa !11
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds ptr, ptr %81, i64 %83
  %85 = load ptr, ptr %84, align 8, !tbaa !5
  %86 = load i32, ptr %7, align 4, !tbaa !11
  %87 = load i32, ptr %9, align 4, !tbaa !11
  %88 = add nsw i32 %86, %87
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds float, ptr %85, i64 %89
  store float %66, ptr %90, align 4, !tbaa !9
  br label %91

91:                                               ; preds = %65, %58, %53, %48, %45, %38, %33, %28, %25
  br label %92

92:                                               ; preds = %91
  %93 = load i32, ptr %9, align 4, !tbaa !11
  %94 = add nsw i32 %93, 1
  store i32 %94, ptr %9, align 4, !tbaa !11
  br label %21, !llvm.loop !15

95:                                               ; preds = %24
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %96 = load ptr, ptr %5, align 8, !tbaa !5
  %97 = call noundef float @_ZNK6Corner14getCornerScaleEv(ptr noundef nonnull align 4 dereferenceable(88) %96)
  %98 = call noundef float @_ZSt4rintf(float noundef %97)
  %99 = fmul float 1.000000e+00, %98
  %100 = fptosi float %99 to i32
  store i32 %100, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  %101 = load i32, ptr %10, align 4, !tbaa !11
  %102 = sub nsw i32 0, %101
  store i32 %102, ptr %11, align 4, !tbaa !11
  br label %103

103:                                              ; preds = %263, %95
  %104 = load i32, ptr %11, align 4, !tbaa !11
  %105 = load i32, ptr %10, align 4, !tbaa !11
  %106 = icmp sle i32 %104, %105
  br i1 %106, label %108, label %107

107:                                              ; preds = %103
  store i32 5, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %266

108:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 0, ptr %13, align 4, !tbaa !11
  br label %109

109:                                              ; preds = %259, %108
  %110 = load i32, ptr %13, align 4, !tbaa !11
  %111 = load i32, ptr %10, align 4, !tbaa !11
  %112 = icmp sle i32 %110, %111
  br i1 %112, label %114, label %113

113:                                              ; preds = %109
  store i32 8, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %262

114:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %115 = load i32, ptr %10, align 4, !tbaa !11
  %116 = load i32, ptr %10, align 4, !tbaa !11
  %117 = mul nsw i32 %115, %116
  %118 = load i32, ptr %11, align 4, !tbaa !11
  %119 = load i32, ptr %11, align 4, !tbaa !11
  %120 = mul nsw i32 %118, %119
  %121 = sub nsw i32 %117, %120
  %122 = sitofp i32 %121 to float
  %123 = call noundef float @_ZSt4sqrtf(float noundef %122)
  %124 = call noundef float @_ZSt4rintf(float noundef %123)
  %125 = fptosi float %124 to i32
  store i32 %125, ptr %14, align 4, !tbaa !11
  %126 = load i32, ptr %8, align 4, !tbaa !11
  %127 = load i32, ptr %14, align 4, !tbaa !11
  %128 = add nsw i32 %126, %127
  %129 = load ptr, ptr %4, align 8, !tbaa !5
  %130 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %129)
  %131 = icmp ult i32 %128, %130
  br i1 %131, label %132, label %258

132:                                              ; preds = %114
  %133 = load i32, ptr %8, align 4, !tbaa !11
  %134 = load i32, ptr %14, align 4, !tbaa !11
  %135 = add nsw i32 %133, %134
  %136 = icmp sgt i32 %135, 0
  br i1 %136, label %137, label %258

137:                                              ; preds = %132
  %138 = load i32, ptr %8, align 4, !tbaa !11
  %139 = load i32, ptr %14, align 4, !tbaa !11
  %140 = sub nsw i32 %138, %139
  %141 = icmp sgt i32 %140, 0
  br i1 %141, label %142, label %258

142:                                              ; preds = %137
  %143 = load i32, ptr %8, align 4, !tbaa !11
  %144 = load i32, ptr %14, align 4, !tbaa !11
  %145 = sub nsw i32 %143, %144
  %146 = load ptr, ptr %4, align 8, !tbaa !5
  %147 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %146)
  %148 = icmp ult i32 %145, %147
  br i1 %148, label %149, label %258

149:                                              ; preds = %142
  %150 = load i32, ptr %8, align 4, !tbaa !11
  %151 = load i32, ptr %11, align 4, !tbaa !11
  %152 = add nsw i32 %150, %151
  %153 = load ptr, ptr %4, align 8, !tbaa !5
  %154 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %153)
  %155 = icmp ult i32 %152, %154
  br i1 %155, label %156, label %258

156:                                              ; preds = %149
  %157 = load i32, ptr %8, align 4, !tbaa !11
  %158 = load i32, ptr %11, align 4, !tbaa !11
  %159 = add nsw i32 %157, %158
  %160 = icmp sgt i32 %159, 0
  br i1 %160, label %161, label %258

161:                                              ; preds = %156
  %162 = load i32, ptr %7, align 4, !tbaa !11
  %163 = load i32, ptr %11, align 4, !tbaa !11
  %164 = add nsw i32 %162, %163
  %165 = load ptr, ptr %4, align 8, !tbaa !5
  %166 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %165)
  %167 = icmp ult i32 %164, %166
  br i1 %167, label %168, label %258

168:                                              ; preds = %161
  %169 = load i32, ptr %7, align 4, !tbaa !11
  %170 = load i32, ptr %11, align 4, !tbaa !11
  %171 = add nsw i32 %169, %170
  %172 = icmp sgt i32 %171, 0
  br i1 %172, label %173, label %258

173:                                              ; preds = %168
  %174 = load i32, ptr %7, align 4, !tbaa !11
  %175 = load i32, ptr %14, align 4, !tbaa !11
  %176 = add nsw i32 %174, %175
  %177 = load ptr, ptr %4, align 8, !tbaa !5
  %178 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %177)
  %179 = icmp ult i32 %176, %178
  br i1 %179, label %180, label %258

180:                                              ; preds = %173
  %181 = load i32, ptr %7, align 4, !tbaa !11
  %182 = load i32, ptr %14, align 4, !tbaa !11
  %183 = add nsw i32 %181, %182
  %184 = icmp sgt i32 %183, 0
  br i1 %184, label %185, label %258

185:                                              ; preds = %180
  %186 = load i32, ptr %7, align 4, !tbaa !11
  %187 = load i32, ptr %14, align 4, !tbaa !11
  %188 = sub nsw i32 %186, %187
  %189 = icmp sgt i32 %188, 0
  br i1 %189, label %190, label %258

190:                                              ; preds = %185
  %191 = load i32, ptr %7, align 4, !tbaa !11
  %192 = load i32, ptr %14, align 4, !tbaa !11
  %193 = sub nsw i32 %191, %192
  %194 = load ptr, ptr %4, align 8, !tbaa !5
  %195 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %194)
  %196 = icmp ult i32 %193, %195
  br i1 %196, label %197, label %258

197:                                              ; preds = %190
  %198 = load float, ptr %6, align 4, !tbaa !9
  %199 = load ptr, ptr %4, align 8, !tbaa !5
  %200 = getelementptr inbounds %class.ImageContent, ptr %199, i32 0, i32 4
  %201 = load ptr, ptr %200, align 8, !tbaa !13
  %202 = load i32, ptr %8, align 4, !tbaa !11
  %203 = load i32, ptr %14, align 4, !tbaa !11
  %204 = add nsw i32 %202, %203
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds ptr, ptr %201, i64 %205
  %207 = load ptr, ptr %206, align 8, !tbaa !5
  %208 = load i32, ptr %7, align 4, !tbaa !11
  %209 = load i32, ptr %11, align 4, !tbaa !11
  %210 = add nsw i32 %208, %209
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds float, ptr %207, i64 %211
  store float %198, ptr %212, align 4, !tbaa !9
  %213 = load float, ptr %6, align 4, !tbaa !9
  %214 = load ptr, ptr %4, align 8, !tbaa !5
  %215 = getelementptr inbounds %class.ImageContent, ptr %214, i32 0, i32 4
  %216 = load ptr, ptr %215, align 8, !tbaa !13
  %217 = load i32, ptr %8, align 4, !tbaa !11
  %218 = load i32, ptr %14, align 4, !tbaa !11
  %219 = sub nsw i32 %217, %218
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds ptr, ptr %216, i64 %220
  %222 = load ptr, ptr %221, align 8, !tbaa !5
  %223 = load i32, ptr %7, align 4, !tbaa !11
  %224 = load i32, ptr %11, align 4, !tbaa !11
  %225 = add nsw i32 %223, %224
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds float, ptr %222, i64 %226
  store float %213, ptr %227, align 4, !tbaa !9
  %228 = load float, ptr %6, align 4, !tbaa !9
  %229 = load ptr, ptr %4, align 8, !tbaa !5
  %230 = getelementptr inbounds %class.ImageContent, ptr %229, i32 0, i32 4
  %231 = load ptr, ptr %230, align 8, !tbaa !13
  %232 = load i32, ptr %8, align 4, !tbaa !11
  %233 = load i32, ptr %11, align 4, !tbaa !11
  %234 = add nsw i32 %232, %233
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds ptr, ptr %231, i64 %235
  %237 = load ptr, ptr %236, align 8, !tbaa !5
  %238 = load i32, ptr %7, align 4, !tbaa !11
  %239 = load i32, ptr %14, align 4, !tbaa !11
  %240 = add nsw i32 %238, %239
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds float, ptr %237, i64 %241
  store float %228, ptr %242, align 4, !tbaa !9
  %243 = load float, ptr %6, align 4, !tbaa !9
  %244 = load ptr, ptr %4, align 8, !tbaa !5
  %245 = getelementptr inbounds %class.ImageContent, ptr %244, i32 0, i32 4
  %246 = load ptr, ptr %245, align 8, !tbaa !13
  %247 = load i32, ptr %8, align 4, !tbaa !11
  %248 = load i32, ptr %11, align 4, !tbaa !11
  %249 = add nsw i32 %247, %248
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds ptr, ptr %246, i64 %250
  %252 = load ptr, ptr %251, align 8, !tbaa !5
  %253 = load i32, ptr %7, align 4, !tbaa !11
  %254 = load i32, ptr %14, align 4, !tbaa !11
  %255 = sub nsw i32 %253, %254
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds float, ptr %252, i64 %256
  store float %243, ptr %257, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %197, %190, %185, %180, %173, %168, %161, %156, %149, %142, %137, %132, %114
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br label %259

259:                                              ; preds = %258
  %260 = load i32, ptr %13, align 4, !tbaa !11
  %261 = add nsw i32 %260, 1
  store i32 %261, ptr %13, align 4, !tbaa !11
  br label %109, !llvm.loop !17

262:                                              ; preds = %113
  br label %263

263:                                              ; preds = %262
  %264 = load i32, ptr %11, align 4, !tbaa !11
  %265 = add nsw i32 %264, 1
  store i32 %265, ptr %11, align 4, !tbaa !11
  br label %103, !llvm.loop !18

266:                                              ; preds = %107
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 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 #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !6, i64 16}
!14 = !{!"_ZTS12ImageContent", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}


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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4rintf(float noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) local_unnamed_addr #0

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK6Corner14getCornerScaleEv(ptr noundef nonnull align 4 dereferenceable(88)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK6Corner4getXEv(ptr noundef nonnull align 4 dereferenceable(88)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK6Corner4getYEv(ptr noundef nonnull align 4 dereferenceable(88)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_Z11displayCircP12ImageContentP16CornerDescriptorf(ptr noundef %0, ptr noundef nonnull %1, float noundef %2) local_unnamed_addr #1 {
  %4 = tail call noundef float @_ZNK6Corner4getXEv(ptr noundef nonnull align 4 dereferenceable(88) %1)
  %5 = fptosi float %4 to i32
  %.fr123 = freeze i32 %5
  %6 = tail call noundef float @_ZNK6Corner4getYEv(ptr noundef nonnull align 4 dereferenceable(88) %1)
  %7 = fptosi float %6 to i32
  %8 = icmp sgt i32 %7, 0
  %9 = getelementptr inbounds i8, ptr %0, i64 16
  %10 = zext nneg i32 %.fr123 to i64
  %11 = zext nneg i32 %7 to i64
  br i1 %8, label %.split.us, label %.split115.us

.split.us:                                        ; preds = %3
  %12 = icmp sgt i32 %.fr123, 0
  %13 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %14 = icmp ugt i32 %13, %7
  br i1 %12, label %.split.us.split.preheader, label %.split.us.split.us.preheader

.split.us.split.us.preheader:                     ; preds = %.split.us
  %15 = icmp ugt i32 %7, 2
  %or.cond = and i1 %14, %15
  br i1 %or.cond, label %16, label %.split.us.split.us.1

.split.us.split.preheader:                        ; preds = %.split.us
  br i1 %14, label %35, label %.split.us.split.1

16:                                               ; preds = %.split.us.split.us.preheader
  %17 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  br label %.split.us.split.us.1

.split.us.split.us.1:                             ; preds = %16, %.split.us.split.us.preheader
  %18 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %19 = icmp ugt i32 %18, %7
  %20 = icmp ne i32 %7, 1
  %or.cond.1 = and i1 %19, %20
  br i1 %or.cond.1, label %21, label %.split.us.split.us.2

21:                                               ; preds = %.split.us.split.us.1
  %22 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  br label %.split.us.split.us.2

.split.us.split.us.2:                             ; preds = %21, %.split.us.split.us.1
  %23 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %24 = icmp ugt i32 %23, %7
  br i1 %24, label %25, label %.split.us.split.us.3

25:                                               ; preds = %.split.us.split.us.2
  %26 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  br label %.split.us.split.us.3

.split.us.split.us.3:                             ; preds = %25, %.split.us.split.us.2
  %27 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %28 = icmp ugt i32 %27, %7
  br i1 %28, label %29, label %.split.us.split.us.4

29:                                               ; preds = %.split.us.split.us.3
  %30 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  br label %.split.us.split.us.4

.split.us.split.us.4:                             ; preds = %29, %.split.us.split.us.3
  %31 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %32 = icmp ugt i32 %31, %7
  br i1 %32, label %33, label %.split115.us

33:                                               ; preds = %.split.us.split.us.4
  %34 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  br label %.split115.us

35:                                               ; preds = %.split.us.split.preheader
  %36 = add nsw i32 %7, -2
  %37 = icmp ugt i32 %7, 2
  br i1 %37, label %38, label %.split.us.split.1

38:                                               ; preds = %35
  %39 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %40 = icmp ult i32 %36, %39
  br i1 %40, label %41, label %.split.us.split.1

41:                                               ; preds = %38
  %42 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %43 = icmp ugt i32 %42, %.fr123
  br i1 %43, label %44, label %.split.us.split.1

44:                                               ; preds = %41
  %45 = add nsw i32 %.fr123, -2
  %46 = icmp ugt i32 %.fr123, 2
  br i1 %46, label %47, label %.split.us.split.1

47:                                               ; preds = %44
  %48 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %49 = icmp ult i32 %45, %48
  br i1 %49, label %50, label %.split.us.split.1

50:                                               ; preds = %47
  %51 = load ptr, ptr %9, align 8, !tbaa !5
  %52 = zext nneg i32 %36 to i64
  %53 = getelementptr inbounds ptr, ptr %51, i64 %52
  %54 = load ptr, ptr %53, align 8, !tbaa !11
  %55 = getelementptr inbounds float, ptr %54, i64 %10
  store float %2, ptr %55, align 4, !tbaa !12
  %56 = getelementptr inbounds ptr, ptr %51, i64 %11
  %57 = load ptr, ptr %56, align 8, !tbaa !11
  %58 = zext nneg i32 %45 to i64
  %59 = getelementptr inbounds float, ptr %57, i64 %58
  store float %2, ptr %59, align 4, !tbaa !12
  br label %.split.us.split.1

.split.us.split.1:                                ; preds = %50, %47, %44, %41, %38, %35, %.split.us.split.preheader
  %60 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %61 = icmp ugt i32 %60, %7
  br i1 %61, label %62, label %.split.us.split.2

62:                                               ; preds = %.split.us.split.1
  %63 = add nsw i32 %7, -1
  %.not = icmp eq i32 %7, 1
  br i1 %.not, label %.split.us.split.2, label %64

64:                                               ; preds = %62
  %65 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %66 = icmp ult i32 %63, %65
  br i1 %66, label %67, label %.split.us.split.2

67:                                               ; preds = %64
  %68 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %69 = icmp ugt i32 %68, %.fr123
  br i1 %69, label %70, label %.split.us.split.2

70:                                               ; preds = %67
  %71 = add nsw i32 %.fr123, -1
  %.not131 = icmp eq i32 %.fr123, 1
  br i1 %.not131, label %.split.us.split.2, label %72

72:                                               ; preds = %70
  %73 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %74 = icmp ult i32 %71, %73
  br i1 %74, label %75, label %.split.us.split.2

75:                                               ; preds = %72
  %76 = load ptr, ptr %9, align 8, !tbaa !5
  %77 = zext nneg i32 %63 to i64
  %78 = getelementptr inbounds ptr, ptr %76, i64 %77
  %79 = load ptr, ptr %78, align 8, !tbaa !11
  %80 = getelementptr inbounds float, ptr %79, i64 %10
  store float %2, ptr %80, align 4, !tbaa !12
  %81 = getelementptr inbounds ptr, ptr %76, i64 %11
  %82 = load ptr, ptr %81, align 8, !tbaa !11
  %83 = zext nneg i32 %71 to i64
  %84 = getelementptr inbounds float, ptr %82, i64 %83
  store float %2, ptr %84, align 4, !tbaa !12
  br label %.split.us.split.2

.split.us.split.2:                                ; preds = %75, %72, %70, %67, %64, %62, %.split.us.split.1
  %85 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %86 = icmp ugt i32 %85, %7
  br i1 %86, label %87, label %.split.us.split.3

87:                                               ; preds = %.split.us.split.2
  %88 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %89 = icmp ugt i32 %88, %7
  br i1 %89, label %90, label %.split.us.split.3

90:                                               ; preds = %87
  %91 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %92 = icmp ugt i32 %91, %.fr123
  br i1 %92, label %93, label %.split.us.split.3

93:                                               ; preds = %90
  %94 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %95 = icmp ult i32 %.fr123, %94
  br i1 %95, label %96, label %.split.us.split.3

96:                                               ; preds = %93
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  %98 = getelementptr inbounds ptr, ptr %97, i64 %11
  %99 = load ptr, ptr %98, align 8, !tbaa !11
  %100 = getelementptr inbounds float, ptr %99, i64 %10
  store float %2, ptr %100, align 4, !tbaa !12
  br label %.split.us.split.3

.split.us.split.3:                                ; preds = %96, %93, %90, %87, %.split.us.split.2
  %101 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %102 = icmp ugt i32 %101, %7
  br i1 %102, label %103, label %.split.us.split.4

103:                                              ; preds = %.split.us.split.3
  %104 = add nuw nsw i32 %7, 1
  %105 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %106 = icmp ult i32 %104, %105
  br i1 %106, label %107, label %.split.us.split.4

107:                                              ; preds = %103
  %108 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %109 = icmp ugt i32 %108, %.fr123
  br i1 %109, label %110, label %.split.us.split.4

110:                                              ; preds = %107
  %111 = add nuw nsw i32 %.fr123, 1
  %112 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %113 = icmp ult i32 %111, %112
  br i1 %113, label %114, label %.split.us.split.4

114:                                              ; preds = %110
  %115 = load ptr, ptr %9, align 8, !tbaa !5
  %116 = zext nneg i32 %104 to i64
  %117 = getelementptr inbounds ptr, ptr %115, i64 %116
  %118 = load ptr, ptr %117, align 8, !tbaa !11
  %119 = getelementptr inbounds float, ptr %118, i64 %10
  store float %2, ptr %119, align 4, !tbaa !12
  %120 = getelementptr inbounds ptr, ptr %115, i64 %11
  %121 = load ptr, ptr %120, align 8, !tbaa !11
  %122 = zext nneg i32 %111 to i64
  %123 = getelementptr inbounds float, ptr %121, i64 %122
  store float %2, ptr %123, align 4, !tbaa !12
  br label %.split.us.split.4

.split.us.split.4:                                ; preds = %114, %110, %107, %103, %.split.us.split.3
  %124 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %125 = icmp ugt i32 %124, %7
  br i1 %125, label %126, label %.split115.us

126:                                              ; preds = %.split.us.split.4
  %127 = add nuw nsw i32 %7, 2
  %128 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %129 = icmp ult i32 %127, %128
  br i1 %129, label %130, label %.split115.us

130:                                              ; preds = %126
  %131 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %132 = icmp ugt i32 %131, %.fr123
  br i1 %132, label %133, label %.split115.us

133:                                              ; preds = %130
  %134 = add nuw nsw i32 %.fr123, 2
  %135 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %136 = icmp ult i32 %134, %135
  br i1 %136, label %137, label %.split115.us

137:                                              ; preds = %133
  %138 = load ptr, ptr %9, align 8, !tbaa !5
  %139 = zext nneg i32 %127 to i64
  %140 = getelementptr inbounds ptr, ptr %138, i64 %139
  %141 = load ptr, ptr %140, align 8, !tbaa !11
  %142 = getelementptr inbounds float, ptr %141, i64 %10
  store float %2, ptr %142, align 4, !tbaa !12
  %143 = getelementptr inbounds ptr, ptr %138, i64 %11
  %144 = load ptr, ptr %143, align 8, !tbaa !11
  %145 = zext nneg i32 %134 to i64
  %146 = getelementptr inbounds float, ptr %144, i64 %145
  store float %2, ptr %146, align 4, !tbaa !12
  br label %.split115.us

.split115.us:                                     ; preds = %.split.us.split.4, %126, %130, %133, %137, %.split.us.split.us.4, %33, %3
  %147 = tail call noundef float @_ZNK6Corner14getCornerScaleEv(ptr noundef nonnull align 4 dereferenceable(88) %1)
  %148 = tail call noundef float @_ZSt4rintf(float noundef %147)
  %149 = fptosi float %148 to i32
  %.not119 = icmp slt i32 %149, 0
  br i1 %.not119, label %._crit_edge121, label %.preheader.preheader

.preheader.preheader:                             ; preds = %.split115.us
  %150 = sub nsw i32 0, %149
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge
  %.096120 = phi i32 [ %176, %._crit_edge ], [ %150, %.preheader.preheader ]
  %add = add nsw i32 %.096120, %149
  %sub = sub nsw i32 %149, %.096120
  %151 = mul nsw i32 %add, %sub
  %152 = sitofp i32 %151 to float
  %153 = add nsw i32 %.096120, %7
  %.fr = freeze i32 %153
  %154 = icmp sgt i32 %.fr, 0
  %155 = add nsw i32 %.096120, %.fr123
  %156 = icmp sgt i32 %155, 0
  %157 = zext nneg i32 %155 to i64
  %158 = zext nneg i32 %.fr to i64
  br i1 %154, label %.lr.ph.split, label %.lr.ph.split.us

.lr.ph.split.us:                                  ; preds = %.preheader, %174
  %.095117.us = phi i32 [ %175, %174 ], [ 0, %.preheader ]
  %159 = tail call noundef float @_ZSt4sqrtf(float noundef %152)
  %160 = tail call noundef float @_ZSt4rintf(float noundef %159)
  %161 = fptosi float %160 to i32
  %162 = add nsw i32 %161, %7
  %163 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %164 = icmp ult i32 %162, %163
  %165 = icmp sgt i32 %162, 0
  %or.cond109.us = and i1 %164, %165
  br i1 %or.cond109.us, label %166, label %174

166:                                              ; preds = %.lr.ph.split.us
  %167 = sub nsw i32 %7, %161
  %168 = icmp sgt i32 %167, 0
  br i1 %168, label %169, label %174

169:                                              ; preds = %166
  %170 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %171 = icmp ult i32 %167, %170
  br i1 %171, label %172, label %174

172:                                              ; preds = %169
  %173 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  br label %174

174:                                              ; preds = %172, %169, %166, %.lr.ph.split.us
  %175 = add nuw i32 %.095117.us, 1
  %exitcond.not = icmp eq i32 %.095117.us, %149
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph.split.us, !llvm.loop !14

._crit_edge121:                                   ; preds = %._crit_edge, %.split115.us
  ret void

._crit_edge:                                      ; preds = %174, %223
  %176 = add i32 %.096120, 1
  %exitcond129.not = icmp eq i32 %.096120, %149
  br i1 %exitcond129.not, label %._crit_edge121, label %.preheader, !llvm.loop !16

.lr.ph.split:                                     ; preds = %.preheader, %223
  %.095117 = phi i32 [ %224, %223 ], [ 0, %.preheader ]
  %177 = tail call noundef float @_ZSt4sqrtf(float noundef %152)
  %178 = tail call noundef float @_ZSt4rintf(float noundef %177)
  %179 = fptosi float %178 to i32
  %180 = add nsw i32 %179, %7
  %181 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %182 = icmp ult i32 %180, %181
  %183 = icmp sgt i32 %180, 0
  %or.cond109 = and i1 %182, %183
  br i1 %or.cond109, label %184, label %223

184:                                              ; preds = %.lr.ph.split
  %185 = sub nsw i32 %7, %179
  %186 = icmp sgt i32 %185, 0
  br i1 %186, label %187, label %223

187:                                              ; preds = %184
  %188 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %189 = icmp ult i32 %185, %188
  br i1 %189, label %190, label %223

190:                                              ; preds = %187
  %191 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %192 = icmp ult i32 %.fr, %191
  br i1 %192, label %193, label %223

193:                                              ; preds = %190
  %194 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %195 = icmp ult i32 %155, %194
  %or.cond111 = and i1 %156, %195
  br i1 %or.cond111, label %196, label %223

196:                                              ; preds = %193
  %197 = add nsw i32 %.fr123, %179
  %198 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %199 = icmp ult i32 %197, %198
  %200 = icmp sgt i32 %197, 0
  %or.cond112 = and i1 %200, %199
  br i1 %or.cond112, label %201, label %223

201:                                              ; preds = %196
  %202 = sub nsw i32 %.fr123, %179
  %203 = icmp sgt i32 %202, 0
  br i1 %203, label %204, label %223

204:                                              ; preds = %201
  %205 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %206 = icmp ult i32 %202, %205
  br i1 %206, label %207, label %223

207:                                              ; preds = %204
  %208 = load ptr, ptr %9, align 8, !tbaa !5
  %209 = zext nneg i32 %180 to i64
  %210 = getelementptr inbounds ptr, ptr %208, i64 %209
  %211 = load ptr, ptr %210, align 8, !tbaa !11
  %212 = getelementptr inbounds float, ptr %211, i64 %157
  store float %2, ptr %212, align 4, !tbaa !12
  %213 = zext nneg i32 %185 to i64
  %214 = getelementptr inbounds ptr, ptr %208, i64 %213
  %215 = load ptr, ptr %214, align 8, !tbaa !11
  %216 = getelementptr inbounds float, ptr %215, i64 %157
  store float %2, ptr %216, align 4, !tbaa !12
  %217 = getelementptr inbounds ptr, ptr %208, i64 %158
  %218 = load ptr, ptr %217, align 8, !tbaa !11
  %219 = zext nneg i32 %197 to i64
  %220 = getelementptr inbounds float, ptr %218, i64 %219
  store float %2, ptr %220, align 4, !tbaa !12
  %221 = zext nneg i32 %202 to i64
  %222 = getelementptr inbounds float, ptr %218, i64 %221
  store float %2, ptr %222, align 4, !tbaa !12
  br label %223

223:                                              ; preds = %207, %204, %201, %196, %193, %190, %187, %184, %.lr.ph.split
  %224 = add nuw i32 %.095117, 1
  %exitcond128.not = icmp eq i32 %.095117, %149
  br i1 %exitcond128.not, label %._crit_edge, label %.lr.ph.split, !llvm.loop !14
}

attributes #0 = { 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 #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

!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, !10, i64 16}
!6 = !{!"_ZTS12ImageContent", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!10, !10, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"float", !8, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass