; LLVM IR from Dovyski/opengl-demos :: src/model-md2/tga.ll (Z11LoadFileTGAPKcPPhPiS3_b)

; 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.std::basic_ifstream" = type { %"class.std::basic_istream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_istream.base" = type { ptr, i64 }
%"class.std::basic_filebuf" = type { %"class.std::basic_streambuf", %union.pthread_mutex_t, %"class.std::__basic_file", i32, %struct.__mbstate_t, %struct.__mbstate_t, %struct.__mbstate_t, ptr, i64, i8, i8, i8, i8, ptr, ptr, i8, ptr, ptr, i64, ptr, ptr }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::__basic_file" = type <{ ptr, i8, [7 x i8] }>
%struct.__mbstate_t = type { i32, %union.anon }
%union.anon = type { i32 }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::fpos" = type { i64, %struct.__mbstate_t }
%struct.tagTGAHEADER = type <{ i8, i8, i8, i16, i16, i8, i16, i16, i16, i16, i8, i8 }>
%struct.tagRGBTRIPLE = type { i8, i8, i8 }
%struct.tagBGRAQUAD = type { i8, i8, i8, i8 }

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z11LoadFileTGAPKcPPhPiS3_b(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i1 noundef zeroext %4) #0 personality ptr @__gxx_personality_v0 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i8, align 1
  %12 = alloca %"class.std::basic_ifstream", align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i64, align 8
  %24 = alloca %"class.std::fpos", align 8
  %25 = alloca ptr, align 8
  %26 = alloca i8, align 1
  %27 = alloca i16, align 2
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i8, align 1
  %31 = alloca i8, align 1
  %32 = alloca i8, align 1
  %33 = alloca i8, align 1
  %34 = alloca i8, align 1
  %35 = alloca i8, align 1
  %36 = alloca i8, align 1
  %37 = alloca i16, align 2
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i16, align 2
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  %43 = zext i1 %4 to i8
  store i8 %43, ptr %11, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 520, ptr %12) #7
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(256) %12)
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  %44 = load ptr, ptr %7, align 8, !tbaa !5
  %45 = invoke noundef i32 @_ZStorSt13_Ios_OpenmodeS_(i32 noundef 8, i32 noundef 4)
          to label %46 unwind label %55

46:                                               ; preds = %5
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256) %12, ptr noundef %44, i32 noundef %45)
          to label %47 unwind label %55

47:                                               ; preds = %46
  %48 = load ptr, ptr %12, align 8, !tbaa !11
  %49 = getelementptr i8, ptr %48, i64 -24
  %50 = load i64, ptr %49, align 8
  %51 = getelementptr inbounds i8, ptr %12, i64 %50
  %52 = invoke noundef zeroext i1 @_ZNKSt9basic_iosIcSt11char_traitsIcEE4failEv(ptr noundef nonnull align 8 dereferenceable(264) %51)
          to label %53 unwind label %55

53:                                               ; preds = %47
  br i1 %52, label %54, label %59

54:                                               ; preds = %53
  store i32 0, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %802

55:                                               ; preds = %59, %47, %46, %5
  %56 = landingpad { ptr, i32 }
          cleanup
  %57 = extractvalue { ptr, i32 } %56, 0
  store ptr %57, ptr %20, align 8
  %58 = extractvalue { ptr, i32 } %56, 1
  store i32 %58, ptr %21, align 4
  br label %804

59:                                               ; preds = %53
  %60 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSi5seekgElSt12_Ios_Seekdir(ptr noundef nonnull align 8 dereferenceable(16) %12, i64 noundef 0, i32 noundef 2)
          to label %61 unwind label %55

61:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #7
  %62 = invoke { i64, i64 } @_ZNSi5tellgEv(ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %63 unwind label %93

63:                                               ; preds = %61
  %64 = getelementptr inbounds { i64, i64 }, ptr %24, i32 0, i32 0
  %65 = extractvalue { i64, i64 } %62, 0
  store i64 %65, ptr %64, align 8
  %66 = getelementptr inbounds { i64, i64 }, ptr %24, i32 0, i32 1
  %67 = extractvalue { i64, i64 } %62, 1
  store i64 %67, ptr %66, align 8
  %68 = invoke noundef i64 @_ZNKSt4fposI11__mbstate_tEcvlEv(ptr noundef nonnull align 8 dereferenceable(16) %24)
          to label %69 unwind label %93

69:                                               ; preds = %63
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #7
  store i64 %68, ptr %23, align 8, !tbaa !13
  %70 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSi5seekgElSt12_Ios_Seekdir(ptr noundef nonnull align 8 dereferenceable(16) %12, i64 noundef 0, i32 noundef 0)
          to label %71 unwind label %97

71:                                               ; preds = %69
  %72 = load i64, ptr %23, align 8, !tbaa !13
  %73 = add nsw i64 %72, 1
  %74 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %73) #8
          to label %75 unwind label %97

75:                                               ; preds = %71
  store ptr %74, ptr %15, align 8, !tbaa !5
  %76 = load ptr, ptr %15, align 8, !tbaa !5
  %77 = load i64, ptr %23, align 8, !tbaa !13
  %78 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSi4readEPcl(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef %76, i64 noundef %77)
          to label %79 unwind label %97

79:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %80 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %80, ptr %25, align 8, !tbaa !5
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(256) %12)
          to label %81 unwind label %101

81:                                               ; preds = %79
  %82 = load ptr, ptr %25, align 8, !tbaa !5
  store ptr %82, ptr %13, align 8, !tbaa !5
  %83 = load ptr, ptr %25, align 8, !tbaa !5
  %84 = getelementptr inbounds i8, ptr %83, i64 18
  store ptr %84, ptr %25, align 8, !tbaa !5
  %85 = load ptr, ptr %9, align 8, !tbaa !5
  %86 = icmp ne ptr %85, null
  br i1 %86, label %87, label %105

87:                                               ; preds = %81
  %88 = load ptr, ptr %13, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.tagTGAHEADER, ptr %88, i32 0, i32 8
  %90 = load i16, ptr %89, align 1, !tbaa !15
  %91 = sext i16 %90 to i32
  %92 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 %91, ptr %92, align 4, !tbaa !18
  br label %105

93:                                               ; preds = %63, %61
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %20, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #7
  br label %801

97:                                               ; preds = %75, %71, %69
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %20, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %21, align 4
  br label %801

101:                                              ; preds = %122, %79
  %102 = landingpad { ptr, i32 }
          cleanup
  %103 = extractvalue { ptr, i32 } %102, 0
  store ptr %103, ptr %20, align 8
  %104 = extractvalue { ptr, i32 } %102, 1
  store i32 %104, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %801

105:                                              ; preds = %87, %81
  %106 = load ptr, ptr %10, align 8, !tbaa !5
  %107 = icmp ne ptr %106, null
  br i1 %107, label %108, label %114

108:                                              ; preds = %105
  %109 = load ptr, ptr %13, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.tagTGAHEADER, ptr %109, i32 0, i32 9
  %111 = load i16, ptr %110, align 1, !tbaa !20
  %112 = sext i16 %111 to i32
  %113 = load ptr, ptr %10, align 8, !tbaa !5
  store i32 %112, ptr %113, align 4, !tbaa !18
  br label %114

114:                                              ; preds = %108, %105
  %115 = load ptr, ptr %8, align 8, !tbaa !5
  %116 = icmp ne ptr %115, null
  br i1 %116, label %122, label %117

117:                                              ; preds = %114
  %118 = load ptr, ptr %15, align 8, !tbaa !5
  %119 = icmp eq ptr %118, null
  br i1 %119, label %121, label %120

120:                                              ; preds = %117
  call void @_ZdaPv(ptr noundef %118) #9
  br label %121

121:                                              ; preds = %120, %117
  store i32 -1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %800

122:                                              ; preds = %114
  %123 = load ptr, ptr %13, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.tagTGAHEADER, ptr %123, i32 0, i32 8
  %125 = load i16, ptr %124, align 1, !tbaa !15
  %126 = sext i16 %125 to i32
  %127 = load ptr, ptr %13, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.tagTGAHEADER, ptr %127, i32 0, i32 9
  %129 = load i16, ptr %128, align 1, !tbaa !20
  %130 = sext i16 %129 to i32
  %131 = mul nsw i32 %126, %130
  %132 = mul nsw i32 %131, 4
  %133 = sext i32 %132 to i64
  %134 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %133) #8
          to label %135 unwind label %101

135:                                              ; preds = %122
  %136 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %134, ptr %136, align 8, !tbaa !5
  %137 = load ptr, ptr %8, align 8, !tbaa !5
  %138 = load ptr, ptr %137, align 8, !tbaa !5
  %139 = getelementptr inbounds i8, ptr %138, i64 0
  store ptr %139, ptr %16, align 8, !tbaa !5
  %140 = load ptr, ptr %13, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.tagTGAHEADER, ptr %140, i32 0, i32 0
  %142 = load i8, ptr %141, align 1, !tbaa !21
  %143 = icmp ne i8 %142, 0
  br i1 %143, label %144, label %152

144:                                              ; preds = %135
  %145 = load ptr, ptr %15, align 8, !tbaa !5
  %146 = load ptr, ptr %13, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.tagTGAHEADER, ptr %146, i32 0, i32 0
  %148 = load i8, ptr %147, align 1, !tbaa !21
  %149 = zext i8 %148 to i64
  %150 = mul i64 %149, 1
  %151 = getelementptr inbounds i8, ptr %145, i64 %150
  store ptr %151, ptr %25, align 8, !tbaa !5
  br label %152

152:                                              ; preds = %144, %135
  %153 = load ptr, ptr %13, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.tagTGAHEADER, ptr %153, i32 0, i32 1
  %155 = load i8, ptr %154, align 1, !tbaa !22
  %156 = icmp ne i8 %155, 0
  br i1 %156, label %157, label %173

157:                                              ; preds = %152
  %158 = load ptr, ptr %25, align 8, !tbaa !5
  store ptr %158, ptr %14, align 8, !tbaa !5
  %159 = load ptr, ptr %13, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.tagTGAHEADER, ptr %159, i32 0, i32 4
  %161 = load i16, ptr %160, align 1, !tbaa !23
  %162 = sext i16 %161 to i32
  %163 = load ptr, ptr %13, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.tagTGAHEADER, ptr %163, i32 0, i32 5
  %165 = load i8, ptr %164, align 1, !tbaa !24
  %166 = zext i8 %165 to i32
  %167 = ashr i32 %166, 3
  %168 = mul nsw i32 %162, %167
  %169 = sext i32 %168 to i64
  %170 = mul i64 %169, 1
  %171 = load ptr, ptr %25, align 8, !tbaa !5
  %172 = getelementptr inbounds i8, ptr %171, i64 %170
  store ptr %172, ptr %25, align 8, !tbaa !5
  br label %173

173:                                              ; preds = %157, %152
  %174 = load ptr, ptr %13, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.tagTGAHEADER, ptr %174, i32 0, i32 2
  %176 = load i8, ptr %175, align 1, !tbaa !25
  %177 = zext i8 %176 to i32
  switch i32 %177, label %786 [
    i32 0, label %795
    i32 1, label %178
    i32 3, label %178
    i32 2, label %250
    i32 9, label %374
    i32 11, label %374
    i32 10, label %515
  ]

178:                                              ; preds = %173, %173
  %179 = load ptr, ptr %13, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.tagTGAHEADER, ptr %179, i32 0, i32 9
  %181 = load i16, ptr %180, align 1, !tbaa !20
  %182 = sext i16 %181 to i32
  %183 = sub nsw i32 %182, 1
  store i32 %183, ptr %17, align 4, !tbaa !18
  br label %184

184:                                              ; preds = %246, %178
  %185 = load i32, ptr %17, align 4, !tbaa !18
  %186 = icmp sge i32 %185, 0
  br i1 %186, label %187, label %249

187:                                              ; preds = %184
  %188 = load i8, ptr %11, align 1, !tbaa !9, !range !26, !noundef !27
  %189 = trunc i8 %188 to i1
  br i1 %189, label %190, label %202

190:                                              ; preds = %187
  %191 = load ptr, ptr %8, align 8, !tbaa !5
  %192 = load ptr, ptr %191, align 8, !tbaa !5
  %193 = load i32, ptr %17, align 4, !tbaa !18
  %194 = load ptr, ptr %13, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.tagTGAHEADER, ptr %194, i32 0, i32 8
  %196 = load i16, ptr %195, align 1, !tbaa !15
  %197 = sext i16 %196 to i32
  %198 = mul nsw i32 %193, %197
  %199 = mul nsw i32 %198, 4
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds i8, ptr %192, i64 %200
  store ptr %201, ptr %16, align 8, !tbaa !5
  br label %202

202:                                              ; preds = %190, %187
  store i32 0, ptr %18, align 4, !tbaa !18
  br label %203

203:                                              ; preds = %240, %202
  %204 = load i32, ptr %18, align 4, !tbaa !18
  %205 = load ptr, ptr %13, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.tagTGAHEADER, ptr %205, i32 0, i32 8
  %207 = load i16, ptr %206, align 1, !tbaa !15
  %208 = sext i16 %207 to i32
  %209 = icmp slt i32 %204, %208
  br i1 %209, label %210, label %245

210:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #7
  %211 = load ptr, ptr %25, align 8, !tbaa !5
  %212 = getelementptr inbounds i8, ptr %211, i32 1
  store ptr %212, ptr %25, align 8, !tbaa !5
  %213 = load i8, ptr %211, align 1, !tbaa !28
  store i8 %213, ptr %26, align 1, !tbaa !28
  %214 = load ptr, ptr %14, align 8, !tbaa !5
  %215 = load i8, ptr %26, align 1, !tbaa !28
  %216 = zext i8 %215 to i64
  %217 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %214, i64 %216
  %218 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %217, i32 0, i32 2
  %219 = load i8, ptr %218, align 1, !tbaa !29
  %220 = load ptr, ptr %16, align 8, !tbaa !5
  %221 = getelementptr inbounds i8, ptr %220, i64 0
  store i8 %219, ptr %221, align 1, !tbaa !28
  %222 = load ptr, ptr %14, align 8, !tbaa !5
  %223 = load i8, ptr %26, align 1, !tbaa !28
  %224 = zext i8 %223 to i64
  %225 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %222, i64 %224
  %226 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %225, i32 0, i32 1
  %227 = load i8, ptr %226, align 1, !tbaa !31
  %228 = load ptr, ptr %16, align 8, !tbaa !5
  %229 = getelementptr inbounds i8, ptr %228, i64 1
  store i8 %227, ptr %229, align 1, !tbaa !28
  %230 = load ptr, ptr %14, align 8, !tbaa !5
  %231 = load i8, ptr %26, align 1, !tbaa !28
  %232 = zext i8 %231 to i64
  %233 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %230, i64 %232
  %234 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %233, i32 0, i32 0
  %235 = load i8, ptr %234, align 1, !tbaa !32
  %236 = load ptr, ptr %16, align 8, !tbaa !5
  %237 = getelementptr inbounds i8, ptr %236, i64 2
  store i8 %235, ptr %237, align 1, !tbaa !28
  %238 = load ptr, ptr %16, align 8, !tbaa !5
  %239 = getelementptr inbounds i8, ptr %238, i64 3
  store i8 -1, ptr %239, align 1, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #7
  br label %240

240:                                              ; preds = %210
  %241 = load i32, ptr %18, align 4, !tbaa !18
  %242 = add nsw i32 %241, 1
  store i32 %242, ptr %18, align 4, !tbaa !18
  %243 = load ptr, ptr %16, align 8, !tbaa !5
  %244 = getelementptr inbounds i8, ptr %243, i64 4
  store ptr %244, ptr %16, align 8, !tbaa !5
  br label %203, !llvm.loop !33

245:                                              ; preds = %203
  br label %246

246:                                              ; preds = %245
  %247 = load i32, ptr %17, align 4, !tbaa !18
  %248 = add nsw i32 %247, -1
  store i32 %248, ptr %17, align 4, !tbaa !18
  br label %184, !llvm.loop !35

249:                                              ; preds = %184
  br label %795

250:                                              ; preds = %173
  %251 = load ptr, ptr %13, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.tagTGAHEADER, ptr %251, i32 0, i32 9
  %253 = load i16, ptr %252, align 1, !tbaa !20
  %254 = sext i16 %253 to i32
  %255 = sub nsw i32 %254, 1
  store i32 %255, ptr %17, align 4, !tbaa !18
  br label %256

256:                                              ; preds = %370, %250
  %257 = load i32, ptr %17, align 4, !tbaa !18
  %258 = icmp sge i32 %257, 0
  br i1 %258, label %259, label %373

259:                                              ; preds = %256
  %260 = load i8, ptr %11, align 1, !tbaa !9, !range !26, !noundef !27
  %261 = trunc i8 %260 to i1
  br i1 %261, label %262, label %274

262:                                              ; preds = %259
  %263 = load ptr, ptr %8, align 8, !tbaa !5
  %264 = load ptr, ptr %263, align 8, !tbaa !5
  %265 = load i32, ptr %17, align 4, !tbaa !18
  %266 = load ptr, ptr %13, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.tagTGAHEADER, ptr %266, i32 0, i32 8
  %268 = load i16, ptr %267, align 1, !tbaa !15
  %269 = sext i16 %268 to i32
  %270 = mul nsw i32 %265, %269
  %271 = mul nsw i32 %270, 4
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds i8, ptr %264, i64 %272
  store ptr %273, ptr %16, align 8, !tbaa !5
  br label %274

274:                                              ; preds = %262, %259
  store i32 0, ptr %18, align 4, !tbaa !18
  br label %275

275:                                              ; preds = %364, %274
  %276 = load i32, ptr %18, align 4, !tbaa !18
  %277 = load ptr, ptr %13, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.tagTGAHEADER, ptr %277, i32 0, i32 8
  %279 = load i16, ptr %278, align 1, !tbaa !15
  %280 = sext i16 %279 to i32
  %281 = icmp slt i32 %276, %280
  br i1 %281, label %282, label %369

282:                                              ; preds = %275
  %283 = load ptr, ptr %13, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.tagTGAHEADER, ptr %283, i32 0, i32 10
  %285 = load i8, ptr %284, align 1, !tbaa !36
  %286 = zext i8 %285 to i32
  switch i32 %286, label %363 [
    i32 16, label %287
    i32 24, label %318
    i32 32, label %339
  ]

287:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 2, ptr %27) #7
  %288 = load ptr, ptr %25, align 8, !tbaa !5
  %289 = load i16, ptr %288, align 2, !tbaa !37
  store i16 %289, ptr %27, align 2, !tbaa !37
  %290 = load ptr, ptr %25, align 8, !tbaa !5
  %291 = getelementptr inbounds i8, ptr %290, i64 2
  store ptr %291, ptr %25, align 8, !tbaa !5
  %292 = load i16, ptr %27, align 2, !tbaa !37
  %293 = zext i16 %292 to i32
  %294 = and i32 %293, 31744
  %295 = ashr i32 %294, 10
  %296 = shl i32 %295, 3
  %297 = trunc i32 %296 to i8
  %298 = load ptr, ptr %16, align 8, !tbaa !5
  %299 = getelementptr inbounds i8, ptr %298, i64 0
  store i8 %297, ptr %299, align 1, !tbaa !28
  %300 = load i16, ptr %27, align 2, !tbaa !37
  %301 = zext i16 %300 to i32
  %302 = and i32 %301, 992
  %303 = ashr i32 %302, 5
  %304 = shl i32 %303, 3
  %305 = trunc i32 %304 to i8
  %306 = load ptr, ptr %16, align 8, !tbaa !5
  %307 = getelementptr inbounds i8, ptr %306, i64 1
  store i8 %305, ptr %307, align 1, !tbaa !28
  %308 = load i16, ptr %27, align 2, !tbaa !37
  %309 = zext i16 %308 to i32
  %310 = and i32 %309, 31
  %311 = ashr i32 %310, 0
  %312 = shl i32 %311, 3
  %313 = trunc i32 %312 to i8
  %314 = load ptr, ptr %16, align 8, !tbaa !5
  %315 = getelementptr inbounds i8, ptr %314, i64 2
  store i8 %313, ptr %315, align 1, !tbaa !28
  %316 = load ptr, ptr %16, align 8, !tbaa !5
  %317 = getelementptr inbounds i8, ptr %316, i64 3
  store i8 -1, ptr %317, align 1, !tbaa !28
  store i32 15, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %27) #7
  br label %363

318:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %319 = load ptr, ptr %25, align 8, !tbaa !5
  store ptr %319, ptr %28, align 8, !tbaa !5
  %320 = load ptr, ptr %25, align 8, !tbaa !5
  %321 = getelementptr inbounds i8, ptr %320, i64 3
  store ptr %321, ptr %25, align 8, !tbaa !5
  %322 = load ptr, ptr %28, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %322, i32 0, i32 2
  %324 = load i8, ptr %323, align 1, !tbaa !29
  %325 = load ptr, ptr %16, align 8, !tbaa !5
  %326 = getelementptr inbounds i8, ptr %325, i64 0
  store i8 %324, ptr %326, align 1, !tbaa !28
  %327 = load ptr, ptr %28, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %327, i32 0, i32 1
  %329 = load i8, ptr %328, align 1, !tbaa !31
  %330 = load ptr, ptr %16, align 8, !tbaa !5
  %331 = getelementptr inbounds i8, ptr %330, i64 1
  store i8 %329, ptr %331, align 1, !tbaa !28
  %332 = load ptr, ptr %28, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %332, i32 0, i32 0
  %334 = load i8, ptr %333, align 1, !tbaa !32
  %335 = load ptr, ptr %16, align 8, !tbaa !5
  %336 = getelementptr inbounds i8, ptr %335, i64 2
  store i8 %334, ptr %336, align 1, !tbaa !28
  %337 = load ptr, ptr %16, align 8, !tbaa !5
  %338 = getelementptr inbounds i8, ptr %337, i64 3
  store i8 -1, ptr %338, align 1, !tbaa !28
  store i32 15, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  br label %363

339:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %340 = load ptr, ptr %25, align 8, !tbaa !5
  store ptr %340, ptr %29, align 8, !tbaa !5
  %341 = load ptr, ptr %25, align 8, !tbaa !5
  %342 = getelementptr inbounds i8, ptr %341, i64 4
  store ptr %342, ptr %25, align 8, !tbaa !5
  %343 = load ptr, ptr %29, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %343, i32 0, i32 2
  %345 = load i8, ptr %344, align 1, !tbaa !38
  %346 = load ptr, ptr %16, align 8, !tbaa !5
  %347 = getelementptr inbounds i8, ptr %346, i64 0
  store i8 %345, ptr %347, align 1, !tbaa !28
  %348 = load ptr, ptr %29, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %348, i32 0, i32 1
  %350 = load i8, ptr %349, align 1, !tbaa !40
  %351 = load ptr, ptr %16, align 8, !tbaa !5
  %352 = getelementptr inbounds i8, ptr %351, i64 1
  store i8 %350, ptr %352, align 1, !tbaa !28
  %353 = load ptr, ptr %29, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %353, i32 0, i32 0
  %355 = load i8, ptr %354, align 1, !tbaa !41
  %356 = load ptr, ptr %16, align 8, !tbaa !5
  %357 = getelementptr inbounds i8, ptr %356, i64 2
  store i8 %355, ptr %357, align 1, !tbaa !28
  %358 = load ptr, ptr %29, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %358, i32 0, i32 3
  %360 = load i8, ptr %359, align 1, !tbaa !42
  %361 = load ptr, ptr %16, align 8, !tbaa !5
  %362 = getelementptr inbounds i8, ptr %361, i64 3
  store i8 %360, ptr %362, align 1, !tbaa !28
  store i32 15, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  br label %363

363:                                              ; preds = %339, %318, %287, %282
  br label %364

364:                                              ; preds = %363
  %365 = load i32, ptr %18, align 4, !tbaa !18
  %366 = add nsw i32 %365, 1
  store i32 %366, ptr %18, align 4, !tbaa !18
  %367 = load ptr, ptr %16, align 8, !tbaa !5
  %368 = getelementptr inbounds i8, ptr %367, i64 4
  store ptr %368, ptr %16, align 8, !tbaa !5
  br label %275, !llvm.loop !43

369:                                              ; preds = %275
  br label %370

370:                                              ; preds = %369
  %371 = load i32, ptr %17, align 4, !tbaa !18
  %372 = add nsw i32 %371, -1
  store i32 %372, ptr %17, align 4, !tbaa !18
  br label %256, !llvm.loop !44

373:                                              ; preds = %256
  br label %795

374:                                              ; preds = %173, %173
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #7
  %375 = load ptr, ptr %13, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.tagTGAHEADER, ptr %375, i32 0, i32 9
  %377 = load i16, ptr %376, align 1, !tbaa !20
  %378 = sext i16 %377 to i32
  %379 = sub nsw i32 %378, 1
  store i32 %379, ptr %17, align 4, !tbaa !18
  br label %380

380:                                              ; preds = %511, %374
  %381 = load i32, ptr %17, align 4, !tbaa !18
  %382 = icmp sge i32 %381, 0
  br i1 %382, label %383, label %514

383:                                              ; preds = %380
  %384 = load i8, ptr %11, align 1, !tbaa !9, !range !26, !noundef !27
  %385 = trunc i8 %384 to i1
  br i1 %385, label %386, label %398

386:                                              ; preds = %383
  %387 = load ptr, ptr %8, align 8, !tbaa !5
  %388 = load ptr, ptr %387, align 8, !tbaa !5
  %389 = load i32, ptr %17, align 4, !tbaa !18
  %390 = load ptr, ptr %13, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.tagTGAHEADER, ptr %390, i32 0, i32 8
  %392 = load i16, ptr %391, align 1, !tbaa !15
  %393 = sext i16 %392 to i32
  %394 = mul nsw i32 %389, %393
  %395 = mul nsw i32 %394, 4
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds i8, ptr %388, i64 %396
  store ptr %397, ptr %16, align 8, !tbaa !5
  br label %398

398:                                              ; preds = %386, %383
  store i32 0, ptr %18, align 4, !tbaa !18
  br label %399

399:                                              ; preds = %509, %398
  %400 = load i32, ptr %18, align 4, !tbaa !18
  %401 = load ptr, ptr %13, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.tagTGAHEADER, ptr %401, i32 0, i32 8
  %403 = load i16, ptr %402, align 1, !tbaa !15
  %404 = sext i16 %403 to i32
  %405 = icmp slt i32 %400, %404
  br i1 %405, label %406, label %510

406:                                              ; preds = %399
  %407 = load ptr, ptr %25, align 8, !tbaa !5
  %408 = getelementptr inbounds i8, ptr %407, i32 1
  store ptr %408, ptr %25, align 8, !tbaa !5
  %409 = load i8, ptr %407, align 1, !tbaa !28
  store i8 %409, ptr %30, align 1, !tbaa !28
  %410 = load i8, ptr %30, align 1, !tbaa !28
  %411 = zext i8 %410 to i32
  %412 = and i32 %411, 127
  %413 = add nsw i32 1, %412
  %414 = trunc i32 %413 to i8
  store i8 %414, ptr %31, align 1, !tbaa !28
  %415 = load i8, ptr %30, align 1, !tbaa !28
  %416 = zext i8 %415 to i32
  %417 = and i32 %416, 128
  %418 = icmp ne i32 %417, 0
  br i1 %418, label %419, label %464

419:                                              ; preds = %406
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #7
  %420 = load ptr, ptr %25, align 8, !tbaa !5
  %421 = getelementptr inbounds i8, ptr %420, i32 1
  store ptr %421, ptr %25, align 8, !tbaa !5
  %422 = load i8, ptr %420, align 1, !tbaa !28
  store i8 %422, ptr %33, align 1, !tbaa !28
  store i8 0, ptr %32, align 1, !tbaa !28
  br label %423

423:                                              ; preds = %456, %419
  %424 = load i8, ptr %32, align 1, !tbaa !28
  %425 = zext i8 %424 to i32
  %426 = load i8, ptr %31, align 1, !tbaa !28
  %427 = zext i8 %426 to i32
  %428 = icmp slt i32 %425, %427
  br i1 %428, label %429, label %463

429:                                              ; preds = %423
  %430 = load ptr, ptr %14, align 8, !tbaa !5
  %431 = load i8, ptr %33, align 1, !tbaa !28
  %432 = zext i8 %431 to i64
  %433 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %430, i64 %432
  %434 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %433, i32 0, i32 2
  %435 = load i8, ptr %434, align 1, !tbaa !29
  %436 = load ptr, ptr %16, align 8, !tbaa !5
  %437 = getelementptr inbounds i8, ptr %436, i64 0
  store i8 %435, ptr %437, align 1, !tbaa !28
  %438 = load ptr, ptr %14, align 8, !tbaa !5
  %439 = load i8, ptr %33, align 1, !tbaa !28
  %440 = zext i8 %439 to i64
  %441 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %438, i64 %440
  %442 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %441, i32 0, i32 1
  %443 = load i8, ptr %442, align 1, !tbaa !31
  %444 = load ptr, ptr %16, align 8, !tbaa !5
  %445 = getelementptr inbounds i8, ptr %444, i64 1
  store i8 %443, ptr %445, align 1, !tbaa !28
  %446 = load ptr, ptr %14, align 8, !tbaa !5
  %447 = load i8, ptr %33, align 1, !tbaa !28
  %448 = zext i8 %447 to i64
  %449 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %446, i64 %448
  %450 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %449, i32 0, i32 0
  %451 = load i8, ptr %450, align 1, !tbaa !32
  %452 = load ptr, ptr %16, align 8, !tbaa !5
  %453 = getelementptr inbounds i8, ptr %452, i64 2
  store i8 %451, ptr %453, align 1, !tbaa !28
  %454 = load ptr, ptr %16, align 8, !tbaa !5
  %455 = getelementptr inbounds i8, ptr %454, i64 3
  store i8 -1, ptr %455, align 1, !tbaa !28
  br label %456

456:                                              ; preds = %429
  %457 = load i8, ptr %32, align 1, !tbaa !28
  %458 = add i8 %457, 1
  store i8 %458, ptr %32, align 1, !tbaa !28
  %459 = load ptr, ptr %16, align 8, !tbaa !5
  %460 = getelementptr inbounds i8, ptr %459, i64 4
  store ptr %460, ptr %16, align 8, !tbaa !5
  %461 = load i32, ptr %18, align 4, !tbaa !18
  %462 = add nsw i32 %461, 1
  store i32 %462, ptr %18, align 4, !tbaa !18
  br label %423, !llvm.loop !45

463:                                              ; preds = %423
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #7
  br label %509

464:                                              ; preds = %406
  store i8 0, ptr %32, align 1, !tbaa !28
  br label %465

465:                                              ; preds = %501, %464
  %466 = load i8, ptr %32, align 1, !tbaa !28
  %467 = zext i8 %466 to i32
  %468 = load i8, ptr %31, align 1, !tbaa !28
  %469 = zext i8 %468 to i32
  %470 = icmp slt i32 %467, %469
  br i1 %470, label %471, label %508

471:                                              ; preds = %465
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #7
  %472 = load ptr, ptr %25, align 8, !tbaa !5
  %473 = getelementptr inbounds i8, ptr %472, i32 1
  store ptr %473, ptr %25, align 8, !tbaa !5
  %474 = load i8, ptr %472, align 1, !tbaa !28
  store i8 %474, ptr %34, align 1, !tbaa !28
  %475 = load ptr, ptr %14, align 8, !tbaa !5
  %476 = load i8, ptr %34, align 1, !tbaa !28
  %477 = zext i8 %476 to i64
  %478 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %475, i64 %477
  %479 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %478, i32 0, i32 2
  %480 = load i8, ptr %479, align 1, !tbaa !29
  %481 = load ptr, ptr %16, align 8, !tbaa !5
  %482 = getelementptr inbounds i8, ptr %481, i64 0
  store i8 %480, ptr %482, align 1, !tbaa !28
  %483 = load ptr, ptr %14, align 8, !tbaa !5
  %484 = load i8, ptr %34, align 1, !tbaa !28
  %485 = zext i8 %484 to i64
  %486 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %483, i64 %485
  %487 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %486, i32 0, i32 1
  %488 = load i8, ptr %487, align 1, !tbaa !31
  %489 = load ptr, ptr %16, align 8, !tbaa !5
  %490 = getelementptr inbounds i8, ptr %489, i64 1
  store i8 %488, ptr %490, align 1, !tbaa !28
  %491 = load ptr, ptr %14, align 8, !tbaa !5
  %492 = load i8, ptr %34, align 1, !tbaa !28
  %493 = zext i8 %492 to i64
  %494 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %491, i64 %493
  %495 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %494, i32 0, i32 0
  %496 = load i8, ptr %495, align 1, !tbaa !32
  %497 = load ptr, ptr %16, align 8, !tbaa !5
  %498 = getelementptr inbounds i8, ptr %497, i64 2
  store i8 %496, ptr %498, align 1, !tbaa !28
  %499 = load ptr, ptr %16, align 8, !tbaa !5
  %500 = getelementptr inbounds i8, ptr %499, i64 3
  store i8 -1, ptr %500, align 1, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  br label %501

501:                                              ; preds = %471
  %502 = load i8, ptr %32, align 1, !tbaa !28
  %503 = add i8 %502, 1
  store i8 %503, ptr %32, align 1, !tbaa !28
  %504 = load ptr, ptr %16, align 8, !tbaa !5
  %505 = getelementptr inbounds i8, ptr %504, i64 4
  store ptr %505, ptr %16, align 8, !tbaa !5
  %506 = load i32, ptr %18, align 4, !tbaa !18
  %507 = add nsw i32 %506, 1
  store i32 %507, ptr %18, align 4, !tbaa !18
  br label %465, !llvm.loop !46

508:                                              ; preds = %465
  br label %509

509:                                              ; preds = %508, %463
  br label %399, !llvm.loop !47

510:                                              ; preds = %399
  br label %511

511:                                              ; preds = %510
  %512 = load i32, ptr %17, align 4, !tbaa !18
  %513 = add nsw i32 %512, -1
  store i32 %513, ptr %17, align 4, !tbaa !18
  br label %380, !llvm.loop !48

514:                                              ; preds = %380
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #7
  br label %795

515:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #7
  %516 = load ptr, ptr %13, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.tagTGAHEADER, ptr %516, i32 0, i32 9
  %518 = load i16, ptr %517, align 1, !tbaa !20
  %519 = sext i16 %518 to i32
  %520 = sub nsw i32 %519, 1
  store i32 %520, ptr %17, align 4, !tbaa !18
  br label %521

521:                                              ; preds = %782, %515
  %522 = load i32, ptr %17, align 4, !tbaa !18
  %523 = icmp sge i32 %522, 0
  br i1 %523, label %524, label %785

524:                                              ; preds = %521
  %525 = load i8, ptr %11, align 1, !tbaa !9, !range !26, !noundef !27
  %526 = trunc i8 %525 to i1
  br i1 %526, label %527, label %539

527:                                              ; preds = %524
  %528 = load ptr, ptr %8, align 8, !tbaa !5
  %529 = load ptr, ptr %528, align 8, !tbaa !5
  %530 = load i32, ptr %17, align 4, !tbaa !18
  %531 = load ptr, ptr %13, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.tagTGAHEADER, ptr %531, i32 0, i32 8
  %533 = load i16, ptr %532, align 1, !tbaa !15
  %534 = sext i16 %533 to i32
  %535 = mul nsw i32 %530, %534
  %536 = mul nsw i32 %535, 4
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds i8, ptr %529, i64 %537
  store ptr %538, ptr %16, align 8, !tbaa !5
  br label %539

539:                                              ; preds = %527, %524
  store i32 0, ptr %18, align 4, !tbaa !18
  br label %540

540:                                              ; preds = %780, %539
  %541 = load i32, ptr %18, align 4, !tbaa !18
  %542 = load ptr, ptr %13, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.tagTGAHEADER, ptr %542, i32 0, i32 8
  %544 = load i16, ptr %543, align 1, !tbaa !15
  %545 = sext i16 %544 to i32
  %546 = icmp slt i32 %541, %545
  br i1 %546, label %547, label %781

547:                                              ; preds = %540
  %548 = load ptr, ptr %25, align 8, !tbaa !5
  %549 = getelementptr inbounds i8, ptr %548, i32 1
  store ptr %549, ptr %25, align 8, !tbaa !5
  %550 = load i8, ptr %548, align 1, !tbaa !28
  store i8 %550, ptr %35, align 1, !tbaa !28
  %551 = load i8, ptr %35, align 1, !tbaa !28
  %552 = zext i8 %551 to i32
  %553 = and i32 %552, 127
  %554 = add nsw i32 1, %553
  %555 = trunc i32 %554 to i8
  store i8 %555, ptr %36, align 1, !tbaa !28
  %556 = load i8, ptr %35, align 1, !tbaa !28
  %557 = zext i8 %556 to i32
  %558 = and i32 %557, 128
  %559 = icmp ne i32 %558, 0
  br i1 %559, label %560, label %684

560:                                              ; preds = %547
  %561 = load ptr, ptr %13, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.tagTGAHEADER, ptr %561, i32 0, i32 10
  %563 = load i8, ptr %562, align 1, !tbaa !36
  %564 = zext i8 %563 to i32
  switch i32 %564, label %683 [
    i32 16, label %565
    i32 24, label %610
    i32 32, label %645
  ]

565:                                              ; preds = %560
  call void @llvm.lifetime.start.p0(i64 2, ptr %37) #7
  %566 = load ptr, ptr %25, align 8, !tbaa !5
  %567 = load i16, ptr %566, align 2, !tbaa !37
  store i16 %567, ptr %37, align 2, !tbaa !37
  %568 = load ptr, ptr %25, align 8, !tbaa !5
  %569 = getelementptr inbounds i8, ptr %568, i64 2
  store ptr %569, ptr %25, align 8, !tbaa !5
  store i32 0, ptr %19, align 4, !tbaa !18
  br label %570

570:                                              ; preds = %602, %565
  %571 = load i32, ptr %19, align 4, !tbaa !18
  %572 = load i8, ptr %36, align 1, !tbaa !28
  %573 = zext i8 %572 to i32
  %574 = icmp slt i32 %571, %573
  br i1 %574, label %575, label %609

575:                                              ; preds = %570
  %576 = load i16, ptr %37, align 2, !tbaa !37
  %577 = zext i16 %576 to i32
  %578 = and i32 %577, 31744
  %579 = ashr i32 %578, 10
  %580 = shl i32 %579, 3
  %581 = trunc i32 %580 to i8
  %582 = load ptr, ptr %16, align 8, !tbaa !5
  %583 = getelementptr inbounds i8, ptr %582, i64 0
  store i8 %581, ptr %583, align 1, !tbaa !28
  %584 = load i16, ptr %37, align 2, !tbaa !37
  %585 = zext i16 %584 to i32
  %586 = and i32 %585, 992
  %587 = ashr i32 %586, 5
  %588 = shl i32 %587, 3
  %589 = trunc i32 %588 to i8
  %590 = load ptr, ptr %16, align 8, !tbaa !5
  %591 = getelementptr inbounds i8, ptr %590, i64 1
  store i8 %589, ptr %591, align 1, !tbaa !28
  %592 = load i16, ptr %37, align 2, !tbaa !37
  %593 = zext i16 %592 to i32
  %594 = and i32 %593, 31
  %595 = ashr i32 %594, 0
  %596 = shl i32 %595, 3
  %597 = trunc i32 %596 to i8
  %598 = load ptr, ptr %16, align 8, !tbaa !5
  %599 = getelementptr inbounds i8, ptr %598, i64 2
  store i8 %597, ptr %599, align 1, !tbaa !28
  %600 = load ptr, ptr %16, align 8, !tbaa !5
  %601 = getelementptr inbounds i8, ptr %600, i64 3
  store i8 -1, ptr %601, align 1, !tbaa !28
  br label %602

602:                                              ; preds = %575
  %603 = load i32, ptr %19, align 4, !tbaa !18
  %604 = add nsw i32 %603, 1
  store i32 %604, ptr %19, align 4, !tbaa !18
  %605 = load ptr, ptr %16, align 8, !tbaa !5
  %606 = getelementptr inbounds i8, ptr %605, i64 4
  store ptr %606, ptr %16, align 8, !tbaa !5
  %607 = load i32, ptr %18, align 4, !tbaa !18
  %608 = add nsw i32 %607, 1
  store i32 %608, ptr %18, align 4, !tbaa !18
  br label %570, !llvm.loop !49

609:                                              ; preds = %570
  store i32 32, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %37) #7
  br label %683

610:                                              ; preds = %560
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %611 = load ptr, ptr %25, align 8, !tbaa !5
  store ptr %611, ptr %38, align 8, !tbaa !5
  %612 = load ptr, ptr %25, align 8, !tbaa !5
  %613 = getelementptr inbounds i8, ptr %612, i64 3
  store ptr %613, ptr %25, align 8, !tbaa !5
  store i32 0, ptr %19, align 4, !tbaa !18
  br label %614

614:                                              ; preds = %637, %610
  %615 = load i32, ptr %19, align 4, !tbaa !18
  %616 = load i8, ptr %36, align 1, !tbaa !28
  %617 = zext i8 %616 to i32
  %618 = icmp slt i32 %615, %617
  br i1 %618, label %619, label %644

619:                                              ; preds = %614
  %620 = load ptr, ptr %38, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %620, i32 0, i32 2
  %622 = load i8, ptr %621, align 1, !tbaa !29
  %623 = load ptr, ptr %16, align 8, !tbaa !5
  %624 = getelementptr inbounds i8, ptr %623, i64 0
  store i8 %622, ptr %624, align 1, !tbaa !28
  %625 = load ptr, ptr %38, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %625, i32 0, i32 1
  %627 = load i8, ptr %626, align 1, !tbaa !31
  %628 = load ptr, ptr %16, align 8, !tbaa !5
  %629 = getelementptr inbounds i8, ptr %628, i64 1
  store i8 %627, ptr %629, align 1, !tbaa !28
  %630 = load ptr, ptr %38, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %630, i32 0, i32 0
  %632 = load i8, ptr %631, align 1, !tbaa !32
  %633 = load ptr, ptr %16, align 8, !tbaa !5
  %634 = getelementptr inbounds i8, ptr %633, i64 2
  store i8 %632, ptr %634, align 1, !tbaa !28
  %635 = load ptr, ptr %16, align 8, !tbaa !5
  %636 = getelementptr inbounds i8, ptr %635, i64 3
  store i8 -1, ptr %636, align 1, !tbaa !28
  br label %637

637:                                              ; preds = %619
  %638 = load i32, ptr %19, align 4, !tbaa !18
  %639 = add nsw i32 %638, 1
  store i32 %639, ptr %19, align 4, !tbaa !18
  %640 = load ptr, ptr %16, align 8, !tbaa !5
  %641 = getelementptr inbounds i8, ptr %640, i64 4
  store ptr %641, ptr %16, align 8, !tbaa !5
  %642 = load i32, ptr %18, align 4, !tbaa !18
  %643 = add nsw i32 %642, 1
  store i32 %643, ptr %18, align 4, !tbaa !18
  br label %614, !llvm.loop !50

644:                                              ; preds = %614
  store i32 32, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  br label %683

645:                                              ; preds = %560
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %646 = load ptr, ptr %25, align 8, !tbaa !5
  store ptr %646, ptr %39, align 8, !tbaa !5
  %647 = load ptr, ptr %25, align 8, !tbaa !5
  %648 = getelementptr inbounds i8, ptr %647, i64 4
  store ptr %648, ptr %25, align 8, !tbaa !5
  store i32 0, ptr %19, align 4, !tbaa !18
  br label %649

649:                                              ; preds = %675, %645
  %650 = load i32, ptr %19, align 4, !tbaa !18
  %651 = load i8, ptr %36, align 1, !tbaa !28
  %652 = zext i8 %651 to i32
  %653 = icmp slt i32 %650, %652
  br i1 %653, label %654, label %682

654:                                              ; preds = %649
  %655 = load ptr, ptr %39, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %655, i32 0, i32 2
  %657 = load i8, ptr %656, align 1, !tbaa !38
  %658 = load ptr, ptr %16, align 8, !tbaa !5
  %659 = getelementptr inbounds i8, ptr %658, i64 0
  store i8 %657, ptr %659, align 1, !tbaa !28
  %660 = load ptr, ptr %39, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %660, i32 0, i32 1
  %662 = load i8, ptr %661, align 1, !tbaa !40
  %663 = load ptr, ptr %16, align 8, !tbaa !5
  %664 = getelementptr inbounds i8, ptr %663, i64 1
  store i8 %662, ptr %664, align 1, !tbaa !28
  %665 = load ptr, ptr %39, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %665, i32 0, i32 0
  %667 = load i8, ptr %666, align 1, !tbaa !41
  %668 = load ptr, ptr %16, align 8, !tbaa !5
  %669 = getelementptr inbounds i8, ptr %668, i64 2
  store i8 %667, ptr %669, align 1, !tbaa !28
  %670 = load ptr, ptr %39, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %670, i32 0, i32 3
  %672 = load i8, ptr %671, align 1, !tbaa !42
  %673 = load ptr, ptr %16, align 8, !tbaa !5
  %674 = getelementptr inbounds i8, ptr %673, i64 3
  store i8 %672, ptr %674, align 1, !tbaa !28
  br label %675

675:                                              ; preds = %654
  %676 = load i32, ptr %19, align 4, !tbaa !18
  %677 = add nsw i32 %676, 1
  store i32 %677, ptr %19, align 4, !tbaa !18
  %678 = load ptr, ptr %16, align 8, !tbaa !5
  %679 = getelementptr inbounds i8, ptr %678, i64 4
  store ptr %679, ptr %16, align 8, !tbaa !5
  %680 = load i32, ptr %18, align 4, !tbaa !18
  %681 = add nsw i32 %680, 1
  store i32 %681, ptr %18, align 4, !tbaa !18
  br label %649, !llvm.loop !51

682:                                              ; preds = %649
  store i32 32, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  br label %683

683:                                              ; preds = %682, %644, %609, %560
  br label %780

684:                                              ; preds = %547
  store i32 0, ptr %19, align 4, !tbaa !18
  br label %685

685:                                              ; preds = %772, %684
  %686 = load i32, ptr %19, align 4, !tbaa !18
  %687 = load i8, ptr %36, align 1, !tbaa !28
  %688 = zext i8 %687 to i32
  %689 = icmp slt i32 %686, %688
  br i1 %689, label %690, label %779

690:                                              ; preds = %685
  %691 = load ptr, ptr %13, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.tagTGAHEADER, ptr %691, i32 0, i32 10
  %693 = load i8, ptr %692, align 1, !tbaa !36
  %694 = zext i8 %693 to i32
  switch i32 %694, label %771 [
    i32 16, label %695
    i32 24, label %726
    i32 32, label %747
  ]

695:                                              ; preds = %690
  call void @llvm.lifetime.start.p0(i64 2, ptr %40) #7
  %696 = load ptr, ptr %25, align 8, !tbaa !5
  %697 = load i16, ptr %696, align 2, !tbaa !37
  store i16 %697, ptr %40, align 2, !tbaa !37
  %698 = load ptr, ptr %25, align 8, !tbaa !5
  %699 = getelementptr inbounds i8, ptr %698, i64 2
  store ptr %699, ptr %25, align 8, !tbaa !5
  %700 = load i16, ptr %40, align 2, !tbaa !37
  %701 = zext i16 %700 to i32
  %702 = and i32 %701, 31744
  %703 = ashr i32 %702, 10
  %704 = shl i32 %703, 3
  %705 = trunc i32 %704 to i8
  %706 = load ptr, ptr %16, align 8, !tbaa !5
  %707 = getelementptr inbounds i8, ptr %706, i64 0
  store i8 %705, ptr %707, align 1, !tbaa !28
  %708 = load i16, ptr %40, align 2, !tbaa !37
  %709 = zext i16 %708 to i32
  %710 = and i32 %709, 992
  %711 = ashr i32 %710, 5
  %712 = shl i32 %711, 3
  %713 = trunc i32 %712 to i8
  %714 = load ptr, ptr %16, align 8, !tbaa !5
  %715 = getelementptr inbounds i8, ptr %714, i64 1
  store i8 %713, ptr %715, align 1, !tbaa !28
  %716 = load i16, ptr %40, align 2, !tbaa !37
  %717 = zext i16 %716 to i32
  %718 = and i32 %717, 31
  %719 = ashr i32 %718, 0
  %720 = shl i32 %719, 3
  %721 = trunc i32 %720 to i8
  %722 = load ptr, ptr %16, align 8, !tbaa !5
  %723 = getelementptr inbounds i8, ptr %722, i64 2
  store i8 %721, ptr %723, align 1, !tbaa !28
  %724 = load ptr, ptr %16, align 8, !tbaa !5
  %725 = getelementptr inbounds i8, ptr %724, i64 3
  store i8 -1, ptr %725, align 1, !tbaa !28
  store i32 45, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %40) #7
  br label %771

726:                                              ; preds = %690
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %727 = load ptr, ptr %25, align 8, !tbaa !5
  store ptr %727, ptr %41, align 8, !tbaa !5
  %728 = load ptr, ptr %25, align 8, !tbaa !5
  %729 = getelementptr inbounds i8, ptr %728, i64 3
  store ptr %729, ptr %25, align 8, !tbaa !5
  %730 = load ptr, ptr %41, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %730, i32 0, i32 2
  %732 = load i8, ptr %731, align 1, !tbaa !29
  %733 = load ptr, ptr %16, align 8, !tbaa !5
  %734 = getelementptr inbounds i8, ptr %733, i64 0
  store i8 %732, ptr %734, align 1, !tbaa !28
  %735 = load ptr, ptr %41, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %735, i32 0, i32 1
  %737 = load i8, ptr %736, align 1, !tbaa !31
  %738 = load ptr, ptr %16, align 8, !tbaa !5
  %739 = getelementptr inbounds i8, ptr %738, i64 1
  store i8 %737, ptr %739, align 1, !tbaa !28
  %740 = load ptr, ptr %41, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %740, i32 0, i32 0
  %742 = load i8, ptr %741, align 1, !tbaa !32
  %743 = load ptr, ptr %16, align 8, !tbaa !5
  %744 = getelementptr inbounds i8, ptr %743, i64 2
  store i8 %742, ptr %744, align 1, !tbaa !28
  %745 = load ptr, ptr %16, align 8, !tbaa !5
  %746 = getelementptr inbounds i8, ptr %745, i64 3
  store i8 -1, ptr %746, align 1, !tbaa !28
  store i32 45, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  br label %771

747:                                              ; preds = %690
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  %748 = load ptr, ptr %25, align 8, !tbaa !5
  store ptr %748, ptr %42, align 8, !tbaa !5
  %749 = load ptr, ptr %25, align 8, !tbaa !5
  %750 = getelementptr inbounds i8, ptr %749, i64 4
  store ptr %750, ptr %25, align 8, !tbaa !5
  %751 = load ptr, ptr %42, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %751, i32 0, i32 2
  %753 = load i8, ptr %752, align 1, !tbaa !38
  %754 = load ptr, ptr %16, align 8, !tbaa !5
  %755 = getelementptr inbounds i8, ptr %754, i64 0
  store i8 %753, ptr %755, align 1, !tbaa !28
  %756 = load ptr, ptr %42, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %756, i32 0, i32 1
  %758 = load i8, ptr %757, align 1, !tbaa !40
  %759 = load ptr, ptr %16, align 8, !tbaa !5
  %760 = getelementptr inbounds i8, ptr %759, i64 1
  store i8 %758, ptr %760, align 1, !tbaa !28
  %761 = load ptr, ptr %42, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %761, i32 0, i32 0
  %763 = load i8, ptr %762, align 1, !tbaa !41
  %764 = load ptr, ptr %16, align 8, !tbaa !5
  %765 = getelementptr inbounds i8, ptr %764, i64 2
  store i8 %763, ptr %765, align 1, !tbaa !28
  %766 = load ptr, ptr %42, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.tagBGRAQUAD, ptr %766, i32 0, i32 3
  %768 = load i8, ptr %767, align 1, !tbaa !42
  %769 = load ptr, ptr %16, align 8, !tbaa !5
  %770 = getelementptr inbounds i8, ptr %769, i64 3
  store i8 %768, ptr %770, align 1, !tbaa !28
  store i32 45, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  br label %771

771:                                              ; preds = %747, %726, %695, %690
  br label %772

772:                                              ; preds = %771
  %773 = load i32, ptr %19, align 4, !tbaa !18
  %774 = add nsw i32 %773, 1
  store i32 %774, ptr %19, align 4, !tbaa !18
  %775 = load ptr, ptr %16, align 8, !tbaa !5
  %776 = getelementptr inbounds i8, ptr %775, i64 4
  store ptr %776, ptr %16, align 8, !tbaa !5
  %777 = load i32, ptr %18, align 4, !tbaa !18
  %778 = add nsw i32 %777, 1
  store i32 %778, ptr %18, align 4, !tbaa !18
  br label %685, !llvm.loop !52

779:                                              ; preds = %685
  br label %780

780:                                              ; preds = %779, %683
  br label %540, !llvm.loop !53

781:                                              ; preds = %540
  br label %782

782:                                              ; preds = %781
  %783 = load i32, ptr %17, align 4, !tbaa !18
  %784 = add nsw i32 %783, -1
  store i32 %784, ptr %17, align 4, !tbaa !18
  br label %521, !llvm.loop !54

785:                                              ; preds = %521
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #7
  br label %795

786:                                              ; preds = %173
  %787 = load ptr, ptr %8, align 8, !tbaa !5
  %788 = icmp eq ptr %787, null
  br i1 %788, label %790, label %789

789:                                              ; preds = %786
  call void @_ZdaPv(ptr noundef %787) #9
  br label %790

790:                                              ; preds = %789, %786
  %791 = load ptr, ptr %15, align 8, !tbaa !5
  %792 = icmp eq ptr %791, null
  br i1 %792, label %794, label %793

793:                                              ; preds = %790
  call void @_ZdaPv(ptr noundef %791) #9
  br label %794

794:                                              ; preds = %793, %790
  store i32 0, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %800

795:                                              ; preds = %785, %514, %373, %249, %173
  %796 = load ptr, ptr %15, align 8, !tbaa !5
  %797 = icmp eq ptr %796, null
  br i1 %797, label %799, label %798

798:                                              ; preds = %795
  call void @_ZdaPv(ptr noundef %796) #9
  br label %799

799:                                              ; preds = %798, %795
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %800

800:                                              ; preds = %799, %794, %121
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  br label %802

801:                                              ; preds = %101, %97, %93
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  br label %804

802:                                              ; preds = %800, %54
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %12) #7
  call void @llvm.lifetime.end.p0(i64 520, ptr %12) #7
  %803 = load i32, ptr %6, align 4
  ret i32 %803

804:                                              ; preds = %801, %55
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %12) #7
  call void @llvm.lifetime.end.p0(i64 520, ptr %12) #7
  br label %805

805:                                              ; preds = %804
  %806 = load ptr, ptr %20, align 8
  %807 = load i32, ptr %21, align 4
  %808 = insertvalue { ptr, i32 } poison, ptr %806, 0
  %809 = insertvalue { ptr, i32 } %808, i32 %807, 1
  resume { ptr, i32 } %809
}

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

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(256)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef, i32 noundef) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZStorSt13_Ios_OpenmodeS_(i32 noundef, i32 noundef) #2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare noundef zeroext i1 @_ZNKSt9basic_iosIcSt11char_traitsIcEE4failEv(ptr noundef nonnull align 8 dereferenceable(264)) #0 align 2

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNSi5seekgElSt12_Ios_Seekdir(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i32 noundef) #3

declare { i64, i64 } @_ZNSi5tellgEv(ptr noundef nonnull align 8 dereferenceable(16)) #3

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #5

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNSi4readEPcl(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, i64 noundef) #3

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(256)) #0 align 2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #6

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256)) unnamed_addr #4 align 2

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { "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 = { 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 #5 = { nobuiltin allocsize(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 #6 = { nobuiltin 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 #7 = { nounwind }
attributes #8 = { builtin allocsize(0) }
attributes #9 = { builtin 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 = !{!"bool", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"vtable pointer", !8, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!16, !17, i64 12}
!16 = !{!"_ZTS12tagTGAHEADER", !7, i64 0, !7, i64 1, !7, i64 2, !17, i64 3, !17, i64 5, !7, i64 7, !17, i64 8, !17, i64 10, !17, i64 12, !17, i64 14, !7, i64 16, !7, i64 17}
!17 = !{!"short", !7, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"int", !7, i64 0}
!20 = !{!16, !17, i64 14}
!21 = !{!16, !7, i64 0}
!22 = !{!16, !7, i64 1}
!23 = !{!16, !17, i64 5}
!24 = !{!16, !7, i64 7}
!25 = !{!16, !7, i64 2}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!7, !7, i64 0}
!29 = !{!30, !7, i64 2}
!30 = !{!"_ZTS12tagRGBTRIPLE", !7, i64 0, !7, i64 1, !7, i64 2}
!31 = !{!30, !7, i64 1}
!32 = !{!30, !7, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = distinct !{!35, !34}
!36 = !{!16, !7, i64 16}
!37 = !{!17, !17, i64 0}
!38 = !{!39, !7, i64 2}
!39 = !{!"_ZTS11tagBGRAQUAD", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3}
!40 = !{!39, !7, i64 1}
!41 = !{!39, !7, i64 0}
!42 = !{!39, !7, i64 3}
!43 = distinct !{!43, !34}
!44 = distinct !{!44, !34}
!45 = distinct !{!45, !34}
!46 = distinct !{!46, !34}
!47 = distinct !{!47, !34}
!48 = distinct !{!48, !34}
!49 = distinct !{!49, !34}
!50 = distinct !{!50, !34}
!51 = distinct !{!51, !34}
!52 = distinct !{!52, !34}
!53 = distinct !{!53, !34}
!54 = distinct !{!54, !34}


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

%"class.std::basic_ifstream" = type { %"class.std::basic_istream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_istream.base" = type { ptr, i64 }
%"class.std::basic_filebuf" = type { %"class.std::basic_streambuf", %union.pthread_mutex_t, %"class.std::__basic_file", i32, %struct.__mbstate_t, %struct.__mbstate_t, %struct.__mbstate_t, ptr, i64, i8, i8, i8, i8, ptr, ptr, i8, ptr, ptr, i64, ptr, ptr }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::__basic_file" = type <{ ptr, i8, [7 x i8] }>
%struct.__mbstate_t = type { i32, %union.anon }
%union.anon = type { i32 }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::fpos" = type { i64, %struct.__mbstate_t }
%struct.tagRGBTRIPLE = type { i8, i8, i8 }

; Function Attrs: mustprogress uwtable
define dso_local noundef range(i32 -1, 2) i32 @_Z11LoadFileTGAPKcPPhPiS3_b(ptr noundef %0, ptr noundef %1, ptr noundef writeonly %2, ptr noundef writeonly %3, i1 noundef zeroext %4) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.std::basic_ifstream", align 8
  %7 = alloca %"class.std::fpos", align 8
  call void @llvm.lifetime.start.p0(i64 520, ptr nonnull %6) #7
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(256) %6)
  %8 = call noundef i32 @_ZStorSt13_Ios_OpenmodeS_(i32 noundef 8, i32 noundef 4)
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256) %6, ptr noundef %0, i32 noundef %8)
          to label %9 unwind label %16

9:                                                ; preds = %5
  %10 = load ptr, ptr %6, align 8, !tbaa !5
  %11 = getelementptr i8, ptr %10, i64 -24
  %12 = load i64, ptr %11, align 8
  %13 = getelementptr inbounds i8, ptr %6, i64 %12
  %14 = invoke noundef zeroext i1 @_ZNKSt9basic_iosIcSt11char_traitsIcEE4failEv(ptr noundef nonnull align 8 dereferenceable(264) %13)
          to label %15 unwind label %16

15:                                               ; preds = %9
  br i1 %14, label %456, label %18

16:                                               ; preds = %18, %9, %5
  %17 = landingpad { ptr, i32 }
          cleanup
  br label %457

18:                                               ; preds = %15
  %19 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSi5seekgElSt12_Ios_Seekdir(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef 0, i32 noundef 2)
          to label %20 unwind label %16

20:                                               ; preds = %18
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #7
  %21 = invoke { i64, i64 } @_ZNSi5tellgEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %22 unwind label %39

22:                                               ; preds = %20
  %23 = extractvalue { i64, i64 } %21, 0
  store i64 %23, ptr %7, align 8
  %24 = getelementptr inbounds i8, ptr %7, i64 8
  %25 = extractvalue { i64, i64 } %21, 1
  store i64 %25, ptr %24, align 8
  %26 = call noundef i64 @_ZNKSt4fposI11__mbstate_tEcvlEv(ptr noundef nonnull align 8 dereferenceable(16) %7)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  %27 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSi5seekgElSt12_Ios_Seekdir(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef 0, i32 noundef 0)
          to label %28 unwind label %41

28:                                               ; preds = %22
  %29 = add nsw i64 %26, 1
  %30 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %29) #8
          to label %31 unwind label %41

31:                                               ; preds = %28
  %32 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSi4readEPcl(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull %30, i64 noundef %26)
          to label %33 unwind label %41

33:                                               ; preds = %31
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(256) %6)
          to label %34 unwind label %43

34:                                               ; preds = %33
  %.not = icmp eq ptr %2, null
  br i1 %.not, label %45, label %35

35:                                               ; preds = %34
  %36 = getelementptr inbounds i8, ptr %30, i64 12
  %37 = load i16, ptr %36, align 1, !tbaa !8
  %38 = sext i16 %37 to i32
  store i32 %38, ptr %2, align 4, !tbaa !12
  br label %45

39:                                               ; preds = %20
  %40 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  br label %457

41:                                               ; preds = %31, %28, %22
  %42 = landingpad { ptr, i32 }
          cleanup
  br label %457

43:                                               ; preds = %51, %33
  %44 = landingpad { ptr, i32 }
          cleanup
  br label %457

45:                                               ; preds = %35, %34
  %.not278 = icmp eq ptr %3, null
  br i1 %.not278, label %50, label %46

46:                                               ; preds = %45
  %47 = getelementptr inbounds i8, ptr %30, i64 14
  %48 = load i16, ptr %47, align 1, !tbaa !14
  %49 = sext i16 %48 to i32
  store i32 %49, ptr %3, align 4, !tbaa !12
  br label %50

50:                                               ; preds = %46, %45
  %.not279 = icmp eq ptr %1, null
  br i1 %.not279, label %.sink.split422, label %51

51:                                               ; preds = %50
  %52 = getelementptr inbounds i8, ptr %30, i64 12
  %53 = load i16, ptr %52, align 1, !tbaa !8
  %54 = sext i16 %53 to i32
  %55 = getelementptr inbounds i8, ptr %30, i64 14
  %56 = load i16, ptr %55, align 1, !tbaa !14
  %57 = sext i16 %56 to i32
  %58 = shl nsw i32 %54, 2
  %59 = mul i32 %58, %57
  %60 = sext i32 %59 to i64
  %61 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %60) #8
          to label %62 unwind label %43

62:                                               ; preds = %51
  store ptr %61, ptr %1, align 8, !tbaa !15
  %63 = load i8, ptr %30, align 1, !tbaa !17
  %.not282 = icmp eq i8 %63, 0
  %narrow = select i1 %.not282, i8 18, i8 %63
  %.0256.v = zext i8 %narrow to i64
  %.0256 = getelementptr inbounds i8, ptr %30, i64 %.0256.v
  %64 = getelementptr inbounds i8, ptr %30, i64 1
  %65 = load i8, ptr %64, align 1, !tbaa !18
  %.not283 = icmp eq i8 %65, 0
  br i1 %.not283, label %76, label %66

66:                                               ; preds = %62
  %67 = getelementptr inbounds i8, ptr %30, i64 5
  %68 = load i16, ptr %67, align 1, !tbaa !19
  %69 = sext i16 %68 to i64
  %70 = getelementptr inbounds i8, ptr %30, i64 7
  %71 = load i8, ptr %70, align 1, !tbaa !20
  %72 = lshr i8 %71, 3
  %73 = zext nneg i8 %72 to i64
  %74 = mul nsw i64 %73, %69
  %75 = getelementptr inbounds i8, ptr %.0256, i64 %74
  br label %76

76:                                               ; preds = %66, %62
  %.1257 = phi ptr [ %75, %66 ], [ %.0256, %62 ]
  %77 = getelementptr inbounds i8, ptr %30, i64 2
  %78 = load i8, ptr %77, align 1, !tbaa !21
  switch i8 %78, label %455 [
    i8 0, label %.sink.split422
    i8 1, label %83
    i8 3, label %83
    i8 2, label %.preheader
    i8 9, label %186
    i8 11, label %186
    i8 10, label %.preheader304
  ]

.preheader304:                                    ; preds = %76
  %79 = icmp sgt i16 %56, 0
  br i1 %79, label %.lr.ph327, label %.sink.split422

.lr.ph327:                                        ; preds = %.preheader304
  %80 = getelementptr inbounds i8, ptr %30, i64 16
  br label %285

.preheader:                                       ; preds = %76
  %81 = icmp sgt i16 %56, 0
  br i1 %81, label %.lr.ph356, label %.sink.split422

.lr.ph356:                                        ; preds = %.preheader
  %82 = getelementptr inbounds i8, ptr %30, i64 16
  br label %135

83:                                               ; preds = %76, %76
  %84 = icmp sgt i16 %56, 0
  br i1 %84, label %.lr.ph367, label %.sink.split422

.lr.ph367:                                        ; preds = %83
  %.0232363 = add nsw i32 %57, -1
  br i1 %4, label %.lr.ph367.split.us, label %.lr.ph367.split

.lr.ph367.split.us:                               ; preds = %.lr.ph367, %.loopexit.us
  %85 = phi i16 [ %110, %.loopexit.us ], [ %53, %.lr.ph367 ]
  %.0232366.us = phi i32 [ %.0232.us, %.loopexit.us ], [ %.0232363, %.lr.ph367 ]
  %.2258364.us = phi ptr [ %.3259.lcssa.us, %.loopexit.us ], [ %.1257, %.lr.ph367 ]
  %86 = icmp sgt i16 %85, 0
  br i1 %86, label %.lr.ph360.us.preheader, label %.loopexit.us

.lr.ph360.us.preheader:                           ; preds = %.lr.ph367.split.us
  %87 = load ptr, ptr %1, align 8, !tbaa !15
  %88 = shl i32 %.0232366.us, 2
  %89 = zext nneg i16 %85 to i32
  %90 = mul i32 %88, %89
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds i8, ptr %87, i64 %91
  br label %.lr.ph360.us

.lr.ph360.us:                                     ; preds = %.lr.ph360.us.preheader, %.lr.ph360.us
  %.2359.us = phi ptr [ %106, %.lr.ph360.us ], [ %92, %.lr.ph360.us.preheader ]
  %.0236358.us = phi i32 [ %105, %.lr.ph360.us ], [ 0, %.lr.ph360.us.preheader ]
  %.3259357.us = phi ptr [ %93, %.lr.ph360.us ], [ %.2258364.us, %.lr.ph360.us.preheader ]
  %93 = getelementptr inbounds i8, ptr %.3259357.us, i64 1
  %94 = load i8, ptr %.3259357.us, align 1, !tbaa !22
  %95 = zext i8 %94 to i64
  %96 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0256, i64 %95
  %97 = getelementptr inbounds i8, ptr %96, i64 2
  %98 = load i8, ptr %97, align 1, !tbaa !23
  store i8 %98, ptr %.2359.us, align 1, !tbaa !22
  %99 = getelementptr inbounds i8, ptr %96, i64 1
  %100 = load i8, ptr %99, align 1, !tbaa !25
  %101 = getelementptr inbounds i8, ptr %.2359.us, i64 1
  store i8 %100, ptr %101, align 1, !tbaa !22
  %102 = load i8, ptr %96, align 1, !tbaa !26
  %103 = getelementptr inbounds i8, ptr %.2359.us, i64 2
  store i8 %102, ptr %103, align 1, !tbaa !22
  %104 = getelementptr inbounds i8, ptr %.2359.us, i64 3
  store i8 -1, ptr %104, align 1, !tbaa !22
  %105 = add nuw nsw i32 %.0236358.us, 1
  %106 = getelementptr inbounds i8, ptr %.2359.us, i64 4
  %107 = load i16, ptr %52, align 1, !tbaa !8
  %108 = sext i16 %107 to i32
  %109 = icmp slt i32 %105, %108
  br i1 %109, label %.lr.ph360.us, label %.loopexit.us, !llvm.loop !27

.loopexit.us:                                     ; preds = %.lr.ph360.us, %.lr.ph367.split.us
  %110 = phi i16 [ %85, %.lr.ph367.split.us ], [ %107, %.lr.ph360.us ]
  %.3259.lcssa.us = phi ptr [ %.2258364.us, %.lr.ph367.split.us ], [ %93, %.lr.ph360.us ]
  %.0232.us = add nsw i32 %.0232366.us, -1
  %111 = icmp sgt i32 %.0232366.us, 0
  br i1 %111, label %.lr.ph367.split.us, label %.sink.split422, !llvm.loop !29

.loopexit:                                        ; preds = %.lr.ph360, %.lr.ph367.split
  %112 = phi i16 [ %114, %.lr.ph367.split ], [ %130, %.lr.ph360 ]
  %.3259.lcssa = phi ptr [ %.2258364, %.lr.ph367.split ], [ %116, %.lr.ph360 ]
  %.2.lcssa = phi ptr [ %.0230365, %.lr.ph367.split ], [ %129, %.lr.ph360 ]
  %.0232 = add nsw i32 %.0232366, -1
  %113 = icmp sgt i32 %.0232366, 0
  br i1 %113, label %.lr.ph367.split, label %.sink.split422, !llvm.loop !29

.lr.ph367.split:                                  ; preds = %.lr.ph367, %.loopexit
  %114 = phi i16 [ %112, %.loopexit ], [ %53, %.lr.ph367 ]
  %.0232366 = phi i32 [ %.0232, %.loopexit ], [ %.0232363, %.lr.ph367 ]
  %.0230365 = phi ptr [ %.2.lcssa, %.loopexit ], [ %61, %.lr.ph367 ]
  %.2258364 = phi ptr [ %.3259.lcssa, %.loopexit ], [ %.1257, %.lr.ph367 ]
  %115 = icmp sgt i16 %114, 0
  br i1 %115, label %.lr.ph360, label %.loopexit

.lr.ph360:                                        ; preds = %.lr.ph367.split, %.lr.ph360
  %.2359 = phi ptr [ %129, %.lr.ph360 ], [ %.0230365, %.lr.ph367.split ]
  %.0236358 = phi i32 [ %128, %.lr.ph360 ], [ 0, %.lr.ph367.split ]
  %.3259357 = phi ptr [ %116, %.lr.ph360 ], [ %.2258364, %.lr.ph367.split ]
  %116 = getelementptr inbounds i8, ptr %.3259357, i64 1
  %117 = load i8, ptr %.3259357, align 1, !tbaa !22
  %118 = zext i8 %117 to i64
  %119 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0256, i64 %118
  %120 = getelementptr inbounds i8, ptr %119, i64 2
  %121 = load i8, ptr %120, align 1, !tbaa !23
  store i8 %121, ptr %.2359, align 1, !tbaa !22
  %122 = getelementptr inbounds i8, ptr %119, i64 1
  %123 = load i8, ptr %122, align 1, !tbaa !25
  %124 = getelementptr inbounds i8, ptr %.2359, i64 1
  store i8 %123, ptr %124, align 1, !tbaa !22
  %125 = load i8, ptr %119, align 1, !tbaa !26
  %126 = getelementptr inbounds i8, ptr %.2359, i64 2
  store i8 %125, ptr %126, align 1, !tbaa !22
  %127 = getelementptr inbounds i8, ptr %.2359, i64 3
  store i8 -1, ptr %127, align 1, !tbaa !22
  %128 = add nuw nsw i32 %.0236358, 1
  %129 = getelementptr inbounds i8, ptr %.2359, i64 4
  %130 = load i16, ptr %52, align 1, !tbaa !8
  %131 = sext i16 %130 to i32
  %132 = icmp slt i32 %128, %131
  br i1 %132, label %.lr.ph360, label %.loopexit, !llvm.loop !27

.loopexit291:                                     ; preds = %180, %144
  %133 = phi i16 [ %136, %144 ], [ %183, %180 ]
  %.5261.lcssa = phi ptr [ %.4260353, %144 ], [ %.6262, %180 ]
  %.5.lcssa = phi ptr [ %.4, %144 ], [ %182, %180 ]
  %134 = icmp sgt i32 %.1233355.in, 1
  br i1 %134, label %135, label %.sink.split422, !llvm.loop !30

135:                                              ; preds = %.lr.ph356, %.loopexit291
  %136 = phi i16 [ %53, %.lr.ph356 ], [ %133, %.loopexit291 ]
  %.1233355.in = phi i32 [ %57, %.lr.ph356 ], [ %.1233355, %.loopexit291 ]
  %.3354 = phi ptr [ %61, %.lr.ph356 ], [ %.5.lcssa, %.loopexit291 ]
  %.4260353 = phi ptr [ %.1257, %.lr.ph356 ], [ %.5261.lcssa, %.loopexit291 ]
  %.1233355 = add nsw i32 %.1233355.in, -1
  br i1 %4, label %137, label %144

137:                                              ; preds = %135
  %138 = load ptr, ptr %1, align 8, !tbaa !15
  %139 = sext i16 %136 to i32
  %140 = shl i32 %.1233355, 2
  %141 = mul i32 %140, %139
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds i8, ptr %138, i64 %142
  br label %144

144:                                              ; preds = %137, %135
  %.4 = phi ptr [ %143, %137 ], [ %.3354, %135 ]
  %145 = icmp sgt i16 %136, 0
  br i1 %145, label %.lr.ph349, label %.loopexit291

.lr.ph349:                                        ; preds = %144, %180
  %.5348 = phi ptr [ %182, %180 ], [ %.4, %144 ]
  %.1237347 = phi i32 [ %181, %180 ], [ 0, %144 ]
  %.5261346 = phi ptr [ %.6262, %180 ], [ %.4260353, %144 ]
  %146 = load i8, ptr %82, align 1, !tbaa !31
  switch i8 %146, label %180 [
    i8 16, label %147
    i8 24, label %159
    i8 32, label %168
  ]

147:                                              ; preds = %.lr.ph349
  %148 = load i16, ptr %.5261346, align 2, !tbaa !32
  %149 = getelementptr inbounds i8, ptr %.5261346, i64 2
  %150 = lshr i16 %148, 7
  %151 = trunc i16 %150 to i8
  %152 = and i8 %151, -8
  store i8 %152, ptr %.5348, align 1, !tbaa !22
  %153 = lshr i16 %148, 2
  %154 = trunc i16 %153 to i8
  %155 = and i8 %154, -8
  %156 = getelementptr inbounds i8, ptr %.5348, i64 1
  store i8 %155, ptr %156, align 1, !tbaa !22
  %.tr289 = trunc i16 %148 to i8
  %157 = shl i8 %.tr289, 3
  %158 = getelementptr inbounds i8, ptr %.5348, i64 2
  store i8 %157, ptr %158, align 1, !tbaa !22
  br label %.sink.split

159:                                              ; preds = %.lr.ph349
  %160 = getelementptr inbounds i8, ptr %.5261346, i64 3
  %161 = getelementptr inbounds i8, ptr %.5261346, i64 2
  %162 = load i8, ptr %161, align 1, !tbaa !23
  store i8 %162, ptr %.5348, align 1, !tbaa !22
  %163 = getelementptr inbounds i8, ptr %.5261346, i64 1
  %164 = load i8, ptr %163, align 1, !tbaa !25
  %165 = getelementptr inbounds i8, ptr %.5348, i64 1
  store i8 %164, ptr %165, align 1, !tbaa !22
  %166 = load i8, ptr %.5261346, align 1, !tbaa !26
  %167 = getelementptr inbounds i8, ptr %.5348, i64 2
  store i8 %166, ptr %167, align 1, !tbaa !22
  br label %.sink.split

168:                                              ; preds = %.lr.ph349
  %169 = getelementptr inbounds i8, ptr %.5261346, i64 4
  %170 = getelementptr inbounds i8, ptr %.5261346, i64 2
  %171 = load i8, ptr %170, align 1, !tbaa !33
  store i8 %171, ptr %.5348, align 1, !tbaa !22
  %172 = getelementptr inbounds i8, ptr %.5261346, i64 1
  %173 = load i8, ptr %172, align 1, !tbaa !35
  %174 = getelementptr inbounds i8, ptr %.5348, i64 1
  store i8 %173, ptr %174, align 1, !tbaa !22
  %175 = load i8, ptr %.5261346, align 1, !tbaa !36
  %176 = getelementptr inbounds i8, ptr %.5348, i64 2
  store i8 %175, ptr %176, align 1, !tbaa !22
  %177 = getelementptr inbounds i8, ptr %.5261346, i64 3
  %178 = load i8, ptr %177, align 1, !tbaa !37
  br label %.sink.split

.sink.split:                                      ; preds = %168, %159, %147
  %.sink = phi i8 [ -1, %147 ], [ -1, %159 ], [ %178, %168 ]
  %.6262.ph = phi ptr [ %149, %147 ], [ %160, %159 ], [ %169, %168 ]
  %179 = getelementptr inbounds i8, ptr %.5348, i64 3
  store i8 %.sink, ptr %179, align 1, !tbaa !22
  br label %180

180:                                              ; preds = %.sink.split, %.lr.ph349
  %.6262 = phi ptr [ %.5261346, %.lr.ph349 ], [ %.6262.ph, %.sink.split ]
  %181 = add nuw nsw i32 %.1237347, 1
  %182 = getelementptr inbounds i8, ptr %.5348, i64 4
  %183 = load i16, ptr %52, align 1, !tbaa !8
  %184 = sext i16 %183 to i32
  %185 = icmp slt i32 %181, %184
  br i1 %185, label %.lr.ph349, label %.loopexit291, !llvm.loop !38

186:                                              ; preds = %76, %76
  %187 = icmp sgt i16 %56, 0
  br i1 %187, label %.lr.ph345, label %.sink.split422

.loopexit296:                                     ; preds = %.loopexit294, %198
  %188 = phi i16 [ %190, %198 ], [ %280, %.loopexit294 ]
  %.8264.lcssa = phi ptr [ %.7263342, %198 ], [ %.10266, %.loopexit294 ]
  %.8.lcssa = phi ptr [ %.7, %198 ], [ %.11, %.loopexit294 ]
  %189 = icmp sgt i32 %.2234344.in, 1
  br i1 %189, label %.lr.ph345, label %.sink.split422, !llvm.loop !39

.lr.ph345:                                        ; preds = %186, %.loopexit296
  %190 = phi i16 [ %188, %.loopexit296 ], [ %53, %186 ]
  %.2234344.in = phi i32 [ %.2234344, %.loopexit296 ], [ %57, %186 ]
  %.6343 = phi ptr [ %.8.lcssa, %.loopexit296 ], [ %61, %186 ]
  %.7263342 = phi ptr [ %.8264.lcssa, %.loopexit296 ], [ %.1257, %186 ]
  %.2234344 = add nsw i32 %.2234344.in, -1
  br i1 %4, label %191, label %198

191:                                              ; preds = %.lr.ph345
  %192 = load ptr, ptr %1, align 8, !tbaa !15
  %193 = sext i16 %190 to i32
  %194 = shl i32 %.2234344, 2
  %195 = mul i32 %194, %193
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds i8, ptr %192, i64 %196
  br label %198

198:                                              ; preds = %191, %.lr.ph345
  %.7 = phi ptr [ %197, %191 ], [ %.6343, %.lr.ph345 ]
  %199 = icmp sgt i16 %190, 0
  br i1 %199, label %.lr.ph338, label %.loopexit296

.lr.ph338:                                        ; preds = %198, %.loopexit294
  %.8337 = phi ptr [ %.11, %.loopexit294 ], [ %.7, %198 ]
  %.2238336 = phi i32 [ %279, %.loopexit294 ], [ 0, %198 ]
  %.8264335 = phi ptr [ %.10266, %.loopexit294 ], [ %.7263342, %198 ]
  %200 = getelementptr inbounds i8, ptr %.8264335, i64 1
  %201 = load i8, ptr %.8264335, align 1, !tbaa !22
  %202 = and i8 %201, 127
  %.not286 = icmp sgt i8 %201, -1
  br i1 %.not286, label %.preheader293.preheader, label %205

.preheader293.preheader:                          ; preds = %.lr.ph338
  %203 = icmp eq i8 %202, 0
  br i1 %203, label %.loopexit294.loopexit.unr-lcssa, label %.preheader293.preheader.new

.preheader293.preheader.new:                      ; preds = %.preheader293.preheader
  %204 = add nuw i8 %201, 1
  %unroll_iter489 = and i8 %204, -2
  br label %.preheader293

205:                                              ; preds = %.lr.ph338
  %206 = load i8, ptr %200, align 1, !tbaa !22
  %207 = zext i8 %206 to i64
  %208 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0256, i64 %207
  %209 = getelementptr inbounds i8, ptr %208, i64 2
  %210 = getelementptr inbounds i8, ptr %208, i64 1
  %211 = and i8 %201, 127
  %212 = icmp eq i8 %202, 0
  br i1 %212, label %.loopexit294.loopexit370.unr-lcssa, label %.new476

.new476:                                          ; preds = %205
  %213 = add nuw i8 %202, 1
  %unroll_iter482 = and i8 %213, -2
  br label %214

214:                                              ; preds = %214, %.new476
  %.9330 = phi ptr [ %.8337, %.new476 ], [ %228, %214 ]
  %niter483 = phi i8 [ 0, %.new476 ], [ %niter483.next.1, %214 ]
  %215 = load i8, ptr %209, align 1, !tbaa !23
  store i8 %215, ptr %.9330, align 1, !tbaa !22
  %216 = load i8, ptr %210, align 1, !tbaa !25
  %217 = getelementptr inbounds i8, ptr %.9330, i64 1
  store i8 %216, ptr %217, align 1, !tbaa !22
  %218 = load i8, ptr %208, align 1, !tbaa !26
  %219 = getelementptr inbounds i8, ptr %.9330, i64 2
  store i8 %218, ptr %219, align 1, !tbaa !22
  %220 = getelementptr inbounds i8, ptr %.9330, i64 3
  store i8 -1, ptr %220, align 1, !tbaa !22
  %221 = getelementptr inbounds i8, ptr %.9330, i64 4
  %222 = load i8, ptr %209, align 1, !tbaa !23
  store i8 %222, ptr %221, align 1, !tbaa !22
  %223 = load i8, ptr %210, align 1, !tbaa !25
  %224 = getelementptr inbounds i8, ptr %.9330, i64 5
  store i8 %223, ptr %224, align 1, !tbaa !22
  %225 = load i8, ptr %208, align 1, !tbaa !26
  %226 = getelementptr inbounds i8, ptr %.9330, i64 6
  store i8 %225, ptr %226, align 1, !tbaa !22
  %227 = getelementptr inbounds i8, ptr %.9330, i64 7
  store i8 -1, ptr %227, align 1, !tbaa !22
  %228 = getelementptr inbounds i8, ptr %.9330, i64 8
  %niter483.next.1 = add i8 %niter483, 2
  %niter483.ncmp.1 = icmp eq i8 %niter483.next.1, %unroll_iter482
  br i1 %niter483.ncmp.1, label %.loopexit294.loopexit370.unr-lcssa, label %214, !llvm.loop !40

.preheader293:                                    ; preds = %.preheader293, %.preheader293.preheader.new
  %.10334 = phi ptr [ %.8337, %.preheader293.preheader.new ], [ %254, %.preheader293 ]
  %.9265332 = phi ptr [ %200, %.preheader293.preheader.new ], [ %242, %.preheader293 ]
  %niter490 = phi i8 [ 0, %.preheader293.preheader.new ], [ %niter490.next.1, %.preheader293 ]
  %229 = getelementptr inbounds i8, ptr %.9265332, i64 1
  %230 = load i8, ptr %.9265332, align 1, !tbaa !22
  %231 = zext i8 %230 to i64
  %232 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0256, i64 %231
  %233 = getelementptr inbounds i8, ptr %232, i64 2
  %234 = load i8, ptr %233, align 1, !tbaa !23
  store i8 %234, ptr %.10334, align 1, !tbaa !22
  %235 = getelementptr inbounds i8, ptr %232, i64 1
  %236 = load i8, ptr %235, align 1, !tbaa !25
  %237 = getelementptr inbounds i8, ptr %.10334, i64 1
  store i8 %236, ptr %237, align 1, !tbaa !22
  %238 = load i8, ptr %232, align 1, !tbaa !26
  %239 = getelementptr inbounds i8, ptr %.10334, i64 2
  store i8 %238, ptr %239, align 1, !tbaa !22
  %240 = getelementptr inbounds i8, ptr %.10334, i64 3
  store i8 -1, ptr %240, align 1, !tbaa !22
  %241 = getelementptr inbounds i8, ptr %.10334, i64 4
  %242 = getelementptr inbounds i8, ptr %.9265332, i64 2
  %243 = load i8, ptr %229, align 1, !tbaa !22
  %244 = zext i8 %243 to i64
  %245 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0256, i64 %244
  %246 = getelementptr inbounds i8, ptr %245, i64 2
  %247 = load i8, ptr %246, align 1, !tbaa !23
  store i8 %247, ptr %241, align 1, !tbaa !22
  %248 = getelementptr inbounds i8, ptr %245, i64 1
  %249 = load i8, ptr %248, align 1, !tbaa !25
  %250 = getelementptr inbounds i8, ptr %.10334, i64 5
  store i8 %249, ptr %250, align 1, !tbaa !22
  %251 = load i8, ptr %245, align 1, !tbaa !26
  %252 = getelementptr inbounds i8, ptr %.10334, i64 6
  store i8 %251, ptr %252, align 1, !tbaa !22
  %253 = getelementptr inbounds i8, ptr %.10334, i64 7
  store i8 -1, ptr %253, align 1, !tbaa !22
  %254 = getelementptr inbounds i8, ptr %.10334, i64 8
  %niter490.next.1 = add i8 %niter490, 2
  %niter490.ncmp.1 = icmp eq i8 %niter490.next.1, %unroll_iter489
  br i1 %niter490.ncmp.1, label %.loopexit294.loopexit.unr-lcssa, label %.preheader293, !llvm.loop !41

.loopexit294.loopexit370.unr-lcssa:               ; preds = %214, %205
  %.lcssa451.ph = phi ptr [ poison, %205 ], [ %228, %214 ]
  %.9330.unr = phi ptr [ %.8337, %205 ], [ %228, %214 ]
  %255 = and i8 %201, 1
  %lcmp.mod480.not.not = icmp eq i8 %255, 0
  br i1 %lcmp.mod480.not.not, label %.loopexit294.loopexit370.epilog-lcssa, label %.loopexit294.loopexit370

.loopexit294.loopexit370.epilog-lcssa:            ; preds = %.loopexit294.loopexit370.unr-lcssa
  %256 = load i8, ptr %209, align 1, !tbaa !23
  store i8 %256, ptr %.9330.unr, align 1, !tbaa !22
  %257 = load i8, ptr %210, align 1, !tbaa !25
  %258 = getelementptr inbounds i8, ptr %.9330.unr, i64 1
  store i8 %257, ptr %258, align 1, !tbaa !22
  %259 = load i8, ptr %208, align 1, !tbaa !26
  %260 = getelementptr inbounds i8, ptr %.9330.unr, i64 2
  store i8 %259, ptr %260, align 1, !tbaa !22
  %261 = getelementptr inbounds i8, ptr %.9330.unr, i64 3
  store i8 -1, ptr %261, align 1, !tbaa !22
  %262 = getelementptr inbounds i8, ptr %.9330.unr, i64 4
  br label %.loopexit294.loopexit370

.loopexit294.loopexit370:                         ; preds = %.loopexit294.loopexit370.unr-lcssa, %.loopexit294.loopexit370.epilog-lcssa
  %.lcssa451 = phi ptr [ %.lcssa451.ph, %.loopexit294.loopexit370.unr-lcssa ], [ %262, %.loopexit294.loopexit370.epilog-lcssa ]
  %263 = getelementptr inbounds i8, ptr %.8264335, i64 2
  br label %.loopexit294

.loopexit294.loopexit.unr-lcssa:                  ; preds = %.preheader293, %.preheader293.preheader
  %.lcssa453.ph = phi ptr [ poison, %.preheader293.preheader ], [ %242, %.preheader293 ]
  %.lcssa452.ph = phi ptr [ poison, %.preheader293.preheader ], [ %254, %.preheader293 ]
  %.10334.unr = phi ptr [ %.8337, %.preheader293.preheader ], [ %254, %.preheader293 ]
  %.9265332.unr = phi ptr [ %200, %.preheader293.preheader ], [ %242, %.preheader293 ]
  %264 = and i8 %201, 1
  %lcmp.mod486.not.not = icmp eq i8 %264, 0
  br i1 %lcmp.mod486.not.not, label %.preheader293.epil, label %.loopexit294

.preheader293.epil:                               ; preds = %.loopexit294.loopexit.unr-lcssa
  %265 = getelementptr inbounds i8, ptr %.9265332.unr, i64 1
  %266 = load i8, ptr %.9265332.unr, align 1, !tbaa !22
  %267 = zext i8 %266 to i64
  %268 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0256, i64 %267
  %269 = getelementptr inbounds i8, ptr %268, i64 2
  %270 = load i8, ptr %269, align 1, !tbaa !23
  store i8 %270, ptr %.10334.unr, align 1, !tbaa !22
  %271 = getelementptr inbounds i8, ptr %268, i64 1
  %272 = load i8, ptr %271, align 1, !tbaa !25
  %273 = getelementptr inbounds i8, ptr %.10334.unr, i64 1
  store i8 %272, ptr %273, align 1, !tbaa !22
  %274 = load i8, ptr %268, align 1, !tbaa !26
  %275 = getelementptr inbounds i8, ptr %.10334.unr, i64 2
  store i8 %274, ptr %275, align 1, !tbaa !22
  %276 = getelementptr inbounds i8, ptr %.10334.unr, i64 3
  store i8 -1, ptr %276, align 1, !tbaa !22
  %277 = getelementptr inbounds i8, ptr %.10334.unr, i64 4
  br label %.loopexit294

.loopexit294:                                     ; preds = %.preheader293.epil, %.loopexit294.loopexit.unr-lcssa, %.loopexit294.loopexit370
  %.sink418.in = phi i8 [ %211, %.loopexit294.loopexit370 ], [ %201, %.loopexit294.loopexit.unr-lcssa ], [ %201, %.preheader293.epil ]
  %.10266 = phi ptr [ %263, %.loopexit294.loopexit370 ], [ %.lcssa453.ph, %.loopexit294.loopexit.unr-lcssa ], [ %265, %.preheader293.epil ]
  %.11 = phi ptr [ %.lcssa451, %.loopexit294.loopexit370 ], [ %.lcssa452.ph, %.loopexit294.loopexit.unr-lcssa ], [ %277, %.preheader293.epil ]
  %.sink418 = zext nneg i8 %.sink418.in to i32
  %278 = add i32 %.2238336, 1
  %279 = add i32 %278, %.sink418
  %280 = load i16, ptr %52, align 1, !tbaa !8
  %281 = sext i16 %280 to i32
  %282 = icmp slt i32 %279, %281
  br i1 %282, label %.lr.ph338, label %.loopexit296, !llvm.loop !42

.loopexit303:                                     ; preds = %.loopexit299, %294
  %283 = phi i16 [ %286, %294 ], [ %452, %.loopexit299 ]
  %.12268.lcssa = phi ptr [ %.11267324, %294 ], [ %.15271, %.loopexit299 ]
  %.14.lcssa = phi ptr [ %.13, %294 ], [ %.19, %.loopexit299 ]
  %284 = icmp sgt i32 %.3235326.in, 1
  br i1 %284, label %285, label %.sink.split422, !llvm.loop !43

285:                                              ; preds = %.lr.ph327, %.loopexit303
  %286 = phi i16 [ %53, %.lr.ph327 ], [ %283, %.loopexit303 ]
  %.3235326.in = phi i32 [ %57, %.lr.ph327 ], [ %.3235326, %.loopexit303 ]
  %.12325 = phi ptr [ %61, %.lr.ph327 ], [ %.14.lcssa, %.loopexit303 ]
  %.11267324 = phi ptr [ %.1257, %.lr.ph327 ], [ %.12268.lcssa, %.loopexit303 ]
  %.3235326 = add nsw i32 %.3235326.in, -1
  br i1 %4, label %287, label %294

287:                                              ; preds = %285
  %288 = load ptr, ptr %1, align 8, !tbaa !15
  %289 = sext i16 %286 to i32
  %290 = shl i32 %.3235326, 2
  %291 = mul i32 %290, %289
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds i8, ptr %288, i64 %292
  br label %294

294:                                              ; preds = %287, %285
  %.13 = phi ptr [ %293, %287 ], [ %.12325, %285 ]
  %295 = icmp sgt i16 %286, 0
  br i1 %295, label %.lr.ph, label %.loopexit303

.lr.ph:                                           ; preds = %294, %.loopexit299
  %.14321 = phi ptr [ %.19, %.loopexit299 ], [ %.13, %294 ]
  %.6242320 = phi i32 [ %.11247, %.loopexit299 ], [ 0, %294 ]
  %.12268319 = phi ptr [ %.15271, %.loopexit299 ], [ %.11267324, %294 ]
  %296 = getelementptr inbounds i8, ptr %.12268319, i64 1
  %297 = load i8, ptr %.12268319, align 1, !tbaa !22
  %298 = and i8 %297, 127
  %299 = add nuw i8 %298, 1
  %.not284 = icmp sgt i8 %297, -1
  br i1 %.not284, label %.preheader298, label %302

.preheader298:                                    ; preds = %.lr.ph
  %300 = zext i8 %299 to i32
  %301 = zext nneg i8 %297 to i32
  br label %384

302:                                              ; preds = %.lr.ph
  %303 = load i8, ptr %80, align 1, !tbaa !31
  switch i8 %303, label %.loopexit299 [
    i8 16, label %304
    i8 24, label %335
    i8 32, label %358
  ]

304:                                              ; preds = %302
  %305 = load i16, ptr %296, align 2, !tbaa !32
  %306 = zext i8 %299 to i32
  %307 = lshr i16 %305, 7
  %308 = trunc i16 %307 to i8
  %309 = and i8 %308, -8
  %310 = lshr i16 %305, 2
  %311 = trunc i16 %310 to i8
  %312 = and i8 %311, -8
  %.tr285 = trunc i16 %305 to i8
  %313 = shl i8 %.tr285, 3
  %314 = and i8 %297, 127
  %315 = zext nneg i8 %314 to i32
  %316 = and i8 %297, 127
  %xtraiter471 = and i32 %306, 3
  %317 = icmp ult i8 %316, 3
  br i1 %317, label %.loopexit299.loopexit372.unr-lcssa, label %.new469

.new469:                                          ; preds = %304
  %unroll_iter474 = and i32 %306, 252
  br label %318

318:                                              ; preds = %318, %.new469
  %.15314 = phi ptr [ %.14321, %.new469 ], [ %334, %318 ]
  %niter475 = phi i32 [ 0, %.new469 ], [ %niter475.next.3, %318 ]
  store i8 %309, ptr %.15314, align 1, !tbaa !22
  %319 = getelementptr inbounds i8, ptr %.15314, i64 1
  store i8 %312, ptr %319, align 1, !tbaa !22
  %320 = getelementptr inbounds i8, ptr %.15314, i64 2
  store i8 %313, ptr %320, align 1, !tbaa !22
  %321 = getelementptr inbounds i8, ptr %.15314, i64 3
  store i8 -1, ptr %321, align 1, !tbaa !22
  %322 = getelementptr inbounds i8, ptr %.15314, i64 4
  store i8 %309, ptr %322, align 1, !tbaa !22
  %323 = getelementptr inbounds i8, ptr %.15314, i64 5
  store i8 %312, ptr %323, align 1, !tbaa !22
  %324 = getelementptr inbounds i8, ptr %.15314, i64 6
  store i8 %313, ptr %324, align 1, !tbaa !22
  %325 = getelementptr inbounds i8, ptr %.15314, i64 7
  store i8 -1, ptr %325, align 1, !tbaa !22
  %326 = getelementptr inbounds i8, ptr %.15314, i64 8
  store i8 %309, ptr %326, align 1, !tbaa !22
  %327 = getelementptr inbounds i8, ptr %.15314, i64 9
  store i8 %312, ptr %327, align 1, !tbaa !22
  %328 = getelementptr inbounds i8, ptr %.15314, i64 10
  store i8 %313, ptr %328, align 1, !tbaa !22
  %329 = getelementptr inbounds i8, ptr %.15314, i64 11
  store i8 -1, ptr %329, align 1, !tbaa !22
  %330 = getelementptr inbounds i8, ptr %.15314, i64 12
  store i8 %309, ptr %330, align 1, !tbaa !22
  %331 = getelementptr inbounds i8, ptr %.15314, i64 13
  store i8 %312, ptr %331, align 1, !tbaa !22
  %332 = getelementptr inbounds i8, ptr %.15314, i64 14
  store i8 %313, ptr %332, align 1, !tbaa !22
  %333 = getelementptr inbounds i8, ptr %.15314, i64 15
  store i8 -1, ptr %333, align 1, !tbaa !22
  %334 = getelementptr inbounds i8, ptr %.15314, i64 16
  %niter475.next.3 = add i32 %niter475, 4
  %niter475.ncmp.3 = icmp eq i32 %niter475.next.3, %unroll_iter474
  br i1 %niter475.ncmp.3, label %.loopexit299.loopexit372.unr-lcssa, label %318, !llvm.loop !44

335:                                              ; preds = %302
  %336 = zext i8 %299 to i32
  %337 = getelementptr inbounds i8, ptr %.12268319, i64 3
  %338 = getelementptr inbounds i8, ptr %.12268319, i64 2
  %339 = and i8 %297, 127
  %340 = zext nneg i8 %339 to i32
  %341 = and i8 %297, 127
  %xtraiter464 = and i32 %336, 1
  %342 = icmp eq i8 %341, 0
  br i1 %342, label %.loopexit299.loopexit373.unr-lcssa, label %.new462

.new462:                                          ; preds = %335
  %unroll_iter467 = and i32 %336, 254
  br label %343

343:                                              ; preds = %343, %.new462
  %.16311 = phi ptr [ %.14321, %.new462 ], [ %357, %343 ]
  %niter468 = phi i32 [ 0, %.new462 ], [ %niter468.next.1, %343 ]
  %344 = load i8, ptr %337, align 1, !tbaa !23
  store i8 %344, ptr %.16311, align 1, !tbaa !22
  %345 = load i8, ptr %338, align 1, !tbaa !25
  %346 = getelementptr inbounds i8, ptr %.16311, i64 1
  store i8 %345, ptr %346, align 1, !tbaa !22
  %347 = load i8, ptr %296, align 1, !tbaa !26
  %348 = getelementptr inbounds i8, ptr %.16311, i64 2
  store i8 %347, ptr %348, align 1, !tbaa !22
  %349 = getelementptr inbounds i8, ptr %.16311, i64 3
  store i8 -1, ptr %349, align 1, !tbaa !22
  %350 = getelementptr inbounds i8, ptr %.16311, i64 4
  %351 = load i8, ptr %337, align 1, !tbaa !23
  store i8 %351, ptr %350, align 1, !tbaa !22
  %352 = load i8, ptr %338, align 1, !tbaa !25
  %353 = getelementptr inbounds i8, ptr %.16311, i64 5
  store i8 %352, ptr %353, align 1, !tbaa !22
  %354 = load i8, ptr %296, align 1, !tbaa !26
  %355 = getelementptr inbounds i8, ptr %.16311, i64 6
  store i8 %354, ptr %355, align 1, !tbaa !22
  %356 = getelementptr inbounds i8, ptr %.16311, i64 7
  store i8 -1, ptr %356, align 1, !tbaa !22
  %357 = getelementptr inbounds i8, ptr %.16311, i64 8
  %niter468.next.1 = add i32 %niter468, 2
  %niter468.ncmp.1 = icmp eq i32 %niter468.next.1, %unroll_iter467
  br i1 %niter468.ncmp.1, label %.loopexit299.loopexit373.unr-lcssa, label %343, !llvm.loop !45

358:                                              ; preds = %302
  %359 = zext i8 %299 to i32
  %360 = getelementptr inbounds i8, ptr %.12268319, i64 3
  %361 = getelementptr inbounds i8, ptr %.12268319, i64 2
  %362 = getelementptr inbounds i8, ptr %.12268319, i64 4
  %363 = and i8 %297, 127
  %364 = zext nneg i8 %363 to i32
  %365 = and i8 %297, 127
  %xtraiter = and i32 %359, 1
  %366 = icmp eq i8 %365, 0
  br i1 %366, label %.loopexit299.loopexit374.unr-lcssa, label %.new

.new:                                             ; preds = %358
  %unroll_iter = and i32 %359, 254
  br label %367

367:                                              ; preds = %367, %.new
  %.17308 = phi ptr [ %.14321, %.new ], [ %383, %367 ]
  %niter = phi i32 [ 0, %.new ], [ %niter.next.1, %367 ]
  %368 = load i8, ptr %360, align 1, !tbaa !33
  store i8 %368, ptr %.17308, align 1, !tbaa !22
  %369 = load i8, ptr %361, align 1, !tbaa !35
  %370 = getelementptr inbounds i8, ptr %.17308, i64 1
  store i8 %369, ptr %370, align 1, !tbaa !22
  %371 = load i8, ptr %296, align 1, !tbaa !36
  %372 = getelementptr inbounds i8, ptr %.17308, i64 2
  store i8 %371, ptr %372, align 1, !tbaa !22
  %373 = load i8, ptr %362, align 1, !tbaa !37
  %374 = getelementptr inbounds i8, ptr %.17308, i64 3
  store i8 %373, ptr %374, align 1, !tbaa !22
  %375 = getelementptr inbounds i8, ptr %.17308, i64 4
  %376 = load i8, ptr %360, align 1, !tbaa !33
  store i8 %376, ptr %375, align 1, !tbaa !22
  %377 = load i8, ptr %361, align 1, !tbaa !35
  %378 = getelementptr inbounds i8, ptr %.17308, i64 5
  store i8 %377, ptr %378, align 1, !tbaa !22
  %379 = load i8, ptr %296, align 1, !tbaa !36
  %380 = getelementptr inbounds i8, ptr %.17308, i64 6
  store i8 %379, ptr %380, align 1, !tbaa !22
  %381 = load i8, ptr %362, align 1, !tbaa !37
  %382 = getelementptr inbounds i8, ptr %.17308, i64 7
  store i8 %381, ptr %382, align 1, !tbaa !22
  %383 = getelementptr inbounds i8, ptr %.17308, i64 8
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit299.loopexit374.unr-lcssa, label %367, !llvm.loop !46

384:                                              ; preds = %.preheader298, %419
  %.18318 = phi ptr [ %.14321, %.preheader298 ], [ %421, %419 ]
  %.3251316 = phi i32 [ 0, %.preheader298 ], [ %420, %419 ]
  %.13269315 = phi ptr [ %296, %.preheader298 ], [ %.14270, %419 ]
  %385 = load i8, ptr %80, align 1, !tbaa !31
  switch i8 %385, label %419 [
    i8 16, label %386
    i8 24, label %398
    i8 32, label %407
  ]

386:                                              ; preds = %384
  %387 = load i16, ptr %.13269315, align 2, !tbaa !32
  %388 = getelementptr inbounds i8, ptr %.13269315, i64 2
  %389 = lshr i16 %387, 7
  %390 = trunc i16 %389 to i8
  %391 = and i8 %390, -8
  store i8 %391, ptr %.18318, align 1, !tbaa !22
  %392 = lshr i16 %387, 2
  %393 = trunc i16 %392 to i8
  %394 = and i8 %393, -8
  %395 = getelementptr inbounds i8, ptr %.18318, i64 1
  store i8 %394, ptr %395, align 1, !tbaa !22
  %.tr = trunc i16 %387 to i8
  %396 = shl i8 %.tr, 3
  %397 = getelementptr inbounds i8, ptr %.18318, i64 2
  store i8 %396, ptr %397, align 1, !tbaa !22
  br label %.sink.split419

398:                                              ; preds = %384
  %399 = getelementptr inbounds i8, ptr %.13269315, i64 3
  %400 = getelementptr inbounds i8, ptr %.13269315, i64 2
  %401 = load i8, ptr %400, align 1, !tbaa !23
  store i8 %401, ptr %.18318, align 1, !tbaa !22
  %402 = getelementptr inbounds i8, ptr %.13269315, i64 1
  %403 = load i8, ptr %402, align 1, !tbaa !25
  %404 = getelementptr inbounds i8, ptr %.18318, i64 1
  store i8 %403, ptr %404, align 1, !tbaa !22
  %405 = load i8, ptr %.13269315, align 1, !tbaa !26
  %406 = getelementptr inbounds i8, ptr %.18318, i64 2
  store i8 %405, ptr %406, align 1, !tbaa !22
  br label %.sink.split419

407:                                              ; preds = %384
  %408 = getelementptr inbounds i8, ptr %.13269315, i64 4
  %409 = getelementptr inbounds i8, ptr %.13269315, i64 2
  %410 = load i8, ptr %409, align 1, !tbaa !33
  store i8 %410, ptr %.18318, align 1, !tbaa !22
  %411 = getelementptr inbounds i8, ptr %.13269315, i64 1
  %412 = load i8, ptr %411, align 1, !tbaa !35
  %413 = getelementptr inbounds i8, ptr %.18318, i64 1
  store i8 %412, ptr %413, align 1, !tbaa !22
  %414 = load i8, ptr %.13269315, align 1, !tbaa !36
  %415 = getelementptr inbounds i8, ptr %.18318, i64 2
  store i8 %414, ptr %415, align 1, !tbaa !22
  %416 = getelementptr inbounds i8, ptr %.13269315, i64 3
  %417 = load i8, ptr %416, align 1, !tbaa !37
  br label %.sink.split419

.sink.split419:                                   ; preds = %407, %398, %386
  %.sink420 = phi i8 [ -1, %386 ], [ -1, %398 ], [ %417, %407 ]
  %.14270.ph = phi ptr [ %388, %386 ], [ %399, %398 ], [ %408, %407 ]
  %418 = getelementptr inbounds i8, ptr %.18318, i64 3
  store i8 %.sink420, ptr %418, align 1, !tbaa !22
  br label %419

419:                                              ; preds = %.sink.split419, %384
  %.14270 = phi ptr [ %.13269315, %384 ], [ %.14270.ph, %.sink.split419 ]
  %420 = add nuw nsw i32 %.3251316, 1
  %421 = getelementptr inbounds i8, ptr %.18318, i64 4
  %exitcond394.not = icmp eq i32 %420, %300
  br i1 %exitcond394.not, label %.loopexit299.loopexit, label %384, !llvm.loop !47

.loopexit299.loopexit:                            ; preds = %419
  %422 = add i32 %.6242320, 1
  %423 = add i32 %422, %301
  br label %.loopexit299

.loopexit299.loopexit372.unr-lcssa:               ; preds = %318, %304
  %.lcssa458.ph = phi ptr [ poison, %304 ], [ %334, %318 ]
  %.15314.unr = phi ptr [ %.14321, %304 ], [ %334, %318 ]
  %lcmp.mod472.not = icmp eq i32 %xtraiter471, 0
  br i1 %lcmp.mod472.not, label %.loopexit299.loopexit372, label %.epil.preheader470

.epil.preheader470:                               ; preds = %.loopexit299.loopexit372.unr-lcssa, %.epil.preheader470
  %.15314.epil = phi ptr [ %427, %.epil.preheader470 ], [ %.15314.unr, %.loopexit299.loopexit372.unr-lcssa ]
  %epil.iter = phi i32 [ %epil.iter.next, %.epil.preheader470 ], [ 0, %.loopexit299.loopexit372.unr-lcssa ]
  store i8 %309, ptr %.15314.epil, align 1, !tbaa !22
  %424 = getelementptr inbounds i8, ptr %.15314.epil, i64 1
  store i8 %312, ptr %424, align 1, !tbaa !22
  %425 = getelementptr inbounds i8, ptr %.15314.epil, i64 2
  store i8 %313, ptr %425, align 1, !tbaa !22
  %426 = getelementptr inbounds i8, ptr %.15314.epil, i64 3
  store i8 -1, ptr %426, align 1, !tbaa !22
  %427 = getelementptr inbounds i8, ptr %.15314.epil, i64 4
  %epil.iter.next = add i32 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i32 %epil.iter.next, %xtraiter471
  br i1 %epil.iter.cmp.not, label %.loopexit299.loopexit372, label %.epil.preheader470, !llvm.loop !48

.loopexit299.loopexit372:                         ; preds = %.epil.preheader470, %.loopexit299.loopexit372.unr-lcssa
  %.lcssa458 = phi ptr [ %.lcssa458.ph, %.loopexit299.loopexit372.unr-lcssa ], [ %427, %.epil.preheader470 ]
  %428 = getelementptr inbounds i8, ptr %.12268319, i64 3
  %429 = add i32 %.6242320, 1
  %430 = add i32 %429, %315
  br label %.loopexit299

.loopexit299.loopexit373.unr-lcssa:               ; preds = %343, %335
  %.lcssa457.ph = phi ptr [ poison, %335 ], [ %357, %343 ]
  %.16311.unr = phi ptr [ %.14321, %335 ], [ %357, %343 ]
  %lcmp.mod465.not = icmp eq i32 %xtraiter464, 0
  br i1 %lcmp.mod465.not, label %.loopexit299.loopexit373, label %.loopexit299.loopexit373.epilog-lcssa

.loopexit299.loopexit373.epilog-lcssa:            ; preds = %.loopexit299.loopexit373.unr-lcssa
  %431 = load i8, ptr %337, align 1, !tbaa !23
  store i8 %431, ptr %.16311.unr, align 1, !tbaa !22
  %432 = load i8, ptr %338, align 1, !tbaa !25
  %433 = getelementptr inbounds i8, ptr %.16311.unr, i64 1
  store i8 %432, ptr %433, align 1, !tbaa !22
  %434 = load i8, ptr %296, align 1, !tbaa !26
  %435 = getelementptr inbounds i8, ptr %.16311.unr, i64 2
  store i8 %434, ptr %435, align 1, !tbaa !22
  %436 = getelementptr inbounds i8, ptr %.16311.unr, i64 3
  store i8 -1, ptr %436, align 1, !tbaa !22
  %437 = getelementptr inbounds i8, ptr %.16311.unr, i64 4
  br label %.loopexit299.loopexit373

.loopexit299.loopexit373:                         ; preds = %.loopexit299.loopexit373.unr-lcssa, %.loopexit299.loopexit373.epilog-lcssa
  %.lcssa457 = phi ptr [ %.lcssa457.ph, %.loopexit299.loopexit373.unr-lcssa ], [ %437, %.loopexit299.loopexit373.epilog-lcssa ]
  %438 = getelementptr inbounds i8, ptr %.12268319, i64 4
  %439 = add i32 %.6242320, 1
  %440 = add i32 %439, %340
  br label %.loopexit299

.loopexit299.loopexit374.unr-lcssa:               ; preds = %367, %358
  %.lcssa456.ph = phi ptr [ poison, %358 ], [ %383, %367 ]
  %.17308.unr = phi ptr [ %.14321, %358 ], [ %383, %367 ]
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit299.loopexit374, label %.loopexit299.loopexit374.epilog-lcssa

.loopexit299.loopexit374.epilog-lcssa:            ; preds = %.loopexit299.loopexit374.unr-lcssa
  %441 = load i8, ptr %360, align 1, !tbaa !33
  store i8 %441, ptr %.17308.unr, align 1, !tbaa !22
  %442 = load i8, ptr %361, align 1, !tbaa !35
  %443 = getelementptr inbounds i8, ptr %.17308.unr, i64 1
  store i8 %442, ptr %443, align 1, !tbaa !22
  %444 = load i8, ptr %296, align 1, !tbaa !36
  %445 = getelementptr inbounds i8, ptr %.17308.unr, i64 2
  store i8 %444, ptr %445, align 1, !tbaa !22
  %446 = load i8, ptr %362, align 1, !tbaa !37
  %447 = getelementptr inbounds i8, ptr %.17308.unr, i64 3
  store i8 %446, ptr %447, align 1, !tbaa !22
  %448 = getelementptr inbounds i8, ptr %.17308.unr, i64 4
  br label %.loopexit299.loopexit374

.loopexit299.loopexit374:                         ; preds = %.loopexit299.loopexit374.unr-lcssa, %.loopexit299.loopexit374.epilog-lcssa
  %.lcssa456 = phi ptr [ %.lcssa456.ph, %.loopexit299.loopexit374.unr-lcssa ], [ %448, %.loopexit299.loopexit374.epilog-lcssa ]
  %449 = getelementptr inbounds i8, ptr %.12268319, i64 5
  %450 = add i32 %.6242320, 1
  %451 = add i32 %450, %364
  br label %.loopexit299

.loopexit299:                                     ; preds = %.loopexit299.loopexit374, %.loopexit299.loopexit373, %.loopexit299.loopexit372, %.loopexit299.loopexit, %302
  %.15271 = phi ptr [ %296, %302 ], [ %.14270, %.loopexit299.loopexit ], [ %428, %.loopexit299.loopexit372 ], [ %438, %.loopexit299.loopexit373 ], [ %449, %.loopexit299.loopexit374 ]
  %.11247 = phi i32 [ %.6242320, %302 ], [ %423, %.loopexit299.loopexit ], [ %430, %.loopexit299.loopexit372 ], [ %440, %.loopexit299.loopexit373 ], [ %451, %.loopexit299.loopexit374 ]
  %.19 = phi ptr [ %.14321, %302 ], [ %421, %.loopexit299.loopexit ], [ %.lcssa458, %.loopexit299.loopexit372 ], [ %.lcssa457, %.loopexit299.loopexit373 ], [ %.lcssa456, %.loopexit299.loopexit374 ]
  %452 = load i16, ptr %52, align 1, !tbaa !8
  %453 = sext i16 %452 to i32
  %454 = icmp slt i32 %.11247, %453
  br i1 %454, label %.lr.ph, label %.loopexit303, !llvm.loop !50

455:                                              ; preds = %76
  call void @_ZdaPv(ptr noundef nonnull %1) #9
  br label %.sink.split422

.sink.split422:                                   ; preds = %.loopexit303, %.loopexit296, %.loopexit291, %.loopexit, %.loopexit.us, %76, %83, %.preheader, %186, %.preheader304, %50, %455
  %.1.ph = phi i32 [ 0, %455 ], [ -1, %50 ], [ 1, %.preheader304 ], [ 1, %186 ], [ 1, %.preheader ], [ 1, %83 ], [ 1, %76 ], [ 1, %.loopexit.us ], [ 1, %.loopexit ], [ 1, %.loopexit291 ], [ 1, %.loopexit296 ], [ 1, %.loopexit303 ]
  call void @_ZdaPv(ptr noundef nonnull %30) #9
  br label %456

456:                                              ; preds = %.sink.split422, %15
  %.1 = phi i32 [ 0, %15 ], [ %.1.ph, %.sink.split422 ]
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %6) #7
  call void @llvm.lifetime.end.p0(i64 520, ptr nonnull %6) #7
  ret i32 %.1

457:                                              ; preds = %39, %41, %43, %16
  %.pn.pn = phi { ptr, i32 } [ %17, %16 ], [ %44, %43 ], [ %42, %41 ], [ %40, %39 ]
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %6) #7
  call void @llvm.lifetime.end.p0(i64 520, ptr nonnull %6) #7
  resume { ptr, i32 } %.pn.pn
}

; 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 uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(256)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef, i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZStorSt13_Ios_OpenmodeS_(i32 noundef, i32 noundef) local_unnamed_addr #2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare noundef zeroext i1 @_ZNKSt9basic_iosIcSt11char_traitsIcEE4failEv(ptr noundef nonnull align 8 dereferenceable(264)) local_unnamed_addr #0 align 2

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNSi5seekgElSt12_Ios_Seekdir(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i32 noundef) local_unnamed_addr #3

declare { i64, i64 } @_ZNSi5tellgEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #5

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNSi4readEPcl(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(256)) local_unnamed_addr #0 align 2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256)) unnamed_addr #4 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !11, i64 12}
!9 = !{!"_ZTS12tagTGAHEADER", !10, i64 0, !10, i64 1, !10, i64 2, !11, i64 3, !11, i64 5, !10, i64 7, !11, i64 8, !11, i64 10, !11, i64 12, !11, i64 14, !10, i64 16, !10, i64 17}
!10 = !{!"omnipotent char", !7, i64 0}
!11 = !{!"short", !10, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !10, i64 0}
!14 = !{!9, !11, i64 14}
!15 = !{!16, !16, i64 0}
!16 = !{!"any pointer", !10, i64 0}
!17 = !{!9, !10, i64 0}
!18 = !{!9, !10, i64 1}
!19 = !{!9, !11, i64 5}
!20 = !{!9, !10, i64 7}
!21 = !{!9, !10, i64 2}
!22 = !{!10, !10, i64 0}
!23 = !{!24, !10, i64 2}
!24 = !{!"_ZTS12tagRGBTRIPLE", !10, i64 0, !10, i64 1, !10, i64 2}
!25 = !{!24, !10, i64 1}
!26 = !{!24, !10, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = distinct !{!29, !28}
!30 = distinct !{!30, !28}
!31 = !{!9, !10, i64 16}
!32 = !{!11, !11, i64 0}
!33 = !{!34, !10, i64 2}
!34 = !{!"_ZTS11tagBGRAQUAD", !10, i64 0, !10, i64 1, !10, i64 2, !10, i64 3}
!35 = !{!34, !10, i64 1}
!36 = !{!34, !10, i64 0}
!37 = !{!34, !10, i64 3}
!38 = distinct !{!38, !28}
!39 = distinct !{!39, !28}
!40 = distinct !{!40, !28}
!41 = distinct !{!41, !28}
!42 = distinct !{!42, !28}
!43 = distinct !{!43, !28}
!44 = distinct !{!44, !28}
!45 = distinct !{!45, !28}
!46 = distinct !{!46, !28}
!47 = distinct !{!47, !28}
!48 = distinct !{!48, !49}
!49 = !{!"llvm.loop.unroll.disable"}
!50 = distinct !{!50, !28}


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