; LLVM IR from Dovyski/opengl-demos :: src/model-md2/bmp.ll (Z11LoadFileBMPPKcPPhPiS3_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.tagBITMAPFILEHEADER = type <{ i16, i32, i16, i16, i32 }>
%struct.tagBITMAPINFOHEADER = type { i32, i32, i32, i16, i16, i32, i32, i32, i32, i32, i32 }
%struct.tagBITMAPCOREHEADER = type { i32, i16, i16, i16, i16 }
%struct.tagRGBTRIPLE = type { i8, i8, i8 }
%struct.tagRGBQUAD = type { i8, i8, i8, i8 }

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z11LoadFileBMPPKcPPhPiS3_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 ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i64, align 8
  %31 = alloca %"class.std::fpos", align 8
  %32 = alloca ptr, align 8
  %33 = alloca i8, align 1
  %34 = alloca i32, align 4
  %35 = alloca i8, align 1
  %36 = alloca i32, align 4
  %37 = alloca i8, align 1
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i8, align 1
  %41 = alloca i8, align 1
  %42 = alloca i8, align 1
  %43 = alloca i8, align 1
  %44 = alloca i32, align 4
  %45 = alloca i8, align 1
  %46 = alloca i8, align 1
  %47 = alloca i8, align 1
  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
  %48 = zext i1 %4 to i8
  store i8 %48, 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 8, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %49 = load ptr, ptr %7, align 8, !tbaa !5
  %50 = invoke noundef i32 @_ZStorSt13_Ios_OpenmodeS_(i32 noundef 8, i32 noundef 4)
          to label %51 unwind label %60

51:                                               ; preds = %5
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256) %12, ptr noundef %49, i32 noundef %50)
          to label %52 unwind label %60

52:                                               ; preds = %51
  %53 = load ptr, ptr %12, align 8, !tbaa !11
  %54 = getelementptr i8, ptr %53, i64 -24
  %55 = load i64, ptr %54, align 8
  %56 = getelementptr inbounds i8, ptr %12, i64 %55
  %57 = invoke noundef zeroext i1 @_ZNKSt9basic_iosIcSt11char_traitsIcEE4failEv(ptr noundef nonnull align 8 dereferenceable(264) %56)
          to label %58 unwind label %60

58:                                               ; preds = %52
  br i1 %57, label %59, label %64

59:                                               ; preds = %58
  store i32 0, ptr %6, align 4
  store i32 1, ptr %29, align 4
  br label %901

60:                                               ; preds = %64, %52, %51, %5
  %61 = landingpad { ptr, i32 }
          cleanup
  %62 = extractvalue { ptr, i32 } %61, 0
  store ptr %62, ptr %27, align 8
  %63 = extractvalue { ptr, i32 } %61, 1
  store i32 %63, ptr %28, align 4
  br label %903

64:                                               ; preds = %58
  %65 = 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 %66 unwind label %60

66:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #7
  %67 = invoke { i64, i64 } @_ZNSi5tellgEv(ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %68 unwind label %100

68:                                               ; preds = %66
  %69 = getelementptr inbounds { i64, i64 }, ptr %31, i32 0, i32 0
  %70 = extractvalue { i64, i64 } %67, 0
  store i64 %70, ptr %69, align 8
  %71 = getelementptr inbounds { i64, i64 }, ptr %31, i32 0, i32 1
  %72 = extractvalue { i64, i64 } %67, 1
  store i64 %72, ptr %71, align 8
  %73 = invoke noundef i64 @_ZNKSt4fposI11__mbstate_tEcvlEv(ptr noundef nonnull align 8 dereferenceable(16) %31)
          to label %74 unwind label %100

74:                                               ; preds = %68
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #7
  store i64 %73, ptr %30, align 8, !tbaa !13
  %75 = 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 %76 unwind label %104

76:                                               ; preds = %74
  %77 = load i64, ptr %30, align 8, !tbaa !13
  %78 = add nsw i64 %77, 1
  %79 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %78) #8
          to label %80 unwind label %104

80:                                               ; preds = %76
  store ptr %79, ptr %18, align 8, !tbaa !5
  %81 = load ptr, ptr %18, align 8, !tbaa !5
  %82 = load i64, ptr %30, align 8, !tbaa !13
  %83 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSi4readEPcl(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef %81, i64 noundef %82)
          to label %84 unwind label %104

84:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %85 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %85, ptr %32, align 8, !tbaa !5
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(256) %12)
          to label %86 unwind label %108

86:                                               ; preds = %84
  %87 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %87, ptr %13, align 8, !tbaa !5
  %88 = load ptr, ptr %32, align 8, !tbaa !5
  %89 = getelementptr inbounds i8, ptr %88, i64 14
  store ptr %89, ptr %32, align 8, !tbaa !5
  %90 = load ptr, ptr %13, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.tagBITMAPFILEHEADER, ptr %90, i32 0, i32 0
  %92 = load i16, ptr %91, align 2, !tbaa !15
  %93 = zext i16 %92 to i32
  %94 = icmp ne i32 %93, 19778
  br i1 %94, label %95, label %112

95:                                               ; preds = %86
  %96 = load ptr, ptr %18, align 8, !tbaa !5
  %97 = icmp eq ptr %96, null
  br i1 %97, label %99, label %98

98:                                               ; preds = %95
  call void @_ZdaPv(ptr noundef %96) #9
  br label %99

99:                                               ; preds = %98, %95
  store i32 0, ptr %6, align 4
  store i32 1, ptr %29, align 4
  br label %899

100:                                              ; preds = %68, %66
  %101 = landingpad { ptr, i32 }
          cleanup
  %102 = extractvalue { ptr, i32 } %101, 0
  store ptr %102, ptr %27, align 8
  %103 = extractvalue { ptr, i32 } %101, 1
  store i32 %103, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #7
  br label %900

104:                                              ; preds = %80, %76, %74
  %105 = landingpad { ptr, i32 }
          cleanup
  %106 = extractvalue { ptr, i32 } %105, 0
  store ptr %106, ptr %27, align 8
  %107 = extractvalue { ptr, i32 } %105, 1
  store i32 %107, ptr %28, align 4
  br label %900

108:                                              ; preds = %190, %84
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %27, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  br label %900

112:                                              ; preds = %86
  %113 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %113, ptr %15, align 8, !tbaa !5
  %114 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %114, ptr %14, align 8, !tbaa !5
  %115 = load ptr, ptr %14, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.tagBITMAPINFOHEADER, ptr %115, i32 0, i32 5
  %117 = load i32, ptr %116, align 4, !tbaa !19
  %118 = icmp ult i32 %117, 0
  br i1 %118, label %124, label %119

119:                                              ; preds = %112
  %120 = load ptr, ptr %14, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.tagBITMAPINFOHEADER, ptr %120, i32 0, i32 5
  %122 = load i32, ptr %121, align 4, !tbaa !19
  %123 = icmp ugt i32 %122, 3
  br i1 %123, label %124, label %139

124:                                              ; preds = %119, %112
  %125 = load ptr, ptr %32, align 8, !tbaa !5
  %126 = getelementptr inbounds i8, ptr %125, i64 12
  store ptr %126, ptr %32, align 8, !tbaa !5
  %127 = load ptr, ptr %15, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.tagBITMAPCOREHEADER, ptr %127, i32 0, i32 4
  %129 = load i16, ptr %128, align 2, !tbaa !21
  %130 = zext i16 %129 to i32
  store i32 %130, ptr %20, align 4, !tbaa !23
  store i32 -1, ptr %21, align 4, !tbaa !23
  %131 = load ptr, ptr %15, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.tagBITMAPCOREHEADER, ptr %131, i32 0, i32 1
  %133 = load i16, ptr %132, align 4, !tbaa !24
  %134 = zext i16 %133 to i32
  store i32 %134, ptr %25, align 4, !tbaa !23
  %135 = load ptr, ptr %15, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.tagBITMAPCOREHEADER, ptr %135, i32 0, i32 2
  %137 = load i16, ptr %136, align 2, !tbaa !25
  %138 = zext i16 %137 to i32
  store i32 %138, ptr %26, align 4, !tbaa !23
  br label %155

139:                                              ; preds = %119
  %140 = load ptr, ptr %32, align 8, !tbaa !5
  %141 = getelementptr inbounds i8, ptr %140, i64 40
  store ptr %141, ptr %32, align 8, !tbaa !5
  %142 = load ptr, ptr %14, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.tagBITMAPINFOHEADER, ptr %142, i32 0, i32 4
  %144 = load i16, ptr %143, align 2, !tbaa !26
  %145 = zext i16 %144 to i32
  store i32 %145, ptr %20, align 4, !tbaa !23
  %146 = load ptr, ptr %14, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.tagBITMAPINFOHEADER, ptr %146, i32 0, i32 5
  %148 = load i32, ptr %147, align 4, !tbaa !19
  store i32 %148, ptr %21, align 4, !tbaa !23
  %149 = load ptr, ptr %14, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.tagBITMAPINFOHEADER, ptr %149, i32 0, i32 1
  %151 = load i32, ptr %150, align 4, !tbaa !27
  store i32 %151, ptr %25, align 4, !tbaa !23
  %152 = load ptr, ptr %14, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.tagBITMAPINFOHEADER, ptr %152, i32 0, i32 2
  %154 = load i32, ptr %153, align 4, !tbaa !28
  store i32 %154, ptr %26, align 4, !tbaa !23
  br label %155

155:                                              ; preds = %139, %124
  %156 = load ptr, ptr %9, align 8, !tbaa !5
  %157 = icmp ne ptr %156, null
  br i1 %157, label %158, label %161

158:                                              ; preds = %155
  %159 = load i32, ptr %25, align 4, !tbaa !23
  %160 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 %159, ptr %160, align 4, !tbaa !23
  br label %161

161:                                              ; preds = %158, %155
  %162 = load ptr, ptr %10, align 8, !tbaa !5
  %163 = icmp ne ptr %162, null
  br i1 %163, label %164, label %167

164:                                              ; preds = %161
  %165 = load i32, ptr %26, align 4, !tbaa !23
  %166 = load ptr, ptr %10, align 8, !tbaa !5
  store i32 %165, ptr %166, align 4, !tbaa !23
  br label %167

167:                                              ; preds = %164, %161
  %168 = load ptr, ptr %8, align 8, !tbaa !5
  %169 = icmp ne ptr %168, null
  br i1 %169, label %175, label %170

170:                                              ; preds = %167
  %171 = load ptr, ptr %18, align 8, !tbaa !5
  %172 = icmp eq ptr %171, null
  br i1 %172, label %174, label %173

173:                                              ; preds = %170
  call void @_ZdaPv(ptr noundef %171) #9
  br label %174

174:                                              ; preds = %173, %170
  store i32 -1, ptr %6, align 4
  store i32 1, ptr %29, align 4
  br label %899

175:                                              ; preds = %167
  %176 = load i32, ptr %20, align 4, !tbaa !23
  %177 = icmp sle i32 %176, 8
  br i1 %177, label %178, label %190

178:                                              ; preds = %175
  %179 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %179, ptr %16, align 8, !tbaa !5
  %180 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %180, ptr %17, align 8, !tbaa !5
  %181 = load i32, ptr %20, align 4, !tbaa !23
  %182 = shl i32 1, %181
  %183 = load i32, ptr %20, align 4, !tbaa !23
  %184 = ashr i32 %183, 3
  %185 = mul nsw i32 %182, %184
  %186 = sext i32 %185 to i64
  %187 = mul i64 %186, 1
  %188 = load ptr, ptr %32, align 8, !tbaa !5
  %189 = getelementptr inbounds i8, ptr %188, i64 %187
  store ptr %189, ptr %32, align 8, !tbaa !5
  br label %190

190:                                              ; preds = %178, %175
  %191 = load i32, ptr %25, align 4, !tbaa !23
  %192 = load i32, ptr %26, align 4, !tbaa !23
  %193 = mul nsw i32 %191, %192
  %194 = mul nsw i32 %193, 4
  %195 = sext i32 %194 to i64
  %196 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %195) #8
          to label %197 unwind label %108

197:                                              ; preds = %190
  %198 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %196, ptr %198, align 8, !tbaa !5
  %199 = load ptr, ptr %8, align 8, !tbaa !5
  %200 = load ptr, ptr %199, align 8, !tbaa !5
  %201 = getelementptr inbounds i8, ptr %200, i64 0
  store ptr %201, ptr %19, align 8, !tbaa !5
  %202 = load ptr, ptr %18, align 8, !tbaa !5
  %203 = load ptr, ptr %13, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.tagBITMAPFILEHEADER, ptr %203, i32 0, i32 4
  %205 = load i32, ptr %204, align 2, !tbaa !29
  %206 = zext i32 %205 to i64
  %207 = mul i64 %206, 1
  %208 = getelementptr inbounds i8, ptr %202, i64 %207
  store ptr %208, ptr %32, align 8, !tbaa !5
  %209 = load i32, ptr %21, align 4, !tbaa !23
  switch i32 %209, label %894 [
    i32 -1, label %210
    i32 0, label %210
    i32 1, label %596
    i32 2, label %728
  ]

210:                                              ; preds = %197, %197
  %211 = load i32, ptr %26, align 4, !tbaa !23
  %212 = sub nsw i32 %211, 1
  store i32 %212, ptr %22, align 4, !tbaa !23
  br label %213

213:                                              ; preds = %592, %210
  %214 = load i32, ptr %22, align 4, !tbaa !23
  %215 = icmp sge i32 %214, 0
  br i1 %215, label %216, label %595

216:                                              ; preds = %213
  %217 = load i8, ptr %11, align 1, !tbaa !9, !range !30, !noundef !31
  %218 = trunc i8 %217 to i1
  br i1 %218, label %219, label %228

219:                                              ; preds = %216
  %220 = load ptr, ptr %8, align 8, !tbaa !5
  %221 = load ptr, ptr %220, align 8, !tbaa !5
  %222 = load i32, ptr %22, align 4, !tbaa !23
  %223 = load i32, ptr %25, align 4, !tbaa !23
  %224 = mul nsw i32 %222, %223
  %225 = mul nsw i32 %224, 4
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds i8, ptr %221, i64 %226
  store ptr %227, ptr %19, align 8, !tbaa !5
  br label %228

228:                                              ; preds = %219, %216
  %229 = load i32, ptr %20, align 4, !tbaa !23
  switch i32 %229, label %591 [
    i32 1, label %230
    i32 4, label %318
    i32 8, label %455
    i32 24, label %527
    i32 32, label %559
  ]

230:                                              ; preds = %228
  store i32 0, ptr %23, align 4, !tbaa !23
  br label %231

231:                                              ; preds = %314, %230
  %232 = load i32, ptr %23, align 4, !tbaa !23
  %233 = load i32, ptr %25, align 4, !tbaa !23
  %234 = sdiv i32 %233, 8
  %235 = icmp slt i32 %232, %234
  br i1 %235, label %236, label %317

236:                                              ; preds = %231
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #7
  %237 = load ptr, ptr %32, align 8, !tbaa !5
  %238 = getelementptr inbounds i8, ptr %237, i32 1
  store ptr %238, ptr %32, align 8, !tbaa !5
  %239 = load i8, ptr %237, align 1, !tbaa !32
  store i8 %239, ptr %33, align 1, !tbaa !32
  store i32 7, ptr %24, align 4, !tbaa !23
  br label %240

240:                                              ; preds = %308, %236
  %241 = load i32, ptr %24, align 4, !tbaa !23
  %242 = icmp sge i32 %241, 0
  br i1 %242, label %243, label %313

243:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  %244 = load i8, ptr %33, align 1, !tbaa !32
  %245 = zext i8 %244 to i32
  %246 = load i32, ptr %24, align 4, !tbaa !23
  %247 = shl i32 1, %246
  %248 = and i32 %245, %247
  %249 = icmp sgt i32 %248, 0
  %250 = zext i1 %249 to i32
  store i32 %250, ptr %34, align 4, !tbaa !23
  %251 = load i32, ptr %21, align 4, !tbaa !23
  %252 = icmp eq i32 %251, -1
  br i1 %252, label %253, label %280

253:                                              ; preds = %243
  %254 = load ptr, ptr %16, align 8, !tbaa !5
  %255 = load i32, ptr %34, align 4, !tbaa !23
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %254, i64 %256
  %258 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %257, i32 0, i32 2
  %259 = load i8, ptr %258, align 1, !tbaa !33
  %260 = load ptr, ptr %19, align 8, !tbaa !5
  %261 = getelementptr inbounds i8, ptr %260, i64 0
  store i8 %259, ptr %261, align 1, !tbaa !32
  %262 = load ptr, ptr %16, align 8, !tbaa !5
  %263 = load i32, ptr %34, align 4, !tbaa !23
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %262, i64 %264
  %266 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %265, i32 0, i32 1
  %267 = load i8, ptr %266, align 1, !tbaa !35
  %268 = load ptr, ptr %19, align 8, !tbaa !5
  %269 = getelementptr inbounds i8, ptr %268, i64 1
  store i8 %267, ptr %269, align 1, !tbaa !32
  %270 = load ptr, ptr %16, align 8, !tbaa !5
  %271 = load i32, ptr %34, align 4, !tbaa !23
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %270, i64 %272
  %274 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %273, i32 0, i32 0
  %275 = load i8, ptr %274, align 1, !tbaa !36
  %276 = load ptr, ptr %19, align 8, !tbaa !5
  %277 = getelementptr inbounds i8, ptr %276, i64 2
  store i8 %275, ptr %277, align 1, !tbaa !32
  %278 = load ptr, ptr %19, align 8, !tbaa !5
  %279 = getelementptr inbounds i8, ptr %278, i64 3
  store i8 -1, ptr %279, align 1, !tbaa !32
  br label %307

280:                                              ; preds = %243
  %281 = load ptr, ptr %17, align 8, !tbaa !5
  %282 = load i32, ptr %34, align 4, !tbaa !23
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds %struct.tagRGBQUAD, ptr %281, i64 %283
  %285 = getelementptr inbounds %struct.tagRGBQUAD, ptr %284, i32 0, i32 2
  %286 = load i8, ptr %285, align 1, !tbaa !37
  %287 = load ptr, ptr %19, align 8, !tbaa !5
  %288 = getelementptr inbounds i8, ptr %287, i64 0
  store i8 %286, ptr %288, align 1, !tbaa !32
  %289 = load ptr, ptr %17, align 8, !tbaa !5
  %290 = load i32, ptr %34, align 4, !tbaa !23
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds %struct.tagRGBQUAD, ptr %289, i64 %291
  %293 = getelementptr inbounds %struct.tagRGBQUAD, ptr %292, i32 0, i32 1
  %294 = load i8, ptr %293, align 1, !tbaa !39
  %295 = load ptr, ptr %19, align 8, !tbaa !5
  %296 = getelementptr inbounds i8, ptr %295, i64 1
  store i8 %294, ptr %296, align 1, !tbaa !32
  %297 = load ptr, ptr %17, align 8, !tbaa !5
  %298 = load i32, ptr %34, align 4, !tbaa !23
  %299 = sext i32 %298 to i64
  %300 = getelementptr inbounds %struct.tagRGBQUAD, ptr %297, i64 %299
  %301 = getelementptr inbounds %struct.tagRGBQUAD, ptr %300, i32 0, i32 0
  %302 = load i8, ptr %301, align 1, !tbaa !40
  %303 = load ptr, ptr %19, align 8, !tbaa !5
  %304 = getelementptr inbounds i8, ptr %303, i64 2
  store i8 %302, ptr %304, align 1, !tbaa !32
  %305 = load ptr, ptr %19, align 8, !tbaa !5
  %306 = getelementptr inbounds i8, ptr %305, i64 3
  store i8 -1, ptr %306, align 1, !tbaa !32
  br label %307

307:                                              ; preds = %280, %253
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  br label %308

308:                                              ; preds = %307
  %309 = load i32, ptr %24, align 4, !tbaa !23
  %310 = add nsw i32 %309, -1
  store i32 %310, ptr %24, align 4, !tbaa !23
  %311 = load ptr, ptr %19, align 8, !tbaa !5
  %312 = getelementptr inbounds i8, ptr %311, i64 4
  store ptr %312, ptr %19, align 8, !tbaa !5
  br label %240, !llvm.loop !41

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

314:                                              ; preds = %313
  %315 = load i32, ptr %23, align 4, !tbaa !23
  %316 = add nsw i32 %315, 1
  store i32 %316, ptr %23, align 4, !tbaa !23
  br label %231, !llvm.loop !43

317:                                              ; preds = %231
  br label %591

318:                                              ; preds = %228
  store i32 0, ptr %23, align 4, !tbaa !23
  br label %319

319:                                              ; preds = %449, %318
  %320 = load i32, ptr %23, align 4, !tbaa !23
  %321 = load i32, ptr %25, align 4, !tbaa !23
  %322 = sdiv i32 %321, 2
  %323 = icmp slt i32 %320, %322
  br i1 %323, label %324, label %454

324:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #7
  %325 = load ptr, ptr %32, align 8, !tbaa !5
  %326 = getelementptr inbounds i8, ptr %325, i32 1
  store ptr %326, ptr %32, align 8, !tbaa !5
  %327 = load i8, ptr %325, align 1, !tbaa !32
  store i8 %327, ptr %35, align 1, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  %328 = load i32, ptr %21, align 4, !tbaa !23
  %329 = icmp eq i32 %328, -1
  br i1 %329, label %330, label %389

330:                                              ; preds = %324
  %331 = load i8, ptr %35, align 1, !tbaa !32
  %332 = zext i8 %331 to i32
  %333 = ashr i32 %332, 4
  store i32 %333, ptr %36, align 4, !tbaa !23
  %334 = load ptr, ptr %16, align 8, !tbaa !5
  %335 = load i32, ptr %36, align 4, !tbaa !23
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %334, i64 %336
  %338 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %337, i32 0, i32 2
  %339 = load i8, ptr %338, align 1, !tbaa !33
  %340 = load ptr, ptr %19, align 8, !tbaa !5
  %341 = getelementptr inbounds i8, ptr %340, i64 0
  store i8 %339, ptr %341, align 1, !tbaa !32
  %342 = load ptr, ptr %16, align 8, !tbaa !5
  %343 = load i32, ptr %36, align 4, !tbaa !23
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %342, i64 %344
  %346 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %345, i32 0, i32 1
  %347 = load i8, ptr %346, align 1, !tbaa !35
  %348 = load ptr, ptr %19, align 8, !tbaa !5
  %349 = getelementptr inbounds i8, ptr %348, i64 1
  store i8 %347, ptr %349, align 1, !tbaa !32
  %350 = load ptr, ptr %16, align 8, !tbaa !5
  %351 = load i32, ptr %36, align 4, !tbaa !23
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %350, i64 %352
  %354 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %353, i32 0, i32 0
  %355 = load i8, ptr %354, align 1, !tbaa !36
  %356 = load ptr, ptr %19, align 8, !tbaa !5
  %357 = getelementptr inbounds i8, ptr %356, i64 2
  store i8 %355, ptr %357, align 1, !tbaa !32
  %358 = load ptr, ptr %19, align 8, !tbaa !5
  %359 = getelementptr inbounds i8, ptr %358, i64 3
  store i8 -1, ptr %359, align 1, !tbaa !32
  %360 = load i8, ptr %35, align 1, !tbaa !32
  %361 = zext i8 %360 to i32
  %362 = and i32 %361, 15
  store i32 %362, ptr %36, align 4, !tbaa !23
  %363 = load ptr, ptr %16, align 8, !tbaa !5
  %364 = load i32, ptr %36, align 4, !tbaa !23
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %363, i64 %365
  %367 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %366, i32 0, i32 2
  %368 = load i8, ptr %367, align 1, !tbaa !33
  %369 = load ptr, ptr %19, align 8, !tbaa !5
  %370 = getelementptr inbounds i8, ptr %369, i64 4
  store i8 %368, ptr %370, align 1, !tbaa !32
  %371 = load ptr, ptr %16, align 8, !tbaa !5
  %372 = load i32, ptr %36, align 4, !tbaa !23
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %371, i64 %373
  %375 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %374, i32 0, i32 1
  %376 = load i8, ptr %375, align 1, !tbaa !35
  %377 = load ptr, ptr %19, align 8, !tbaa !5
  %378 = getelementptr inbounds i8, ptr %377, i64 5
  store i8 %376, ptr %378, align 1, !tbaa !32
  %379 = load ptr, ptr %16, align 8, !tbaa !5
  %380 = load i32, ptr %36, align 4, !tbaa !23
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %379, i64 %381
  %383 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %382, i32 0, i32 0
  %384 = load i8, ptr %383, align 1, !tbaa !36
  %385 = load ptr, ptr %19, align 8, !tbaa !5
  %386 = getelementptr inbounds i8, ptr %385, i64 6
  store i8 %384, ptr %386, align 1, !tbaa !32
  %387 = load ptr, ptr %19, align 8, !tbaa !5
  %388 = getelementptr inbounds i8, ptr %387, i64 7
  store i8 -1, ptr %388, align 1, !tbaa !32
  br label %448

389:                                              ; preds = %324
  %390 = load i8, ptr %35, align 1, !tbaa !32
  %391 = zext i8 %390 to i32
  %392 = ashr i32 %391, 4
  store i32 %392, ptr %36, align 4, !tbaa !23
  %393 = load ptr, ptr %17, align 8, !tbaa !5
  %394 = load i32, ptr %36, align 4, !tbaa !23
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds %struct.tagRGBQUAD, ptr %393, i64 %395
  %397 = getelementptr inbounds %struct.tagRGBQUAD, ptr %396, i32 0, i32 2
  %398 = load i8, ptr %397, align 1, !tbaa !37
  %399 = load ptr, ptr %19, align 8, !tbaa !5
  %400 = getelementptr inbounds i8, ptr %399, i64 0
  store i8 %398, ptr %400, align 1, !tbaa !32
  %401 = load ptr, ptr %17, align 8, !tbaa !5
  %402 = load i32, ptr %36, align 4, !tbaa !23
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds %struct.tagRGBQUAD, ptr %401, i64 %403
  %405 = getelementptr inbounds %struct.tagRGBQUAD, ptr %404, i32 0, i32 1
  %406 = load i8, ptr %405, align 1, !tbaa !39
  %407 = load ptr, ptr %19, align 8, !tbaa !5
  %408 = getelementptr inbounds i8, ptr %407, i64 1
  store i8 %406, ptr %408, align 1, !tbaa !32
  %409 = load ptr, ptr %17, align 8, !tbaa !5
  %410 = load i32, ptr %36, align 4, !tbaa !23
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds %struct.tagRGBQUAD, ptr %409, i64 %411
  %413 = getelementptr inbounds %struct.tagRGBQUAD, ptr %412, i32 0, i32 0
  %414 = load i8, ptr %413, align 1, !tbaa !40
  %415 = load ptr, ptr %19, align 8, !tbaa !5
  %416 = getelementptr inbounds i8, ptr %415, i64 2
  store i8 %414, ptr %416, align 1, !tbaa !32
  %417 = load ptr, ptr %19, align 8, !tbaa !5
  %418 = getelementptr inbounds i8, ptr %417, i64 3
  store i8 -1, ptr %418, align 1, !tbaa !32
  %419 = load i8, ptr %35, align 1, !tbaa !32
  %420 = zext i8 %419 to i32
  %421 = and i32 %420, 15
  store i32 %421, ptr %36, align 4, !tbaa !23
  %422 = load ptr, ptr %17, align 8, !tbaa !5
  %423 = load i32, ptr %36, align 4, !tbaa !23
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds %struct.tagRGBQUAD, ptr %422, i64 %424
  %426 = getelementptr inbounds %struct.tagRGBQUAD, ptr %425, i32 0, i32 2
  %427 = load i8, ptr %426, align 1, !tbaa !37
  %428 = load ptr, ptr %19, align 8, !tbaa !5
  %429 = getelementptr inbounds i8, ptr %428, i64 4
  store i8 %427, ptr %429, align 1, !tbaa !32
  %430 = load ptr, ptr %17, align 8, !tbaa !5
  %431 = load i32, ptr %36, align 4, !tbaa !23
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds %struct.tagRGBQUAD, ptr %430, i64 %432
  %434 = getelementptr inbounds %struct.tagRGBQUAD, ptr %433, i32 0, i32 1
  %435 = load i8, ptr %434, align 1, !tbaa !39
  %436 = load ptr, ptr %19, align 8, !tbaa !5
  %437 = getelementptr inbounds i8, ptr %436, i64 5
  store i8 %435, ptr %437, align 1, !tbaa !32
  %438 = load ptr, ptr %17, align 8, !tbaa !5
  %439 = load i32, ptr %36, align 4, !tbaa !23
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds %struct.tagRGBQUAD, ptr %438, i64 %440
  %442 = getelementptr inbounds %struct.tagRGBQUAD, ptr %441, i32 0, i32 0
  %443 = load i8, ptr %442, align 1, !tbaa !40
  %444 = load ptr, ptr %19, align 8, !tbaa !5
  %445 = getelementptr inbounds i8, ptr %444, i64 6
  store i8 %443, ptr %445, align 1, !tbaa !32
  %446 = load ptr, ptr %19, align 8, !tbaa !5
  %447 = getelementptr inbounds i8, ptr %446, i64 7
  store i8 -1, ptr %447, align 1, !tbaa !32
  br label %448

448:                                              ; preds = %389, %330
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #7
  br label %449

449:                                              ; preds = %448
  %450 = load i32, ptr %23, align 4, !tbaa !23
  %451 = add nsw i32 %450, 1
  store i32 %451, ptr %23, align 4, !tbaa !23
  %452 = load ptr, ptr %19, align 8, !tbaa !5
  %453 = getelementptr inbounds i8, ptr %452, i64 8
  store ptr %453, ptr %19, align 8, !tbaa !5
  br label %319, !llvm.loop !44

454:                                              ; preds = %319
  br label %591

455:                                              ; preds = %228
  store i32 0, ptr %23, align 4, !tbaa !23
  br label %456

456:                                              ; preds = %521, %455
  %457 = load i32, ptr %23, align 4, !tbaa !23
  %458 = load i32, ptr %25, align 4, !tbaa !23
  %459 = icmp slt i32 %457, %458
  br i1 %459, label %460, label %526

460:                                              ; preds = %456
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #7
  %461 = load ptr, ptr %32, align 8, !tbaa !5
  %462 = getelementptr inbounds i8, ptr %461, i32 1
  store ptr %462, ptr %32, align 8, !tbaa !5
  %463 = load i8, ptr %461, align 1, !tbaa !32
  store i8 %463, ptr %37, align 1, !tbaa !32
  %464 = load i32, ptr %21, align 4, !tbaa !23
  %465 = icmp eq i32 %464, -1
  br i1 %465, label %466, label %493

466:                                              ; preds = %460
  %467 = load ptr, ptr %16, align 8, !tbaa !5
  %468 = load i8, ptr %37, align 1, !tbaa !32
  %469 = zext i8 %468 to i64
  %470 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %467, i64 %469
  %471 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %470, i32 0, i32 2
  %472 = load i8, ptr %471, align 1, !tbaa !33
  %473 = load ptr, ptr %19, align 8, !tbaa !5
  %474 = getelementptr inbounds i8, ptr %473, i64 0
  store i8 %472, ptr %474, align 1, !tbaa !32
  %475 = load ptr, ptr %16, align 8, !tbaa !5
  %476 = load i8, ptr %37, align 1, !tbaa !32
  %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 1
  %480 = load i8, ptr %479, align 1, !tbaa !35
  %481 = load ptr, ptr %19, align 8, !tbaa !5
  %482 = getelementptr inbounds i8, ptr %481, i64 1
  store i8 %480, ptr %482, align 1, !tbaa !32
  %483 = load ptr, ptr %16, align 8, !tbaa !5
  %484 = load i8, ptr %37, align 1, !tbaa !32
  %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 0
  %488 = load i8, ptr %487, align 1, !tbaa !36
  %489 = load ptr, ptr %19, align 8, !tbaa !5
  %490 = getelementptr inbounds i8, ptr %489, i64 2
  store i8 %488, ptr %490, align 1, !tbaa !32
  %491 = load ptr, ptr %19, align 8, !tbaa !5
  %492 = getelementptr inbounds i8, ptr %491, i64 3
  store i8 -1, ptr %492, align 1, !tbaa !32
  br label %520

493:                                              ; preds = %460
  %494 = load ptr, ptr %17, align 8, !tbaa !5
  %495 = load i8, ptr %37, align 1, !tbaa !32
  %496 = zext i8 %495 to i64
  %497 = getelementptr inbounds %struct.tagRGBQUAD, ptr %494, i64 %496
  %498 = getelementptr inbounds %struct.tagRGBQUAD, ptr %497, i32 0, i32 2
  %499 = load i8, ptr %498, align 1, !tbaa !37
  %500 = load ptr, ptr %19, align 8, !tbaa !5
  %501 = getelementptr inbounds i8, ptr %500, i64 0
  store i8 %499, ptr %501, align 1, !tbaa !32
  %502 = load ptr, ptr %17, align 8, !tbaa !5
  %503 = load i8, ptr %37, align 1, !tbaa !32
  %504 = zext i8 %503 to i64
  %505 = getelementptr inbounds %struct.tagRGBQUAD, ptr %502, i64 %504
  %506 = getelementptr inbounds %struct.tagRGBQUAD, ptr %505, i32 0, i32 1
  %507 = load i8, ptr %506, align 1, !tbaa !39
  %508 = load ptr, ptr %19, align 8, !tbaa !5
  %509 = getelementptr inbounds i8, ptr %508, i64 1
  store i8 %507, ptr %509, align 1, !tbaa !32
  %510 = load ptr, ptr %17, align 8, !tbaa !5
  %511 = load i8, ptr %37, align 1, !tbaa !32
  %512 = zext i8 %511 to i64
  %513 = getelementptr inbounds %struct.tagRGBQUAD, ptr %510, i64 %512
  %514 = getelementptr inbounds %struct.tagRGBQUAD, ptr %513, i32 0, i32 0
  %515 = load i8, ptr %514, align 1, !tbaa !40
  %516 = load ptr, ptr %19, align 8, !tbaa !5
  %517 = getelementptr inbounds i8, ptr %516, i64 2
  store i8 %515, ptr %517, align 1, !tbaa !32
  %518 = load ptr, ptr %19, align 8, !tbaa !5
  %519 = getelementptr inbounds i8, ptr %518, i64 3
  store i8 -1, ptr %519, align 1, !tbaa !32
  br label %520

520:                                              ; preds = %493, %466
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #7
  br label %521

521:                                              ; preds = %520
  %522 = load i32, ptr %23, align 4, !tbaa !23
  %523 = add nsw i32 %522, 1
  store i32 %523, ptr %23, align 4, !tbaa !23
  %524 = load ptr, ptr %19, align 8, !tbaa !5
  %525 = getelementptr inbounds i8, ptr %524, i64 4
  store ptr %525, ptr %19, align 8, !tbaa !5
  br label %456, !llvm.loop !45

526:                                              ; preds = %456
  br label %591

527:                                              ; preds = %228
  store i32 0, ptr %23, align 4, !tbaa !23
  br label %528

528:                                              ; preds = %553, %527
  %529 = load i32, ptr %23, align 4, !tbaa !23
  %530 = load i32, ptr %25, align 4, !tbaa !23
  %531 = icmp slt i32 %529, %530
  br i1 %531, label %532, label %558

532:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %533 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %533, ptr %38, align 8, !tbaa !5
  %534 = load ptr, ptr %32, align 8, !tbaa !5
  %535 = getelementptr inbounds i8, ptr %534, i64 3
  store ptr %535, ptr %32, align 8, !tbaa !5
  %536 = load ptr, ptr %38, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %536, i32 0, i32 2
  %538 = load i8, ptr %537, align 1, !tbaa !33
  %539 = load ptr, ptr %19, align 8, !tbaa !5
  %540 = getelementptr inbounds i8, ptr %539, i64 0
  store i8 %538, ptr %540, align 1, !tbaa !32
  %541 = load ptr, ptr %38, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %541, i32 0, i32 1
  %543 = load i8, ptr %542, align 1, !tbaa !35
  %544 = load ptr, ptr %19, align 8, !tbaa !5
  %545 = getelementptr inbounds i8, ptr %544, i64 1
  store i8 %543, ptr %545, align 1, !tbaa !32
  %546 = load ptr, ptr %38, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %546, i32 0, i32 0
  %548 = load i8, ptr %547, align 1, !tbaa !36
  %549 = load ptr, ptr %19, align 8, !tbaa !5
  %550 = getelementptr inbounds i8, ptr %549, i64 2
  store i8 %548, ptr %550, align 1, !tbaa !32
  %551 = load ptr, ptr %19, align 8, !tbaa !5
  %552 = getelementptr inbounds i8, ptr %551, i64 3
  store i8 -1, ptr %552, align 1, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  br label %553

553:                                              ; preds = %532
  %554 = load i32, ptr %23, align 4, !tbaa !23
  %555 = add nsw i32 %554, 1
  store i32 %555, ptr %23, align 4, !tbaa !23
  %556 = load ptr, ptr %19, align 8, !tbaa !5
  %557 = getelementptr inbounds i8, ptr %556, i64 4
  store ptr %557, ptr %19, align 8, !tbaa !5
  br label %528, !llvm.loop !46

558:                                              ; preds = %528
  br label %591

559:                                              ; preds = %228
  store i32 0, ptr %23, align 4, !tbaa !23
  br label %560

560:                                              ; preds = %585, %559
  %561 = load i32, ptr %23, align 4, !tbaa !23
  %562 = load i32, ptr %25, align 4, !tbaa !23
  %563 = icmp slt i32 %561, %562
  br i1 %563, label %564, label %590

564:                                              ; preds = %560
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %565 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %565, ptr %39, align 8, !tbaa !5
  %566 = load ptr, ptr %32, align 8, !tbaa !5
  %567 = getelementptr inbounds i8, ptr %566, i64 4
  store ptr %567, ptr %32, align 8, !tbaa !5
  %568 = load ptr, ptr %39, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.tagRGBQUAD, ptr %568, i32 0, i32 2
  %570 = load i8, ptr %569, align 1, !tbaa !37
  %571 = load ptr, ptr %19, align 8, !tbaa !5
  %572 = getelementptr inbounds i8, ptr %571, i64 0
  store i8 %570, ptr %572, align 1, !tbaa !32
  %573 = load ptr, ptr %39, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.tagRGBQUAD, ptr %573, i32 0, i32 1
  %575 = load i8, ptr %574, align 1, !tbaa !39
  %576 = load ptr, ptr %19, align 8, !tbaa !5
  %577 = getelementptr inbounds i8, ptr %576, i64 1
  store i8 %575, ptr %577, align 1, !tbaa !32
  %578 = load ptr, ptr %39, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.tagRGBQUAD, ptr %578, i32 0, i32 0
  %580 = load i8, ptr %579, align 1, !tbaa !40
  %581 = load ptr, ptr %19, align 8, !tbaa !5
  %582 = getelementptr inbounds i8, ptr %581, i64 2
  store i8 %580, ptr %582, align 1, !tbaa !32
  %583 = load ptr, ptr %19, align 8, !tbaa !5
  %584 = getelementptr inbounds i8, ptr %583, i64 3
  store i8 -1, ptr %584, align 1, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  br label %585

585:                                              ; preds = %564
  %586 = load i32, ptr %23, align 4, !tbaa !23
  %587 = add nsw i32 %586, 1
  store i32 %587, ptr %23, align 4, !tbaa !23
  %588 = load ptr, ptr %19, align 8, !tbaa !5
  %589 = getelementptr inbounds i8, ptr %588, i64 4
  store ptr %589, ptr %19, align 8, !tbaa !5
  br label %560, !llvm.loop !47

590:                                              ; preds = %560
  br label %591

591:                                              ; preds = %590, %558, %526, %454, %317, %228
  br label %592

592:                                              ; preds = %591
  %593 = load i32, ptr %22, align 4, !tbaa !23
  %594 = add nsw i32 %593, -1
  store i32 %594, ptr %22, align 4, !tbaa !23
  br label %213, !llvm.loop !48

595:                                              ; preds = %213
  br label %894

596:                                              ; preds = %197
  %597 = load i32, ptr %26, align 4, !tbaa !23
  %598 = sub nsw i32 %597, 1
  store i32 %598, ptr %22, align 4, !tbaa !23
  br label %599

599:                                              ; preds = %724, %596
  %600 = load i32, ptr %22, align 4, !tbaa !23
  %601 = icmp sge i32 %600, 0
  br i1 %601, label %602, label %727

602:                                              ; preds = %599
  %603 = load i8, ptr %11, align 1, !tbaa !9, !range !30, !noundef !31
  %604 = trunc i8 %603 to i1
  br i1 %604, label %605, label %614

605:                                              ; preds = %602
  %606 = load ptr, ptr %8, align 8, !tbaa !5
  %607 = load ptr, ptr %606, align 8, !tbaa !5
  %608 = load i32, ptr %22, align 4, !tbaa !23
  %609 = load i32, ptr %25, align 4, !tbaa !23
  %610 = mul nsw i32 %608, %609
  %611 = mul nsw i32 %610, 4
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds i8, ptr %607, i64 %612
  store ptr %613, ptr %19, align 8, !tbaa !5
  br label %614

614:                                              ; preds = %605, %602
  store i32 0, ptr %23, align 4, !tbaa !23
  br label %615

615:                                              ; preds = %722, %614
  %616 = load i32, ptr %23, align 4, !tbaa !23
  %617 = load i32, ptr %25, align 4, !tbaa !23
  %618 = icmp slt i32 %616, %617
  br i1 %618, label %619, label %723

619:                                              ; preds = %615
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #7
  %620 = load ptr, ptr %32, align 8, !tbaa !5
  %621 = getelementptr inbounds i8, ptr %620, i32 1
  store ptr %621, ptr %32, align 8, !tbaa !5
  %622 = load i8, ptr %620, align 1, !tbaa !32
  store i8 %622, ptr %40, align 1, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #7
  %623 = load ptr, ptr %32, align 8, !tbaa !5
  %624 = getelementptr inbounds i8, ptr %623, i32 1
  store ptr %624, ptr %32, align 8, !tbaa !5
  %625 = load i8, ptr %623, align 1, !tbaa !32
  store i8 %625, ptr %41, align 1, !tbaa !32
  %626 = load i8, ptr %40, align 1, !tbaa !32
  %627 = zext i8 %626 to i32
  %628 = icmp eq i32 %627, 0
  br i1 %628, label %629, label %681

629:                                              ; preds = %619
  store i32 0, ptr %24, align 4, !tbaa !23
  br label %630

630:                                              ; preds = %665, %629
  %631 = load i32, ptr %24, align 4, !tbaa !23
  %632 = load i8, ptr %41, align 1, !tbaa !32
  %633 = zext i8 %632 to i32
  %634 = icmp slt i32 %631, %633
  br i1 %634, label %635, label %672

635:                                              ; preds = %630
  call void @llvm.lifetime.start.p0(i64 1, ptr %42) #7
  %636 = load ptr, ptr %32, align 8, !tbaa !5
  %637 = getelementptr inbounds i8, ptr %636, i32 1
  store ptr %637, ptr %32, align 8, !tbaa !5
  %638 = load i8, ptr %636, align 1, !tbaa !32
  store i8 %638, ptr %42, align 1, !tbaa !32
  %639 = load ptr, ptr %17, align 8, !tbaa !5
  %640 = load i8, ptr %42, align 1, !tbaa !32
  %641 = zext i8 %640 to i64
  %642 = getelementptr inbounds %struct.tagRGBQUAD, ptr %639, i64 %641
  %643 = getelementptr inbounds %struct.tagRGBQUAD, ptr %642, i32 0, i32 2
  %644 = load i8, ptr %643, align 1, !tbaa !37
  %645 = load ptr, ptr %19, align 8, !tbaa !5
  %646 = getelementptr inbounds i8, ptr %645, i64 0
  store i8 %644, ptr %646, align 1, !tbaa !32
  %647 = load ptr, ptr %17, align 8, !tbaa !5
  %648 = load i8, ptr %42, align 1, !tbaa !32
  %649 = zext i8 %648 to i64
  %650 = getelementptr inbounds %struct.tagRGBQUAD, ptr %647, i64 %649
  %651 = getelementptr inbounds %struct.tagRGBQUAD, ptr %650, i32 0, i32 1
  %652 = load i8, ptr %651, align 1, !tbaa !39
  %653 = load ptr, ptr %19, align 8, !tbaa !5
  %654 = getelementptr inbounds i8, ptr %653, i64 1
  store i8 %652, ptr %654, align 1, !tbaa !32
  %655 = load ptr, ptr %17, align 8, !tbaa !5
  %656 = load i8, ptr %42, align 1, !tbaa !32
  %657 = zext i8 %656 to i64
  %658 = getelementptr inbounds %struct.tagRGBQUAD, ptr %655, i64 %657
  %659 = getelementptr inbounds %struct.tagRGBQUAD, ptr %658, i32 0, i32 0
  %660 = load i8, ptr %659, align 1, !tbaa !40
  %661 = load ptr, ptr %19, align 8, !tbaa !5
  %662 = getelementptr inbounds i8, ptr %661, i64 2
  store i8 %660, ptr %662, align 1, !tbaa !32
  %663 = load ptr, ptr %19, align 8, !tbaa !5
  %664 = getelementptr inbounds i8, ptr %663, i64 3
  store i8 -1, ptr %664, align 1, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #7
  br label %665

665:                                              ; preds = %635
  %666 = load i32, ptr %24, align 4, !tbaa !23
  %667 = add nsw i32 %666, 1
  store i32 %667, ptr %24, align 4, !tbaa !23
  %668 = load ptr, ptr %19, align 8, !tbaa !5
  %669 = getelementptr inbounds i8, ptr %668, i64 4
  store ptr %669, ptr %19, align 8, !tbaa !5
  %670 = load i32, ptr %23, align 4, !tbaa !23
  %671 = add nsw i32 %670, 1
  store i32 %671, ptr %23, align 4, !tbaa !23
  br label %630, !llvm.loop !49

672:                                              ; preds = %630
  %673 = load i8, ptr %41, align 1, !tbaa !32
  %674 = zext i8 %673 to i32
  %675 = srem i32 %674, 2
  %676 = icmp eq i32 %675, 1
  br i1 %676, label %677, label %680

677:                                              ; preds = %672
  %678 = load ptr, ptr %32, align 8, !tbaa !5
  %679 = getelementptr inbounds i8, ptr %678, i32 1
  store ptr %679, ptr %32, align 8, !tbaa !5
  br label %680

680:                                              ; preds = %677, %672
  br label %722

681:                                              ; preds = %619
  store i32 0, ptr %24, align 4, !tbaa !23
  br label %682

682:                                              ; preds = %714, %681
  %683 = load i32, ptr %24, align 4, !tbaa !23
  %684 = load i8, ptr %40, align 1, !tbaa !32
  %685 = zext i8 %684 to i32
  %686 = icmp slt i32 %683, %685
  br i1 %686, label %687, label %721

687:                                              ; preds = %682
  %688 = load ptr, ptr %17, align 8, !tbaa !5
  %689 = load i8, ptr %41, align 1, !tbaa !32
  %690 = zext i8 %689 to i64
  %691 = getelementptr inbounds %struct.tagRGBQUAD, ptr %688, i64 %690
  %692 = getelementptr inbounds %struct.tagRGBQUAD, ptr %691, i32 0, i32 2
  %693 = load i8, ptr %692, align 1, !tbaa !37
  %694 = load ptr, ptr %19, align 8, !tbaa !5
  %695 = getelementptr inbounds i8, ptr %694, i64 0
  store i8 %693, ptr %695, align 1, !tbaa !32
  %696 = load ptr, ptr %17, align 8, !tbaa !5
  %697 = load i8, ptr %41, align 1, !tbaa !32
  %698 = zext i8 %697 to i64
  %699 = getelementptr inbounds %struct.tagRGBQUAD, ptr %696, i64 %698
  %700 = getelementptr inbounds %struct.tagRGBQUAD, ptr %699, i32 0, i32 1
  %701 = load i8, ptr %700, align 1, !tbaa !39
  %702 = load ptr, ptr %19, align 8, !tbaa !5
  %703 = getelementptr inbounds i8, ptr %702, i64 1
  store i8 %701, ptr %703, align 1, !tbaa !32
  %704 = load ptr, ptr %17, align 8, !tbaa !5
  %705 = load i8, ptr %41, align 1, !tbaa !32
  %706 = zext i8 %705 to i64
  %707 = getelementptr inbounds %struct.tagRGBQUAD, ptr %704, i64 %706
  %708 = getelementptr inbounds %struct.tagRGBQUAD, ptr %707, i32 0, i32 0
  %709 = load i8, ptr %708, align 1, !tbaa !40
  %710 = load ptr, ptr %19, align 8, !tbaa !5
  %711 = getelementptr inbounds i8, ptr %710, i64 2
  store i8 %709, ptr %711, align 1, !tbaa !32
  %712 = load ptr, ptr %19, align 8, !tbaa !5
  %713 = getelementptr inbounds i8, ptr %712, i64 3
  store i8 -1, ptr %713, align 1, !tbaa !32
  br label %714

714:                                              ; preds = %687
  %715 = load i32, ptr %24, align 4, !tbaa !23
  %716 = add nsw i32 %715, 1
  store i32 %716, ptr %24, align 4, !tbaa !23
  %717 = load ptr, ptr %19, align 8, !tbaa !5
  %718 = getelementptr inbounds i8, ptr %717, i64 4
  store ptr %718, ptr %19, align 8, !tbaa !5
  %719 = load i32, ptr %23, align 4, !tbaa !23
  %720 = add nsw i32 %719, 1
  store i32 %720, ptr %23, align 4, !tbaa !23
  br label %682, !llvm.loop !50

721:                                              ; preds = %682
  br label %722

722:                                              ; preds = %721, %680
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #7
  br label %615, !llvm.loop !51

723:                                              ; preds = %615
  br label %724

724:                                              ; preds = %723
  %725 = load i32, ptr %22, align 4, !tbaa !23
  %726 = add nsw i32 %725, -1
  store i32 %726, ptr %22, align 4, !tbaa !23
  br label %599, !llvm.loop !52

727:                                              ; preds = %599
  br label %894

728:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  store i32 0, ptr %44, align 4, !tbaa !23
  %729 = load i32, ptr %26, align 4, !tbaa !23
  %730 = sub nsw i32 %729, 1
  store i32 %730, ptr %22, align 4, !tbaa !23
  br label %731

731:                                              ; preds = %890, %728
  %732 = load i32, ptr %22, align 4, !tbaa !23
  %733 = icmp sge i32 %732, 0
  br i1 %733, label %734, label %893

734:                                              ; preds = %731
  %735 = load i8, ptr %11, align 1, !tbaa !9, !range !30, !noundef !31
  %736 = trunc i8 %735 to i1
  br i1 %736, label %737, label %746

737:                                              ; preds = %734
  %738 = load ptr, ptr %8, align 8, !tbaa !5
  %739 = load ptr, ptr %738, align 8, !tbaa !5
  %740 = load i32, ptr %22, align 4, !tbaa !23
  %741 = load i32, ptr %25, align 4, !tbaa !23
  %742 = mul nsw i32 %740, %741
  %743 = mul nsw i32 %742, 4
  %744 = sext i32 %743 to i64
  %745 = getelementptr inbounds i8, ptr %739, i64 %744
  store ptr %745, ptr %19, align 8, !tbaa !5
  br label %746

746:                                              ; preds = %737, %734
  store i32 0, ptr %23, align 4, !tbaa !23
  br label %747

747:                                              ; preds = %888, %746
  %748 = load i32, ptr %23, align 4, !tbaa !23
  %749 = load i32, ptr %25, align 4, !tbaa !23
  %750 = icmp slt i32 %748, %749
  br i1 %750, label %751, label %889

751:                                              ; preds = %747
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #7
  %752 = load ptr, ptr %32, align 8, !tbaa !5
  %753 = getelementptr inbounds i8, ptr %752, i32 1
  store ptr %753, ptr %32, align 8, !tbaa !5
  %754 = load i8, ptr %752, align 1, !tbaa !32
  store i8 %754, ptr %45, align 1, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #7
  %755 = load ptr, ptr %32, align 8, !tbaa !5
  %756 = getelementptr inbounds i8, ptr %755, i32 1
  store ptr %756, ptr %32, align 8, !tbaa !5
  %757 = load i8, ptr %755, align 1, !tbaa !32
  store i8 %757, ptr %46, align 1, !tbaa !32
  %758 = load i32, ptr %44, align 4, !tbaa !23
  %759 = add nsw i32 %758, 2
  store i32 %759, ptr %44, align 4, !tbaa !23
  %760 = load i8, ptr %45, align 1, !tbaa !32
  %761 = zext i8 %760 to i32
  %762 = icmp eq i32 %761, 0
  br i1 %762, label %763, label %833

763:                                              ; preds = %751
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #7
  store i32 0, ptr %24, align 4, !tbaa !23
  br label %764

764:                                              ; preds = %815, %763
  %765 = load i32, ptr %24, align 4, !tbaa !23
  %766 = load i8, ptr %46, align 1, !tbaa !32
  %767 = zext i8 %766 to i32
  %768 = icmp slt i32 %765, %767
  br i1 %768, label %769, label %822

769:                                              ; preds = %764
  %770 = load i32, ptr %24, align 4, !tbaa !23
  %771 = srem i32 %770, 2
  %772 = icmp eq i32 %771, 0
  br i1 %772, label %773, label %783

773:                                              ; preds = %769
  %774 = load ptr, ptr %32, align 8, !tbaa !5
  %775 = getelementptr inbounds i8, ptr %774, i32 1
  store ptr %775, ptr %32, align 8, !tbaa !5
  %776 = load i8, ptr %774, align 1, !tbaa !32
  store i8 %776, ptr %47, align 1, !tbaa !32
  %777 = load i32, ptr %44, align 4, !tbaa !23
  %778 = add nsw i32 %777, 1
  store i32 %778, ptr %44, align 4, !tbaa !23
  %779 = load i8, ptr %47, align 1, !tbaa !32
  %780 = zext i8 %779 to i32
  %781 = ashr i32 %780, 4
  %782 = trunc i32 %781 to i8
  store i8 %782, ptr %43, align 1, !tbaa !32
  br label %788

783:                                              ; preds = %769
  %784 = load i8, ptr %47, align 1, !tbaa !32
  %785 = zext i8 %784 to i32
  %786 = and i32 %785, 15
  %787 = trunc i32 %786 to i8
  store i8 %787, ptr %43, align 1, !tbaa !32
  br label %788

788:                                              ; preds = %783, %773
  %789 = load ptr, ptr %17, align 8, !tbaa !5
  %790 = load i8, ptr %43, align 1, !tbaa !32
  %791 = zext i8 %790 to i64
  %792 = getelementptr inbounds %struct.tagRGBQUAD, ptr %789, i64 %791
  %793 = getelementptr inbounds %struct.tagRGBQUAD, ptr %792, i32 0, i32 2
  %794 = load i8, ptr %793, align 1, !tbaa !37
  %795 = load ptr, ptr %19, align 8, !tbaa !5
  %796 = getelementptr inbounds i8, ptr %795, i64 0
  store i8 %794, ptr %796, align 1, !tbaa !32
  %797 = load ptr, ptr %17, align 8, !tbaa !5
  %798 = load i8, ptr %43, align 1, !tbaa !32
  %799 = zext i8 %798 to i64
  %800 = getelementptr inbounds %struct.tagRGBQUAD, ptr %797, i64 %799
  %801 = getelementptr inbounds %struct.tagRGBQUAD, ptr %800, i32 0, i32 1
  %802 = load i8, ptr %801, align 1, !tbaa !39
  %803 = load ptr, ptr %19, align 8, !tbaa !5
  %804 = getelementptr inbounds i8, ptr %803, i64 1
  store i8 %802, ptr %804, align 1, !tbaa !32
  %805 = load ptr, ptr %17, align 8, !tbaa !5
  %806 = load i8, ptr %43, align 1, !tbaa !32
  %807 = zext i8 %806 to i64
  %808 = getelementptr inbounds %struct.tagRGBQUAD, ptr %805, i64 %807
  %809 = getelementptr inbounds %struct.tagRGBQUAD, ptr %808, i32 0, i32 0
  %810 = load i8, ptr %809, align 1, !tbaa !40
  %811 = load ptr, ptr %19, align 8, !tbaa !5
  %812 = getelementptr inbounds i8, ptr %811, i64 2
  store i8 %810, ptr %812, align 1, !tbaa !32
  %813 = load ptr, ptr %19, align 8, !tbaa !5
  %814 = getelementptr inbounds i8, ptr %813, i64 3
  store i8 -1, ptr %814, align 1, !tbaa !32
  br label %815

815:                                              ; preds = %788
  %816 = load i32, ptr %24, align 4, !tbaa !23
  %817 = add nsw i32 %816, 1
  store i32 %817, ptr %24, align 4, !tbaa !23
  %818 = load ptr, ptr %19, align 8, !tbaa !5
  %819 = getelementptr inbounds i8, ptr %818, i64 4
  store ptr %819, ptr %19, align 8, !tbaa !5
  %820 = load i32, ptr %23, align 4, !tbaa !23
  %821 = add nsw i32 %820, 1
  store i32 %821, ptr %23, align 4, !tbaa !23
  br label %764, !llvm.loop !53

822:                                              ; preds = %764
  br label %823

823:                                              ; preds = %827, %822
  %824 = load i32, ptr %44, align 4, !tbaa !23
  %825 = srem i32 %824, 2
  %826 = icmp ne i32 %825, 0
  br i1 %826, label %827, label %832

827:                                              ; preds = %823
  %828 = load ptr, ptr %32, align 8, !tbaa !5
  %829 = getelementptr inbounds i8, ptr %828, i32 1
  store ptr %829, ptr %32, align 8, !tbaa !5
  %830 = load i32, ptr %44, align 4, !tbaa !23
  %831 = add nsw i32 %830, 1
  store i32 %831, ptr %44, align 4, !tbaa !23
  br label %823, !llvm.loop !54

832:                                              ; preds = %823
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #7
  br label %888

833:                                              ; preds = %751
  store i32 0, ptr %24, align 4, !tbaa !23
  br label %834

834:                                              ; preds = %880, %833
  %835 = load i32, ptr %24, align 4, !tbaa !23
  %836 = load i8, ptr %45, align 1, !tbaa !32
  %837 = zext i8 %836 to i32
  %838 = icmp slt i32 %835, %837
  br i1 %838, label %839, label %887

839:                                              ; preds = %834
  %840 = load i32, ptr %24, align 4, !tbaa !23
  %841 = srem i32 %840, 2
  %842 = icmp eq i32 %841, 0
  br i1 %842, label %843, label %848

843:                                              ; preds = %839
  %844 = load i8, ptr %46, align 1, !tbaa !32
  %845 = zext i8 %844 to i32
  %846 = ashr i32 %845, 4
  %847 = trunc i32 %846 to i8
  store i8 %847, ptr %43, align 1, !tbaa !32
  br label %853

848:                                              ; preds = %839
  %849 = load i8, ptr %46, align 1, !tbaa !32
  %850 = zext i8 %849 to i32
  %851 = and i32 %850, 15
  %852 = trunc i32 %851 to i8
  store i8 %852, ptr %43, align 1, !tbaa !32
  br label %853

853:                                              ; preds = %848, %843
  %854 = load ptr, ptr %17, align 8, !tbaa !5
  %855 = load i8, ptr %43, align 1, !tbaa !32
  %856 = zext i8 %855 to i64
  %857 = getelementptr inbounds %struct.tagRGBQUAD, ptr %854, i64 %856
  %858 = getelementptr inbounds %struct.tagRGBQUAD, ptr %857, i32 0, i32 2
  %859 = load i8, ptr %858, align 1, !tbaa !37
  %860 = load ptr, ptr %19, align 8, !tbaa !5
  %861 = getelementptr inbounds i8, ptr %860, i64 0
  store i8 %859, ptr %861, align 1, !tbaa !32
  %862 = load ptr, ptr %17, align 8, !tbaa !5
  %863 = load i8, ptr %43, align 1, !tbaa !32
  %864 = zext i8 %863 to i64
  %865 = getelementptr inbounds %struct.tagRGBQUAD, ptr %862, i64 %864
  %866 = getelementptr inbounds %struct.tagRGBQUAD, ptr %865, i32 0, i32 1
  %867 = load i8, ptr %866, align 1, !tbaa !39
  %868 = load ptr, ptr %19, align 8, !tbaa !5
  %869 = getelementptr inbounds i8, ptr %868, i64 1
  store i8 %867, ptr %869, align 1, !tbaa !32
  %870 = load ptr, ptr %17, align 8, !tbaa !5
  %871 = load i8, ptr %43, align 1, !tbaa !32
  %872 = zext i8 %871 to i64
  %873 = getelementptr inbounds %struct.tagRGBQUAD, ptr %870, i64 %872
  %874 = getelementptr inbounds %struct.tagRGBQUAD, ptr %873, i32 0, i32 0
  %875 = load i8, ptr %874, align 1, !tbaa !40
  %876 = load ptr, ptr %19, align 8, !tbaa !5
  %877 = getelementptr inbounds i8, ptr %876, i64 2
  store i8 %875, ptr %877, align 1, !tbaa !32
  %878 = load ptr, ptr %19, align 8, !tbaa !5
  %879 = getelementptr inbounds i8, ptr %878, i64 3
  store i8 -1, ptr %879, align 1, !tbaa !32
  br label %880

880:                                              ; preds = %853
  %881 = load i32, ptr %24, align 4, !tbaa !23
  %882 = add nsw i32 %881, 1
  store i32 %882, ptr %24, align 4, !tbaa !23
  %883 = load ptr, ptr %19, align 8, !tbaa !5
  %884 = getelementptr inbounds i8, ptr %883, i64 4
  store ptr %884, ptr %19, align 8, !tbaa !5
  %885 = load i32, ptr %23, align 4, !tbaa !23
  %886 = add nsw i32 %885, 1
  store i32 %886, ptr %23, align 4, !tbaa !23
  br label %834, !llvm.loop !55

887:                                              ; preds = %834
  br label %888

888:                                              ; preds = %887, %832
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #7
  br label %747, !llvm.loop !56

889:                                              ; preds = %747
  br label %890

890:                                              ; preds = %889
  %891 = load i32, ptr %22, align 4, !tbaa !23
  %892 = add nsw i32 %891, -1
  store i32 %892, ptr %22, align 4, !tbaa !23
  br label %731, !llvm.loop !57

893:                                              ; preds = %731
  store i32 2, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  br label %894

894:                                              ; preds = %893, %727, %595, %197
  %895 = load ptr, ptr %18, align 8, !tbaa !5
  %896 = icmp eq ptr %895, null
  br i1 %896, label %898, label %897

897:                                              ; preds = %894
  call void @_ZdaPv(ptr noundef %895) #9
  br label %898

898:                                              ; preds = %897, %894
  store i32 1, ptr %6, align 4
  store i32 1, ptr %29, align 4
  br label %899

899:                                              ; preds = %898, %174, %99
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  br label %901

900:                                              ; preds = %108, %104, %100
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  br label %903

901:                                              ; preds = %899, %59
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, 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
  %902 = load i32, ptr %6, align 4
  ret i32 %902

903:                                              ; preds = %900, %60
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, 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 %904

904:                                              ; preds = %903
  %905 = load ptr, ptr %27, align 8
  %906 = load i32, ptr %28, align 4
  %907 = insertvalue { ptr, i32 } poison, ptr %905, 0
  %908 = insertvalue { ptr, i32 } %907, i32 %906, 1
  resume { ptr, i32 } %908
}

; 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 0}
!16 = !{!"_ZTS19tagBITMAPFILEHEADER", !17, i64 0, !18, i64 2, !17, i64 6, !17, i64 8, !18, i64 10}
!17 = !{!"short", !7, i64 0}
!18 = !{!"int", !7, i64 0}
!19 = !{!20, !18, i64 16}
!20 = !{!"_ZTS19tagBITMAPINFOHEADER", !18, i64 0, !18, i64 4, !18, i64 8, !17, i64 12, !17, i64 14, !18, i64 16, !18, i64 20, !18, i64 24, !18, i64 28, !18, i64 32, !18, i64 36}
!21 = !{!22, !17, i64 10}
!22 = !{!"_ZTS19tagBITMAPCOREHEADER", !18, i64 0, !17, i64 4, !17, i64 6, !17, i64 8, !17, i64 10}
!23 = !{!18, !18, i64 0}
!24 = !{!22, !17, i64 4}
!25 = !{!22, !17, i64 6}
!26 = !{!20, !17, i64 14}
!27 = !{!20, !18, i64 4}
!28 = !{!20, !18, i64 8}
!29 = !{!16, !18, i64 10}
!30 = !{i8 0, i8 2}
!31 = !{}
!32 = !{!7, !7, i64 0}
!33 = !{!34, !7, i64 2}
!34 = !{!"_ZTS12tagRGBTRIPLE", !7, i64 0, !7, i64 1, !7, i64 2}
!35 = !{!34, !7, i64 1}
!36 = !{!34, !7, i64 0}
!37 = !{!38, !7, i64 2}
!38 = !{!"_ZTS10tagRGBQUAD", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3}
!39 = !{!38, !7, i64 1}
!40 = !{!38, !7, i64 0}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = distinct !{!43, !42}
!44 = distinct !{!44, !42}
!45 = distinct !{!45, !42}
!46 = distinct !{!46, !42}
!47 = distinct !{!47, !42}
!48 = distinct !{!48, !42}
!49 = distinct !{!49, !42}
!50 = distinct !{!50, !42}
!51 = distinct !{!51, !42}
!52 = distinct !{!52, !42}
!53 = distinct !{!53, !42}
!54 = distinct !{!54, !42}
!55 = distinct !{!55, !42}
!56 = distinct !{!56, !42}
!57 = distinct !{!57, !42}


; 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.tagRGBQUAD = type { i8, i8, i8, i8 }
%struct.tagRGBTRIPLE = type { i8, i8, i8 }

; Function Attrs: mustprogress uwtable
define dso_local noundef range(i32 -1, 2) i32 @_Z11LoadFileBMPPKcPPhPiS3_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 %683, label %18

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

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 %36

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 %38

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 %38

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 %38

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

34:                                               ; preds = %33
  %35 = load i16, ptr %30, align 2, !tbaa !8
  %.not = icmp eq i16 %35, 19778
  br i1 %.not, label %42, label %.sink.split

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

38:                                               ; preds = %31, %28, %22
  %39 = landingpad { ptr, i32 }
          cleanup
  br label %684

40:                                               ; preds = %66, %33
  %41 = landingpad { ptr, i32 }
          cleanup
  br label %684

42:                                               ; preds = %34
  %43 = getelementptr inbounds i8, ptr %30, i64 30
  %44 = load i32, ptr %43, align 4, !tbaa !13
  %45 = icmp ugt i32 %44, 3
  %46 = getelementptr inbounds i8, ptr %30, i64 18
  br i1 %45, label %47, label %55

47:                                               ; preds = %42
  %48 = getelementptr inbounds i8, ptr %30, i64 26
  %49 = getelementptr inbounds i8, ptr %30, i64 24
  %50 = load i16, ptr %46, align 4, !tbaa !15
  %51 = zext i16 %50 to i32
  %52 = getelementptr inbounds i8, ptr %30, i64 20
  %53 = load i16, ptr %52, align 2, !tbaa !17
  %54 = zext i16 %53 to i32
  br label %61

55:                                               ; preds = %42
  %56 = getelementptr inbounds i8, ptr %30, i64 54
  %57 = getelementptr inbounds i8, ptr %30, i64 28
  %58 = load i32, ptr %46, align 4, !tbaa !18
  %59 = getelementptr inbounds i8, ptr %30, i64 22
  %60 = load i32, ptr %59, align 4, !tbaa !19
  br label %61

61:                                               ; preds = %55, %47
  %.0327 = phi ptr [ %48, %47 ], [ %56, %55 ]
  %.0326 = phi i32 [ %54, %47 ], [ %60, %55 ]
  %.0325 = phi i32 [ %51, %47 ], [ %58, %55 ]
  %.0303 = phi i32 [ -1, %47 ], [ %44, %55 ]
  %.0302.in.in = phi ptr [ %49, %47 ], [ %57, %55 ]
  %.0302.in = load i16, ptr %.0302.in.in, align 2, !tbaa !20
  %.not356 = icmp eq ptr %2, null
  br i1 %.not356, label %63, label %62

62:                                               ; preds = %61
  store i32 %.0325, ptr %2, align 4, !tbaa !21
  br label %63

63:                                               ; preds = %62, %61
  %.not357 = icmp eq ptr %3, null
  br i1 %.not357, label %65, label %64

64:                                               ; preds = %63
  store i32 %.0326, ptr %3, align 4, !tbaa !21
  br label %65

65:                                               ; preds = %64, %63
  %.not358 = icmp eq ptr %1, null
  br i1 %.not358, label %.sink.split, label %66

66:                                               ; preds = %65
  %67 = shl i32 %.0326, 2
  %68 = mul i32 %67, %.0325
  %69 = sext i32 %68 to i64
  %70 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %69) #8
          to label %71 unwind label %40

71:                                               ; preds = %66
  store ptr %70, ptr %1, align 8, !tbaa !22
  %72 = getelementptr inbounds i8, ptr %30, i64 10
  %73 = load i32, ptr %72, align 2, !tbaa !24
  %74 = zext i32 %73 to i64
  %75 = getelementptr inbounds i8, ptr %30, i64 %74
  switch i32 %.0303, label %.sink.split [
    i32 -1, label %253
    i32 0, label %253
    i32 1, label %.preheader376
    i32 2, label %.preheader384
  ]

.preheader384:                                    ; preds = %71
  %76 = icmp sgt i32 %.0326, 0
  br i1 %76, label %.lr.ph421, label %.sink.split

.lr.ph421:                                        ; preds = %.preheader384
  %77 = shl i32 %.0325, 2
  %78 = icmp sgt i32 %.0325, 0
  br i1 %78, label %.lr.ph421.split.us.preheader, label %.sink.split

.lr.ph421.split.us.preheader:                     ; preds = %.lr.ph421
  %79 = zext nneg i32 %.0326 to i64
  br label %.lr.ph421.split.us

.lr.ph421.split.us:                               ; preds = %.lr.ph421.split.us.preheader, %..loopexit383_crit_edge.us
  %indvars.iv.in = phi i64 [ %79, %.lr.ph421.split.us.preheader ], [ %indvars.iv, %..loopexit383_crit_edge.us ]
  %.0419.us = phi i8 [ undef, %.lr.ph421.split.us.preheader ], [ %.4.us, %..loopexit383_crit_edge.us ]
  %.0288418.us = phi i32 [ 0, %.lr.ph421.split.us.preheader ], [ %.5.us, %..loopexit383_crit_edge.us ]
  %.15417.us = phi ptr [ %70, %.lr.ph421.split.us.preheader ], [ %.20.us, %..loopexit383_crit_edge.us ]
  %.12339416.us = phi ptr [ %75, %.lr.ph421.split.us.preheader ], [ %.17344.us, %..loopexit383_crit_edge.us ]
  %indvars.iv = add nsw i64 %indvars.iv.in, -1
  br i1 %4, label %80, label %.lr.ph410.us.preheader

80:                                               ; preds = %.lr.ph421.split.us
  %81 = load ptr, ptr %1, align 8, !tbaa !22
  %82 = trunc nuw nsw i64 %indvars.iv to i32
  %83 = mul i32 %77, %82
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds i8, ptr %81, i64 %84
  br label %.lr.ph410.us.preheader

.lr.ph410.us.preheader:                           ; preds = %80, %.lr.ph421.split.us
  %.17407.us.ph = phi ptr [ %.15417.us, %.lr.ph421.split.us ], [ %85, %80 ]
  br label %.lr.ph410.us

.lr.ph410.us:                                     ; preds = %.lr.ph410.us.preheader, %.loopexit379.us
  %.1409.us = phi i8 [ %.4.us, %.loopexit379.us ], [ %.0419.us, %.lr.ph410.us.preheader ]
  %.1289408.us = phi i32 [ %.5.us, %.loopexit379.us ], [ %.0288418.us, %.lr.ph410.us.preheader ]
  %.17407.us = phi ptr [ %.20.us, %.loopexit379.us ], [ %.17407.us.ph, %.lr.ph410.us.preheader ]
  %.9316406.us = phi i32 [ %.12319.us, %.loopexit379.us ], [ 0, %.lr.ph410.us.preheader ]
  %.13340405.us = phi ptr [ %.17344.us, %.loopexit379.us ], [ %.12339416.us, %.lr.ph410.us.preheader ]
  %86 = getelementptr inbounds i8, ptr %.13340405.us, i64 1
  %87 = load i8, ptr %.13340405.us, align 1, !tbaa !25
  %88 = getelementptr inbounds i8, ptr %.13340405.us, i64 2
  %89 = load i8, ptr %86, align 1, !tbaa !25
  %90 = add nsw i32 %.1289408.us, 2
  %91 = zext i8 %87 to i32
  %92 = icmp eq i8 %87, 0
  br i1 %92, label %.preheader380.us, label %.preheader381.us

93:                                               ; preds = %93, %.preheader381.us.new
  %.19388.us = phi ptr [ %.17407.us, %.preheader381.us.new ], [ %108, %93 ]
  %.4324386.us = phi i32 [ 0, %.preheader381.us.new ], [ %107, %93 ]
  %niter = phi i32 [ 0, %.preheader381.us.new ], [ %niter.next.1, %93 ]
  %94 = load i8, ptr %157, align 1, !tbaa !26
  store i8 %94, ptr %.19388.us, align 1, !tbaa !25
  %95 = load i8, ptr %158, align 1, !tbaa !28
  %96 = getelementptr inbounds i8, ptr %.19388.us, i64 1
  store i8 %95, ptr %96, align 1, !tbaa !25
  %97 = load i8, ptr %156, align 1, !tbaa !29
  %98 = getelementptr inbounds i8, ptr %.19388.us, i64 2
  store i8 %97, ptr %98, align 1, !tbaa !25
  %99 = getelementptr inbounds i8, ptr %.19388.us, i64 3
  store i8 -1, ptr %99, align 1, !tbaa !25
  %100 = getelementptr inbounds i8, ptr %.19388.us, i64 4
  %101 = load i8, ptr %161, align 1, !tbaa !26
  store i8 %101, ptr %100, align 1, !tbaa !25
  %102 = load i8, ptr %162, align 1, !tbaa !28
  %103 = getelementptr inbounds i8, ptr %.19388.us, i64 5
  store i8 %102, ptr %103, align 1, !tbaa !25
  %104 = load i8, ptr %160, align 1, !tbaa !29
  %105 = getelementptr inbounds i8, ptr %.19388.us, i64 6
  store i8 %104, ptr %105, align 1, !tbaa !25
  %106 = getelementptr inbounds i8, ptr %.19388.us, i64 7
  store i8 -1, ptr %106, align 1, !tbaa !25
  %107 = add nuw nsw i32 %.4324386.us, 2
  %108 = getelementptr inbounds i8, ptr %.19388.us, 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 %.loopexit379.us.loopexit511.unr-lcssa, label %93, !llvm.loop !30

.lr.ph402.us:                                     ; preds = %.preheader378.us, %.lr.ph402.us
  %.4292401.us = phi i32 [ %110, %.lr.ph402.us ], [ %.2290.lcssa.us, %.preheader378.us ]
  %.16343400.us = phi ptr [ %109, %.lr.ph402.us ], [ %.14341.lcssa.us, %.preheader378.us ]
  %109 = getelementptr inbounds i8, ptr %.16343400.us, i64 1
  %110 = add nsw i32 %.4292401.us, 1
  %111 = and i32 %.4292401.us, 1
  %.not361.us.not = icmp eq i32 %111, 0
  br i1 %.not361.us.not, label %.lr.ph402.us, label %.loopexit379.us, !llvm.loop !32

.loopexit379.us.loopexit511.unr-lcssa:            ; preds = %93, %.preheader381.us
  %.lcssa647.ph = phi ptr [ poison, %.preheader381.us ], [ %108, %93 ]
  %.19388.us.unr = phi ptr [ %.17407.us, %.preheader381.us ], [ %108, %93 ]
  %.4324386.us.unr = phi i32 [ 0, %.preheader381.us ], [ %107, %93 ]
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit379.us.loopexit511, label %.loopexit379.us.loopexit511.epilog-lcssa

.loopexit379.us.loopexit511.epilog-lcssa:         ; preds = %.loopexit379.us.loopexit511.unr-lcssa
  %112 = and i32 %.4324386.us.unr, 1
  %113 = icmp eq i32 %112, 0
  %.1294.us.epil = select i1 %113, i8 %152, i8 %153
  %114 = zext nneg i8 %.1294.us.epil to i64
  %115 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %114
  %116 = getelementptr inbounds i8, ptr %115, i64 2
  %117 = load i8, ptr %116, align 1, !tbaa !26
  store i8 %117, ptr %.19388.us.unr, align 1, !tbaa !25
  %118 = getelementptr inbounds i8, ptr %115, i64 1
  %119 = load i8, ptr %118, align 1, !tbaa !28
  %120 = getelementptr inbounds i8, ptr %.19388.us.unr, i64 1
  store i8 %119, ptr %120, align 1, !tbaa !25
  %121 = load i8, ptr %115, align 1, !tbaa !29
  %122 = getelementptr inbounds i8, ptr %.19388.us.unr, i64 2
  store i8 %121, ptr %122, align 1, !tbaa !25
  %123 = getelementptr inbounds i8, ptr %.19388.us.unr, i64 3
  store i8 -1, ptr %123, align 1, !tbaa !25
  %124 = getelementptr inbounds i8, ptr %.19388.us.unr, i64 4
  br label %.loopexit379.us.loopexit511

.loopexit379.us.loopexit511:                      ; preds = %.loopexit379.us.loopexit511.unr-lcssa, %.loopexit379.us.loopexit511.epilog-lcssa
  %.lcssa647 = phi ptr [ %.lcssa647.ph, %.loopexit379.us.loopexit511.unr-lcssa ], [ %124, %.loopexit379.us.loopexit511.epilog-lcssa ]
  %125 = add i32 %.9316406.us, %91
  br label %.loopexit379.us

.loopexit379.us:                                  ; preds = %.lr.ph402.us, %.loopexit379.us.loopexit511, %.preheader378.us
  %.17344.us = phi ptr [ %.14341.lcssa.us, %.preheader378.us ], [ %88, %.loopexit379.us.loopexit511 ], [ %109, %.lr.ph402.us ]
  %.12319.us = phi i32 [ %.10317.lcssa.us, %.preheader378.us ], [ %125, %.loopexit379.us.loopexit511 ], [ %.10317.lcssa.us, %.lr.ph402.us ]
  %.20.us = phi ptr [ %.18.lcssa.us, %.preheader378.us ], [ %.lcssa647, %.loopexit379.us.loopexit511 ], [ %.18.lcssa.us, %.lr.ph402.us ]
  %.5.us = phi i32 [ %.2290.lcssa.us, %.preheader378.us ], [ %90, %.loopexit379.us.loopexit511 ], [ %110, %.lr.ph402.us ]
  %.4.us = phi i8 [ %.2.lcssa.us, %.preheader378.us ], [ %.1409.us, %.loopexit379.us.loopexit511 ], [ %.2.lcssa.us, %.lr.ph402.us ]
  %126 = icmp slt i32 %.12319.us, %.0325
  br i1 %126, label %.lr.ph410.us, label %..loopexit383_crit_edge.us, !llvm.loop !33

.lr.ph.us:                                        ; preds = %.preheader380.us, %136
  %.2394.us = phi i8 [ %.3.us, %136 ], [ %.1409.us, %.preheader380.us ]
  %.2290393.us = phi i32 [ %.3291.us, %136 ], [ %90, %.preheader380.us ]
  %.18392.us = phi ptr [ %148, %136 ], [ %.17407.us, %.preheader380.us ]
  %.3323390.us = phi i32 [ %147, %136 ], [ 0, %.preheader380.us ]
  %.14341389.us = phi ptr [ %.15342.us, %136 ], [ %88, %.preheader380.us ]
  %127 = and i32 %.3323390.us, 1
  %128 = icmp eq i32 %127, 0
  br i1 %128, label %131, label %129

129:                                              ; preds = %.lr.ph.us
  %130 = and i8 %.2394.us, 15
  br label %136

131:                                              ; preds = %.lr.ph.us
  %132 = getelementptr inbounds i8, ptr %.14341389.us, i64 1
  %133 = load i8, ptr %.14341389.us, align 1, !tbaa !25
  %134 = add nsw i32 %.2290393.us, 1
  %135 = lshr i8 %133, 4
  br label %136

136:                                              ; preds = %131, %129
  %.15342.us = phi ptr [ %132, %131 ], [ %.14341389.us, %129 ]
  %.0293.us = phi i8 [ %135, %131 ], [ %130, %129 ]
  %.3291.us = phi i32 [ %134, %131 ], [ %.2290393.us, %129 ]
  %.3.us = phi i8 [ %133, %131 ], [ %.2394.us, %129 ]
  %137 = zext nneg i8 %.0293.us to i64
  %138 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %137
  %139 = getelementptr inbounds i8, ptr %138, i64 2
  %140 = load i8, ptr %139, align 1, !tbaa !26
  store i8 %140, ptr %.18392.us, align 1, !tbaa !25
  %141 = getelementptr inbounds i8, ptr %138, i64 1
  %142 = load i8, ptr %141, align 1, !tbaa !28
  %143 = getelementptr inbounds i8, ptr %.18392.us, i64 1
  store i8 %142, ptr %143, align 1, !tbaa !25
  %144 = load i8, ptr %138, align 1, !tbaa !29
  %145 = getelementptr inbounds i8, ptr %.18392.us, i64 2
  store i8 %144, ptr %145, align 1, !tbaa !25
  %146 = getelementptr inbounds i8, ptr %.18392.us, i64 3
  store i8 -1, ptr %146, align 1, !tbaa !25
  %147 = add nuw nsw i32 %.3323390.us, 1
  %148 = getelementptr inbounds i8, ptr %.18392.us, i64 4
  %exitcond541.not = icmp eq i32 %147, %151
  br i1 %exitcond541.not, label %.preheader378.us.loopexit, label %.lr.ph.us, !llvm.loop !34

.preheader378.us.loopexit:                        ; preds = %136
  %149 = add i32 %.9316406.us, %151
  br label %.preheader378.us

.preheader378.us:                                 ; preds = %.preheader378.us.loopexit, %.preheader380.us
  %.14341.lcssa.us = phi ptr [ %88, %.preheader380.us ], [ %.15342.us, %.preheader378.us.loopexit ]
  %.10317.lcssa.us = phi i32 [ %.9316406.us, %.preheader380.us ], [ %149, %.preheader378.us.loopexit ]
  %.18.lcssa.us = phi ptr [ %.17407.us, %.preheader380.us ], [ %148, %.preheader378.us.loopexit ]
  %.2290.lcssa.us = phi i32 [ %90, %.preheader380.us ], [ %.3291.us, %.preheader378.us.loopexit ]
  %.2.lcssa.us = phi i8 [ %.1409.us, %.preheader380.us ], [ %.3.us, %.preheader378.us.loopexit ]
  %150 = and i32 %.2290.lcssa.us, 1
  %.not361399.us = icmp eq i32 %150, 0
  br i1 %.not361399.us, label %.loopexit379.us, label %.lr.ph402.us

.preheader380.us:                                 ; preds = %.lr.ph410.us
  %151 = zext i8 %89 to i32
  %.not499 = icmp eq i8 %89, 0
  br i1 %.not499, label %.preheader378.us, label %.lr.ph.us

.preheader381.us:                                 ; preds = %.lr.ph410.us
  %152 = lshr i8 %89, 4
  %153 = and i8 %89, 15
  %xtraiter = and i32 %91, 1
  %154 = icmp eq i8 %87, 1
  br i1 %154, label %.loopexit379.us.loopexit511.unr-lcssa, label %.preheader381.us.new

.preheader381.us.new:                             ; preds = %.preheader381.us
  %unroll_iter = and i32 %91, 254
  %155 = zext nneg i8 %152 to i64
  %156 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %155
  %157 = getelementptr inbounds i8, ptr %156, i64 2
  %158 = getelementptr inbounds i8, ptr %156, i64 1
  %159 = zext nneg i8 %153 to i64
  %160 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %159
  %161 = getelementptr inbounds i8, ptr %160, i64 2
  %162 = getelementptr inbounds i8, ptr %160, i64 1
  br label %93

..loopexit383_crit_edge.us:                       ; preds = %.loopexit379.us
  %163 = icmp sgt i64 %indvars.iv.in, 1
  br i1 %163, label %.lr.ph421.split.us, label %.sink.split, !llvm.loop !35

.preheader376:                                    ; preds = %71
  %164 = icmp sgt i32 %.0326, 0
  br i1 %164, label %.lr.ph448, label %.sink.split

.lr.ph448:                                        ; preds = %.preheader376
  %165 = shl i32 %.0325, 2
  %166 = icmp sgt i32 %.0325, 0
  br i1 %166, label %.lr.ph448.split.us.preheader, label %.sink.split

.lr.ph448.split.us.preheader:                     ; preds = %.lr.ph448
  %167 = zext nneg i32 %.0326 to i64
  br label %.lr.ph448.split.us

.lr.ph448.split.us:                               ; preds = %.lr.ph448.split.us.preheader, %..loopexit375_crit_edge.us
  %indvars.iv544.in = phi i64 [ %167, %.lr.ph448.split.us.preheader ], [ %indvars.iv544, %..loopexit375_crit_edge.us ]
  %.9446.us = phi ptr [ %70, %.lr.ph448.split.us.preheader ], [ %.14.us, %..loopexit375_crit_edge.us ]
  %.8335445.us = phi ptr [ %75, %.lr.ph448.split.us.preheader ], [ %.11338.us, %..loopexit375_crit_edge.us ]
  %indvars.iv544 = add nsw i64 %indvars.iv544.in, -1
  br i1 %4, label %168, label %.lr.ph441.us.preheader

168:                                              ; preds = %.lr.ph448.split.us
  %169 = load ptr, ptr %1, align 8, !tbaa !22
  %170 = trunc nuw nsw i64 %indvars.iv544 to i32
  %171 = mul i32 %165, %170
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds i8, ptr %169, i64 %172
  br label %.lr.ph441.us.preheader

.lr.ph441.us.preheader:                           ; preds = %168, %.lr.ph448.split.us
  %.11439.us.ph = phi ptr [ %.9446.us, %.lr.ph448.split.us ], [ %173, %168 ]
  br label %.lr.ph441.us

.lr.ph441.us:                                     ; preds = %.lr.ph441.us.preheader, %.loopexit374.us
  %.11439.us = phi ptr [ %.14.us, %.loopexit374.us ], [ %.11439.us.ph, %.lr.ph441.us.preheader ]
  %.5312438.us = phi i32 [ %.8315.us, %.loopexit374.us ], [ 0, %.lr.ph441.us.preheader ]
  %.9336437.us = phi ptr [ %.11338.us, %.loopexit374.us ], [ %.8335445.us, %.lr.ph441.us.preheader ]
  %174 = getelementptr inbounds i8, ptr %.9336437.us, i64 1
  %175 = load i8, ptr %.9336437.us, align 1, !tbaa !25
  %176 = getelementptr inbounds i8, ptr %.9336437.us, i64 2
  %177 = load i8, ptr %174, align 1, !tbaa !25
  %178 = zext i8 %175 to i32
  %179 = icmp eq i8 %175, 0
  br i1 %179, label %.preheader372.us, label %.preheader373.us

180:                                              ; preds = %180, %.preheader373.us.new
  %.13429.us = phi ptr [ %.11439.us, %.preheader373.us.new ], [ %194, %180 ]
  %niter657 = phi i32 [ 0, %.preheader373.us.new ], [ %niter657.next.1, %180 ]
  %181 = load i8, ptr %249, align 1, !tbaa !26
  store i8 %181, ptr %.13429.us, align 1, !tbaa !25
  %182 = load i8, ptr %250, align 1, !tbaa !28
  %183 = getelementptr inbounds i8, ptr %.13429.us, i64 1
  store i8 %182, ptr %183, align 1, !tbaa !25
  %184 = load i8, ptr %248, align 1, !tbaa !29
  %185 = getelementptr inbounds i8, ptr %.13429.us, i64 2
  store i8 %184, ptr %185, align 1, !tbaa !25
  %186 = getelementptr inbounds i8, ptr %.13429.us, i64 3
  store i8 -1, ptr %186, align 1, !tbaa !25
  %187 = getelementptr inbounds i8, ptr %.13429.us, i64 4
  %188 = load i8, ptr %249, align 1, !tbaa !26
  store i8 %188, ptr %187, align 1, !tbaa !25
  %189 = load i8, ptr %250, align 1, !tbaa !28
  %190 = getelementptr inbounds i8, ptr %.13429.us, i64 5
  store i8 %189, ptr %190, align 1, !tbaa !25
  %191 = load i8, ptr %248, align 1, !tbaa !29
  %192 = getelementptr inbounds i8, ptr %.13429.us, i64 6
  store i8 %191, ptr %192, align 1, !tbaa !25
  %193 = getelementptr inbounds i8, ptr %.13429.us, i64 7
  store i8 -1, ptr %193, align 1, !tbaa !25
  %194 = getelementptr inbounds i8, ptr %.13429.us, i64 8
  %niter657.next.1 = add i32 %niter657, 2
  %niter657.ncmp.1 = icmp eq i32 %niter657.next.1, %unroll_iter656
  br i1 %niter657.ncmp.1, label %.loopexit374.us.loopexit.unr-lcssa, label %180, !llvm.loop !36

._crit_edge.us.loopexit.unr-lcssa:                ; preds = %.lr.ph.us449, %.lr.ph.us449.preheader
  %.lcssa645.ph = phi ptr [ poison, %.lr.ph.us449.preheader ], [ %232, %.lr.ph.us449 ]
  %.lcssa644.ph = phi ptr [ poison, %.lr.ph.us449.preheader ], [ %244, %.lr.ph.us449 ]
  %.12433.us.unr = phi ptr [ %.11439.us, %.lr.ph.us449.preheader ], [ %244, %.lr.ph.us449 ]
  %.10337430.us.unr = phi ptr [ %176, %.lr.ph.us449.preheader ], [ %232, %.lr.ph.us449 ]
  %lcmp.mod659.not = icmp eq i32 %xtraiter658, 0
  br i1 %lcmp.mod659.not, label %._crit_edge.us.loopexit, label %.lr.ph.us449.epil

.lr.ph.us449.epil:                                ; preds = %._crit_edge.us.loopexit.unr-lcssa
  %195 = getelementptr inbounds i8, ptr %.10337430.us.unr, i64 1
  %196 = load i8, ptr %.10337430.us.unr, align 1, !tbaa !25
  %197 = zext i8 %196 to i64
  %198 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %197
  %199 = getelementptr inbounds i8, ptr %198, i64 2
  %200 = load i8, ptr %199, align 1, !tbaa !26
  store i8 %200, ptr %.12433.us.unr, align 1, !tbaa !25
  %201 = getelementptr inbounds i8, ptr %198, i64 1
  %202 = load i8, ptr %201, align 1, !tbaa !28
  %203 = getelementptr inbounds i8, ptr %.12433.us.unr, i64 1
  store i8 %202, ptr %203, align 1, !tbaa !25
  %204 = load i8, ptr %198, align 1, !tbaa !29
  %205 = getelementptr inbounds i8, ptr %.12433.us.unr, i64 2
  store i8 %204, ptr %205, align 1, !tbaa !25
  %206 = getelementptr inbounds i8, ptr %.12433.us.unr, i64 3
  store i8 -1, ptr %206, align 1, !tbaa !25
  %207 = getelementptr inbounds i8, ptr %.12433.us.unr, i64 4
  br label %._crit_edge.us.loopexit

._crit_edge.us.loopexit:                          ; preds = %._crit_edge.us.loopexit.unr-lcssa, %.lr.ph.us449.epil
  %.lcssa645 = phi ptr [ %.lcssa645.ph, %._crit_edge.us.loopexit.unr-lcssa ], [ %195, %.lr.ph.us449.epil ]
  %.lcssa644 = phi ptr [ %.lcssa644.ph, %._crit_edge.us.loopexit.unr-lcssa ], [ %207, %.lr.ph.us449.epil ]
  %208 = add i32 %.5312438.us, %245
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.loopexit, %.preheader372.us
  %.10337.lcssa.us = phi ptr [ %176, %.preheader372.us ], [ %.lcssa645, %._crit_edge.us.loopexit ]
  %.6313.lcssa.us = phi i32 [ %.5312438.us, %.preheader372.us ], [ %208, %._crit_edge.us.loopexit ]
  %.12.lcssa.us = phi ptr [ %.11439.us, %.preheader372.us ], [ %.lcssa644, %._crit_edge.us.loopexit ]
  %209 = and i32 %245, 1
  %spec.select.idx.us = zext nneg i32 %209 to i64
  %spec.select.us = getelementptr inbounds i8, ptr %.10337.lcssa.us, i64 %spec.select.idx.us
  br label %.loopexit374.us

.loopexit374.us.loopexit.unr-lcssa:               ; preds = %180, %.preheader373.us
  %.lcssa643.ph = phi ptr [ poison, %.preheader373.us ], [ %194, %180 ]
  %.13429.us.unr = phi ptr [ %.11439.us, %.preheader373.us ], [ %194, %180 ]
  %lcmp.mod654.not = icmp eq i32 %xtraiter653, 0
  br i1 %lcmp.mod654.not, label %.loopexit374.us.loopexit, label %.loopexit374.us.loopexit.epilog-lcssa

.loopexit374.us.loopexit.epilog-lcssa:            ; preds = %.loopexit374.us.loopexit.unr-lcssa
  %210 = load i8, ptr %249, align 1, !tbaa !26
  store i8 %210, ptr %.13429.us.unr, align 1, !tbaa !25
  %211 = load i8, ptr %250, align 1, !tbaa !28
  %212 = getelementptr inbounds i8, ptr %.13429.us.unr, i64 1
  store i8 %211, ptr %212, align 1, !tbaa !25
  %213 = load i8, ptr %248, align 1, !tbaa !29
  %214 = getelementptr inbounds i8, ptr %.13429.us.unr, i64 2
  store i8 %213, ptr %214, align 1, !tbaa !25
  %215 = getelementptr inbounds i8, ptr %.13429.us.unr, i64 3
  store i8 -1, ptr %215, align 1, !tbaa !25
  %216 = getelementptr inbounds i8, ptr %.13429.us.unr, i64 4
  br label %.loopexit374.us.loopexit

.loopexit374.us.loopexit:                         ; preds = %.loopexit374.us.loopexit.unr-lcssa, %.loopexit374.us.loopexit.epilog-lcssa
  %.lcssa643 = phi ptr [ %.lcssa643.ph, %.loopexit374.us.loopexit.unr-lcssa ], [ %216, %.loopexit374.us.loopexit.epilog-lcssa ]
  %217 = add i32 %.5312438.us, %178
  br label %.loopexit374.us

.loopexit374.us:                                  ; preds = %.loopexit374.us.loopexit, %._crit_edge.us
  %.11338.us = phi ptr [ %spec.select.us, %._crit_edge.us ], [ %176, %.loopexit374.us.loopexit ]
  %.8315.us = phi i32 [ %.6313.lcssa.us, %._crit_edge.us ], [ %217, %.loopexit374.us.loopexit ]
  %.14.us = phi ptr [ %.12.lcssa.us, %._crit_edge.us ], [ %.lcssa643, %.loopexit374.us.loopexit ]
  %218 = icmp slt i32 %.8315.us, %.0325
  br i1 %218, label %.lr.ph441.us, label %..loopexit375_crit_edge.us, !llvm.loop !37

.lr.ph.us449:                                     ; preds = %.lr.ph.us449, %.lr.ph.us449.preheader.new
  %.12433.us = phi ptr [ %.11439.us, %.lr.ph.us449.preheader.new ], [ %244, %.lr.ph.us449 ]
  %.10337430.us = phi ptr [ %176, %.lr.ph.us449.preheader.new ], [ %232, %.lr.ph.us449 ]
  %niter663 = phi i32 [ 0, %.lr.ph.us449.preheader.new ], [ %niter663.next.1, %.lr.ph.us449 ]
  %219 = getelementptr inbounds i8, ptr %.10337430.us, i64 1
  %220 = load i8, ptr %.10337430.us, align 1, !tbaa !25
  %221 = zext i8 %220 to i64
  %222 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %221
  %223 = getelementptr inbounds i8, ptr %222, i64 2
  %224 = load i8, ptr %223, align 1, !tbaa !26
  store i8 %224, ptr %.12433.us, align 1, !tbaa !25
  %225 = getelementptr inbounds i8, ptr %222, i64 1
  %226 = load i8, ptr %225, align 1, !tbaa !28
  %227 = getelementptr inbounds i8, ptr %.12433.us, i64 1
  store i8 %226, ptr %227, align 1, !tbaa !25
  %228 = load i8, ptr %222, align 1, !tbaa !29
  %229 = getelementptr inbounds i8, ptr %.12433.us, i64 2
  store i8 %228, ptr %229, align 1, !tbaa !25
  %230 = getelementptr inbounds i8, ptr %.12433.us, i64 3
  store i8 -1, ptr %230, align 1, !tbaa !25
  %231 = getelementptr inbounds i8, ptr %.12433.us, i64 4
  %232 = getelementptr inbounds i8, ptr %.10337430.us, i64 2
  %233 = load i8, ptr %219, align 1, !tbaa !25
  %234 = zext i8 %233 to i64
  %235 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %234
  %236 = getelementptr inbounds i8, ptr %235, i64 2
  %237 = load i8, ptr %236, align 1, !tbaa !26
  store i8 %237, ptr %231, align 1, !tbaa !25
  %238 = getelementptr inbounds i8, ptr %235, i64 1
  %239 = load i8, ptr %238, align 1, !tbaa !28
  %240 = getelementptr inbounds i8, ptr %.12433.us, i64 5
  store i8 %239, ptr %240, align 1, !tbaa !25
  %241 = load i8, ptr %235, align 1, !tbaa !29
  %242 = getelementptr inbounds i8, ptr %.12433.us, i64 6
  store i8 %241, ptr %242, align 1, !tbaa !25
  %243 = getelementptr inbounds i8, ptr %.12433.us, i64 7
  store i8 -1, ptr %243, align 1, !tbaa !25
  %244 = getelementptr inbounds i8, ptr %.12433.us, i64 8
  %niter663.next.1 = add i32 %niter663, 2
  %niter663.ncmp.1 = icmp eq i32 %niter663.next.1, %unroll_iter662
  br i1 %niter663.ncmp.1, label %._crit_edge.us.loopexit.unr-lcssa, label %.lr.ph.us449, !llvm.loop !38

.preheader372.us:                                 ; preds = %.lr.ph441.us
  %245 = zext i8 %177 to i32
  %.not500 = icmp eq i8 %177, 0
  br i1 %.not500, label %._crit_edge.us, label %.lr.ph.us449.preheader

.lr.ph.us449.preheader:                           ; preds = %.preheader372.us
  %xtraiter658 = and i32 %245, 1
  %246 = icmp eq i8 %177, 1
  br i1 %246, label %._crit_edge.us.loopexit.unr-lcssa, label %.lr.ph.us449.preheader.new

.lr.ph.us449.preheader.new:                       ; preds = %.lr.ph.us449.preheader
  %unroll_iter662 = and i32 %245, 254
  br label %.lr.ph.us449

.preheader373.us:                                 ; preds = %.lr.ph441.us
  %247 = zext i8 %177 to i64
  %248 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %247
  %249 = getelementptr inbounds i8, ptr %248, i64 2
  %250 = getelementptr inbounds i8, ptr %248, i64 1
  %xtraiter653 = and i32 %178, 1
  %251 = icmp eq i8 %175, 1
  br i1 %251, label %.loopexit374.us.loopexit.unr-lcssa, label %.preheader373.us.new

.preheader373.us.new:                             ; preds = %.preheader373.us
  %unroll_iter656 = and i32 %178, 254
  br label %180

..loopexit375_crit_edge.us:                       ; preds = %.loopexit374.us
  %252 = icmp sgt i64 %indvars.iv544.in, 1
  br i1 %252, label %.lr.ph448.split.us, label %.sink.split, !llvm.loop !39

253:                                              ; preds = %71, %71
  %254 = icmp sgt i32 %.0326, 0
  br i1 %254, label %.lr.ph498, label %.sink.split

.lr.ph498:                                        ; preds = %253
  %255 = shl i32 %.0325, 2
  %256 = icmp sgt i32 %.0325, 0
  %257 = icmp eq i32 %.0303, -1
  %258 = sdiv i32 %.0325, 2
  %259 = icmp sgt i32 %.0325, 1
  %260 = sdiv i32 %.0325, 8
  %261 = icmp sgt i32 %.0325, 7
  %262 = zext nneg i32 %.0326 to i64
  %263 = add i32 %.0325, -1
  %xtraiter664 = and i32 %.0325, 1
  %264 = icmp eq i32 %263, 0
  %unroll_iter668 = and i32 %.0325, 2147483646
  %lcmp.mod665.not = icmp eq i32 %xtraiter664, 0
  %xtraiter670 = and i32 %.0325, 1
  %265 = icmp eq i32 %263, 0
  %unroll_iter674 = and i32 %.0325, 2147483646
  %lcmp.mod671.not = icmp eq i32 %xtraiter670, 0
  %xtraiter676 = and i32 %.0325, 1
  %266 = icmp eq i32 %263, 0
  %unroll_iter680 = and i32 %.0325, 2147483646
  %lcmp.mod677.not = icmp eq i32 %xtraiter676, 0
  %xtraiter682 = and i32 %.0325, 1
  %267 = icmp eq i32 %263, 0
  %unroll_iter686 = and i32 %.0325, 2147483646
  %lcmp.mod683.not = icmp eq i32 %xtraiter682, 0
  br label %268

268:                                              ; preds = %.lr.ph498, %.loopexit
  %indvars.iv555 = phi i64 [ %262, %.lr.ph498 ], [ %indvars.iv.next556, %.loopexit ]
  %.0296496 = phi ptr [ %70, %.lr.ph498 ], [ %.8, %.loopexit ]
  %.1328495 = phi ptr [ %75, %.lr.ph498 ], [ %.7334, %.loopexit ]
  %indvars.iv.next556 = add nsw i64 %indvars.iv555, -1
  br i1 %4, label %269, label %275

269:                                              ; preds = %268
  %270 = load ptr, ptr %1, align 8, !tbaa !22
  %271 = trunc nuw nsw i64 %indvars.iv.next556 to i32
  %272 = mul i32 %255, %271
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds i8, ptr %270, i64 %273
  br label %275

275:                                              ; preds = %269, %268
  %.1297 = phi ptr [ %274, %269 ], [ %.0296496, %268 ]
  switch i16 %.0302.in, label %.loopexit [
    i16 1, label %.preheader
    i16 4, label %.preheader363
    i16 8, label %.preheader365
    i16 24, label %.preheader367
    i16 32, label %.preheader369
  ]

.preheader369:                                    ; preds = %275
  br i1 %256, label %.lr.ph.preheader, label %.loopexit

.lr.ph.preheader:                                 ; preds = %.preheader369
  br i1 %264, label %.loopexit.loopexit626.unr-lcssa, label %.lr.ph

.preheader367:                                    ; preds = %275
  br i1 %256, label %.lr.ph463.preheader, label %.loopexit

.lr.ph463.preheader:                              ; preds = %.preheader367
  br i1 %265, label %.loopexit.loopexit625.unr-lcssa, label %.lr.ph463

.preheader365:                                    ; preds = %275
  br i1 %256, label %.lr.ph469, label %.loopexit

.lr.ph469:                                        ; preds = %.preheader365
  br i1 %257, label %.lr.ph469.split.us.preheader, label %.lr.ph469.split.preheader

.lr.ph469.split.preheader:                        ; preds = %.lr.ph469
  br i1 %266, label %.loopexit.loopexit624.unr-lcssa, label %.lr.ph469.split

.lr.ph469.split.us.preheader:                     ; preds = %.lr.ph469
  br i1 %267, label %.loopexit.loopexit623.unr-lcssa, label %.lr.ph469.split.us

.lr.ph469.split.us:                               ; preds = %.lr.ph469.split.us.preheader, %.lr.ph469.split.us
  %.5301468.us = phi ptr [ %301, %.lr.ph469.split.us ], [ %.1297, %.lr.ph469.split.us.preheader ]
  %.4331466.us = phi ptr [ %289, %.lr.ph469.split.us ], [ %.1328495, %.lr.ph469.split.us.preheader ]
  %niter687 = phi i32 [ %niter687.next.1, %.lr.ph469.split.us ], [ 0, %.lr.ph469.split.us.preheader ]
  %276 = getelementptr inbounds i8, ptr %.4331466.us, i64 1
  %277 = load i8, ptr %.4331466.us, align 1, !tbaa !25
  %278 = zext i8 %277 to i64
  %279 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %278
  %280 = getelementptr inbounds i8, ptr %279, i64 2
  %281 = load i8, ptr %280, align 1, !tbaa !40
  store i8 %281, ptr %.5301468.us, align 1, !tbaa !25
  %282 = getelementptr inbounds i8, ptr %279, i64 1
  %283 = load i8, ptr %282, align 1, !tbaa !42
  %284 = getelementptr inbounds i8, ptr %.5301468.us, i64 1
  store i8 %283, ptr %284, align 1, !tbaa !25
  %285 = load i8, ptr %279, align 1, !tbaa !43
  %286 = getelementptr inbounds i8, ptr %.5301468.us, i64 2
  store i8 %285, ptr %286, align 1, !tbaa !25
  %287 = getelementptr inbounds i8, ptr %.5301468.us, i64 3
  store i8 -1, ptr %287, align 1, !tbaa !25
  %288 = getelementptr inbounds i8, ptr %.5301468.us, i64 4
  %289 = getelementptr inbounds i8, ptr %.4331466.us, i64 2
  %290 = load i8, ptr %276, align 1, !tbaa !25
  %291 = zext i8 %290 to i64
  %292 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %291
  %293 = getelementptr inbounds i8, ptr %292, i64 2
  %294 = load i8, ptr %293, align 1, !tbaa !40
  store i8 %294, ptr %288, align 1, !tbaa !25
  %295 = getelementptr inbounds i8, ptr %292, i64 1
  %296 = load i8, ptr %295, align 1, !tbaa !42
  %297 = getelementptr inbounds i8, ptr %.5301468.us, i64 5
  store i8 %296, ptr %297, align 1, !tbaa !25
  %298 = load i8, ptr %292, align 1, !tbaa !43
  %299 = getelementptr inbounds i8, ptr %.5301468.us, i64 6
  store i8 %298, ptr %299, align 1, !tbaa !25
  %300 = getelementptr inbounds i8, ptr %.5301468.us, i64 7
  store i8 -1, ptr %300, align 1, !tbaa !25
  %301 = getelementptr inbounds i8, ptr %.5301468.us, i64 8
  %niter687.next.1 = add i32 %niter687, 2
  %niter687.ncmp.1 = icmp eq i32 %niter687.next.1, %unroll_iter686
  br i1 %niter687.ncmp.1, label %.loopexit.loopexit623.unr-lcssa, label %.lr.ph469.split.us, !llvm.loop !44

.preheader363:                                    ; preds = %275
  br i1 %259, label %.lr.ph476, label %.loopexit

.lr.ph476:                                        ; preds = %.preheader363
  br i1 %257, label %.lr.ph476.split.us, label %.lr.ph476.split

.lr.ph476.split.us:                               ; preds = %.lr.ph476, %.lr.ph476.split.us
  %.4300475.us = phi ptr [ %329, %.lr.ph476.split.us ], [ %.1297, %.lr.ph476 ]
  %.1308474.us = phi i32 [ %328, %.lr.ph476.split.us ], [ 0, %.lr.ph476 ]
  %.3330473.us = phi ptr [ %302, %.lr.ph476.split.us ], [ %.1328495, %.lr.ph476 ]
  %302 = getelementptr inbounds i8, ptr %.3330473.us, i64 1
  %303 = load i8, ptr %.3330473.us, align 1, !tbaa !25
  %304 = zext i8 %303 to i32
  %305 = lshr i32 %304, 4
  %306 = zext nneg i32 %305 to i64
  %307 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %306
  %308 = getelementptr inbounds i8, ptr %307, i64 2
  %309 = load i8, ptr %308, align 1, !tbaa !40
  store i8 %309, ptr %.4300475.us, align 1, !tbaa !25
  %310 = getelementptr inbounds i8, ptr %307, i64 1
  %311 = load i8, ptr %310, align 1, !tbaa !42
  %312 = getelementptr inbounds i8, ptr %.4300475.us, i64 1
  store i8 %311, ptr %312, align 1, !tbaa !25
  %313 = load i8, ptr %307, align 1, !tbaa !43
  %314 = getelementptr inbounds i8, ptr %.4300475.us, i64 2
  store i8 %313, ptr %314, align 1, !tbaa !25
  %315 = getelementptr inbounds i8, ptr %.4300475.us, i64 3
  store i8 -1, ptr %315, align 1, !tbaa !25
  %316 = and i32 %304, 15
  %317 = zext nneg i32 %316 to i64
  %318 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %317
  %319 = getelementptr inbounds i8, ptr %318, i64 2
  %320 = load i8, ptr %319, align 1, !tbaa !40
  %321 = getelementptr inbounds i8, ptr %.4300475.us, i64 4
  store i8 %320, ptr %321, align 1, !tbaa !25
  %322 = getelementptr inbounds i8, ptr %318, i64 1
  %323 = load i8, ptr %322, align 1, !tbaa !42
  %324 = getelementptr inbounds i8, ptr %.4300475.us, i64 5
  store i8 %323, ptr %324, align 1, !tbaa !25
  %325 = load i8, ptr %318, align 1, !tbaa !43
  %326 = getelementptr inbounds i8, ptr %.4300475.us, i64 6
  store i8 %325, ptr %326, align 1, !tbaa !25
  %327 = getelementptr inbounds i8, ptr %.4300475.us, i64 7
  store i8 -1, ptr %327, align 1, !tbaa !25
  %328 = add nuw nsw i32 %.1308474.us, 1
  %329 = getelementptr inbounds i8, ptr %.4300475.us, i64 8
  %exitcond552.not = icmp eq i32 %328, %258
  br i1 %exitcond552.not, label %.loopexit, label %.lr.ph476.split.us, !llvm.loop !45

.preheader:                                       ; preds = %275
  br i1 %261, label %.lr.ph489, label %.loopexit

.lr.ph489:                                        ; preds = %.preheader
  br i1 %257, label %.split.us.us, label %.split

.split.us.us:                                     ; preds = %.lr.ph489, %.split.us.us
  %.2298488.us = phi ptr [ %433, %.split.us.us ], [ %.1297, %.lr.ph489 ]
  %.0307487.us = phi i32 [ %435, %.split.us.us ], [ 0, %.lr.ph489 ]
  %.2329486.us = phi ptr [ %434, %.split.us.us ], [ %.1328495, %.lr.ph489 ]
  %330 = load i8, ptr %.2329486.us, align 1, !tbaa !25
  %331 = zext i8 %330 to i32
  %332 = lshr i32 %331, 7
  %333 = zext nneg i32 %332 to i64
  %334 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %333
  %335 = getelementptr inbounds i8, ptr %334, i64 2
  %336 = load i8, ptr %335, align 1, !tbaa !40
  store i8 %336, ptr %.2298488.us, align 1, !tbaa !25
  %337 = getelementptr inbounds i8, ptr %334, i64 1
  %338 = load i8, ptr %337, align 1, !tbaa !42
  %339 = getelementptr inbounds i8, ptr %.2298488.us, i64 1
  store i8 %338, ptr %339, align 1, !tbaa !25
  %340 = load i8, ptr %334, align 1, !tbaa !43
  %341 = getelementptr inbounds i8, ptr %.2298488.us, i64 2
  store i8 %340, ptr %341, align 1, !tbaa !25
  %342 = getelementptr inbounds i8, ptr %.2298488.us, i64 3
  store i8 -1, ptr %342, align 1, !tbaa !25
  %343 = getelementptr inbounds i8, ptr %.2298488.us, i64 4
  %344 = lshr i32 %331, 6
  %345 = and i32 %344, 1
  %346 = zext nneg i32 %345 to i64
  %347 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %346
  %348 = getelementptr inbounds i8, ptr %347, i64 2
  %349 = load i8, ptr %348, align 1, !tbaa !40
  store i8 %349, ptr %343, align 1, !tbaa !25
  %350 = getelementptr inbounds i8, ptr %347, i64 1
  %351 = load i8, ptr %350, align 1, !tbaa !42
  %352 = getelementptr inbounds i8, ptr %.2298488.us, i64 5
  store i8 %351, ptr %352, align 1, !tbaa !25
  %353 = load i8, ptr %347, align 1, !tbaa !43
  %354 = getelementptr inbounds i8, ptr %.2298488.us, i64 6
  store i8 %353, ptr %354, align 1, !tbaa !25
  %355 = getelementptr inbounds i8, ptr %.2298488.us, i64 7
  store i8 -1, ptr %355, align 1, !tbaa !25
  %356 = getelementptr inbounds i8, ptr %.2298488.us, i64 8
  %357 = lshr i32 %331, 5
  %358 = and i32 %357, 1
  %359 = zext nneg i32 %358 to i64
  %360 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %359
  %361 = getelementptr inbounds i8, ptr %360, i64 2
  %362 = load i8, ptr %361, align 1, !tbaa !40
  store i8 %362, ptr %356, align 1, !tbaa !25
  %363 = getelementptr inbounds i8, ptr %360, i64 1
  %364 = load i8, ptr %363, align 1, !tbaa !42
  %365 = getelementptr inbounds i8, ptr %.2298488.us, i64 9
  store i8 %364, ptr %365, align 1, !tbaa !25
  %366 = load i8, ptr %360, align 1, !tbaa !43
  %367 = getelementptr inbounds i8, ptr %.2298488.us, i64 10
  store i8 %366, ptr %367, align 1, !tbaa !25
  %368 = getelementptr inbounds i8, ptr %.2298488.us, i64 11
  store i8 -1, ptr %368, align 1, !tbaa !25
  %369 = getelementptr inbounds i8, ptr %.2298488.us, i64 12
  %370 = lshr i32 %331, 4
  %371 = and i32 %370, 1
  %372 = zext nneg i32 %371 to i64
  %373 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %372
  %374 = getelementptr inbounds i8, ptr %373, i64 2
  %375 = load i8, ptr %374, align 1, !tbaa !40
  store i8 %375, ptr %369, align 1, !tbaa !25
  %376 = getelementptr inbounds i8, ptr %373, i64 1
  %377 = load i8, ptr %376, align 1, !tbaa !42
  %378 = getelementptr inbounds i8, ptr %.2298488.us, i64 13
  store i8 %377, ptr %378, align 1, !tbaa !25
  %379 = load i8, ptr %373, align 1, !tbaa !43
  %380 = getelementptr inbounds i8, ptr %.2298488.us, i64 14
  store i8 %379, ptr %380, align 1, !tbaa !25
  %381 = getelementptr inbounds i8, ptr %.2298488.us, i64 15
  store i8 -1, ptr %381, align 1, !tbaa !25
  %382 = getelementptr inbounds i8, ptr %.2298488.us, i64 16
  %383 = lshr i32 %331, 3
  %384 = and i32 %383, 1
  %385 = zext nneg i32 %384 to i64
  %386 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %385
  %387 = getelementptr inbounds i8, ptr %386, i64 2
  %388 = load i8, ptr %387, align 1, !tbaa !40
  store i8 %388, ptr %382, align 1, !tbaa !25
  %389 = getelementptr inbounds i8, ptr %386, i64 1
  %390 = load i8, ptr %389, align 1, !tbaa !42
  %391 = getelementptr inbounds i8, ptr %.2298488.us, i64 17
  store i8 %390, ptr %391, align 1, !tbaa !25
  %392 = load i8, ptr %386, align 1, !tbaa !43
  %393 = getelementptr inbounds i8, ptr %.2298488.us, i64 18
  store i8 %392, ptr %393, align 1, !tbaa !25
  %394 = getelementptr inbounds i8, ptr %.2298488.us, i64 19
  store i8 -1, ptr %394, align 1, !tbaa !25
  %395 = getelementptr inbounds i8, ptr %.2298488.us, i64 20
  %396 = lshr i32 %331, 2
  %397 = and i32 %396, 1
  %398 = zext nneg i32 %397 to i64
  %399 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %398
  %400 = getelementptr inbounds i8, ptr %399, i64 2
  %401 = load i8, ptr %400, align 1, !tbaa !40
  store i8 %401, ptr %395, align 1, !tbaa !25
  %402 = getelementptr inbounds i8, ptr %399, i64 1
  %403 = load i8, ptr %402, align 1, !tbaa !42
  %404 = getelementptr inbounds i8, ptr %.2298488.us, i64 21
  store i8 %403, ptr %404, align 1, !tbaa !25
  %405 = load i8, ptr %399, align 1, !tbaa !43
  %406 = getelementptr inbounds i8, ptr %.2298488.us, i64 22
  store i8 %405, ptr %406, align 1, !tbaa !25
  %407 = getelementptr inbounds i8, ptr %.2298488.us, i64 23
  store i8 -1, ptr %407, align 1, !tbaa !25
  %408 = getelementptr inbounds i8, ptr %.2298488.us, i64 24
  %409 = lshr i32 %331, 1
  %410 = and i32 %409, 1
  %411 = zext nneg i32 %410 to i64
  %412 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %411
  %413 = getelementptr inbounds i8, ptr %412, i64 2
  %414 = load i8, ptr %413, align 1, !tbaa !40
  store i8 %414, ptr %408, align 1, !tbaa !25
  %415 = getelementptr inbounds i8, ptr %412, i64 1
  %416 = load i8, ptr %415, align 1, !tbaa !42
  %417 = getelementptr inbounds i8, ptr %.2298488.us, i64 25
  store i8 %416, ptr %417, align 1, !tbaa !25
  %418 = load i8, ptr %412, align 1, !tbaa !43
  %419 = getelementptr inbounds i8, ptr %.2298488.us, i64 26
  store i8 %418, ptr %419, align 1, !tbaa !25
  %420 = getelementptr inbounds i8, ptr %.2298488.us, i64 27
  store i8 -1, ptr %420, align 1, !tbaa !25
  %421 = getelementptr inbounds i8, ptr %.2298488.us, i64 28
  %422 = and i32 %331, 1
  %423 = zext nneg i32 %422 to i64
  %424 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %423
  %425 = getelementptr inbounds i8, ptr %424, i64 2
  %426 = load i8, ptr %425, align 1, !tbaa !40
  store i8 %426, ptr %421, align 1, !tbaa !25
  %427 = getelementptr inbounds i8, ptr %424, i64 1
  %428 = load i8, ptr %427, align 1, !tbaa !42
  %429 = getelementptr inbounds i8, ptr %.2298488.us, i64 29
  store i8 %428, ptr %429, align 1, !tbaa !25
  %430 = load i8, ptr %424, align 1, !tbaa !43
  %431 = getelementptr inbounds i8, ptr %.2298488.us, i64 30
  store i8 %430, ptr %431, align 1, !tbaa !25
  %432 = getelementptr inbounds i8, ptr %.2298488.us, i64 31
  store i8 -1, ptr %432, align 1, !tbaa !25
  %433 = getelementptr inbounds i8, ptr %.2298488.us, i64 32
  %434 = getelementptr inbounds i8, ptr %.2329486.us, i64 1
  %435 = add nuw nsw i32 %.0307487.us, 1
  %exitcond554.not = icmp eq i32 %435, %260
  br i1 %exitcond554.not, label %.loopexit, label %.split.us.us, !llvm.loop !46

.split:                                           ; preds = %.lr.ph489, %.split
  %.2298488 = phi ptr [ %539, %.split ], [ %.1297, %.lr.ph489 ]
  %.0307487 = phi i32 [ %541, %.split ], [ 0, %.lr.ph489 ]
  %.2329486 = phi ptr [ %540, %.split ], [ %.1328495, %.lr.ph489 ]
  %436 = load i8, ptr %.2329486, align 1, !tbaa !25
  %437 = zext i8 %436 to i32
  %438 = lshr i32 %437, 7
  %439 = zext nneg i32 %438 to i64
  %440 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %439
  %441 = getelementptr inbounds i8, ptr %440, i64 2
  %442 = load i8, ptr %441, align 1, !tbaa !26
  store i8 %442, ptr %.2298488, align 1, !tbaa !25
  %443 = getelementptr inbounds i8, ptr %440, i64 1
  %444 = load i8, ptr %443, align 1, !tbaa !28
  %445 = getelementptr inbounds i8, ptr %.2298488, i64 1
  store i8 %444, ptr %445, align 1, !tbaa !25
  %446 = load i8, ptr %440, align 1, !tbaa !29
  %447 = getelementptr inbounds i8, ptr %.2298488, i64 2
  store i8 %446, ptr %447, align 1, !tbaa !25
  %448 = getelementptr inbounds i8, ptr %.2298488, i64 3
  store i8 -1, ptr %448, align 1, !tbaa !25
  %449 = getelementptr inbounds i8, ptr %.2298488, i64 4
  %450 = lshr i32 %437, 6
  %451 = and i32 %450, 1
  %452 = zext nneg i32 %451 to i64
  %453 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %452
  %454 = getelementptr inbounds i8, ptr %453, i64 2
  %455 = load i8, ptr %454, align 1, !tbaa !26
  store i8 %455, ptr %449, align 1, !tbaa !25
  %456 = getelementptr inbounds i8, ptr %453, i64 1
  %457 = load i8, ptr %456, align 1, !tbaa !28
  %458 = getelementptr inbounds i8, ptr %.2298488, i64 5
  store i8 %457, ptr %458, align 1, !tbaa !25
  %459 = load i8, ptr %453, align 1, !tbaa !29
  %460 = getelementptr inbounds i8, ptr %.2298488, i64 6
  store i8 %459, ptr %460, align 1, !tbaa !25
  %461 = getelementptr inbounds i8, ptr %.2298488, i64 7
  store i8 -1, ptr %461, align 1, !tbaa !25
  %462 = getelementptr inbounds i8, ptr %.2298488, i64 8
  %463 = lshr i32 %437, 5
  %464 = and i32 %463, 1
  %465 = zext nneg i32 %464 to i64
  %466 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %465
  %467 = getelementptr inbounds i8, ptr %466, i64 2
  %468 = load i8, ptr %467, align 1, !tbaa !26
  store i8 %468, ptr %462, align 1, !tbaa !25
  %469 = getelementptr inbounds i8, ptr %466, i64 1
  %470 = load i8, ptr %469, align 1, !tbaa !28
  %471 = getelementptr inbounds i8, ptr %.2298488, i64 9
  store i8 %470, ptr %471, align 1, !tbaa !25
  %472 = load i8, ptr %466, align 1, !tbaa !29
  %473 = getelementptr inbounds i8, ptr %.2298488, i64 10
  store i8 %472, ptr %473, align 1, !tbaa !25
  %474 = getelementptr inbounds i8, ptr %.2298488, i64 11
  store i8 -1, ptr %474, align 1, !tbaa !25
  %475 = getelementptr inbounds i8, ptr %.2298488, i64 12
  %476 = lshr i32 %437, 4
  %477 = and i32 %476, 1
  %478 = zext nneg i32 %477 to i64
  %479 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %478
  %480 = getelementptr inbounds i8, ptr %479, i64 2
  %481 = load i8, ptr %480, align 1, !tbaa !26
  store i8 %481, ptr %475, align 1, !tbaa !25
  %482 = getelementptr inbounds i8, ptr %479, i64 1
  %483 = load i8, ptr %482, align 1, !tbaa !28
  %484 = getelementptr inbounds i8, ptr %.2298488, i64 13
  store i8 %483, ptr %484, align 1, !tbaa !25
  %485 = load i8, ptr %479, align 1, !tbaa !29
  %486 = getelementptr inbounds i8, ptr %.2298488, i64 14
  store i8 %485, ptr %486, align 1, !tbaa !25
  %487 = getelementptr inbounds i8, ptr %.2298488, i64 15
  store i8 -1, ptr %487, align 1, !tbaa !25
  %488 = getelementptr inbounds i8, ptr %.2298488, i64 16
  %489 = lshr i32 %437, 3
  %490 = and i32 %489, 1
  %491 = zext nneg i32 %490 to i64
  %492 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %491
  %493 = getelementptr inbounds i8, ptr %492, i64 2
  %494 = load i8, ptr %493, align 1, !tbaa !26
  store i8 %494, ptr %488, align 1, !tbaa !25
  %495 = getelementptr inbounds i8, ptr %492, i64 1
  %496 = load i8, ptr %495, align 1, !tbaa !28
  %497 = getelementptr inbounds i8, ptr %.2298488, i64 17
  store i8 %496, ptr %497, align 1, !tbaa !25
  %498 = load i8, ptr %492, align 1, !tbaa !29
  %499 = getelementptr inbounds i8, ptr %.2298488, i64 18
  store i8 %498, ptr %499, align 1, !tbaa !25
  %500 = getelementptr inbounds i8, ptr %.2298488, i64 19
  store i8 -1, ptr %500, align 1, !tbaa !25
  %501 = getelementptr inbounds i8, ptr %.2298488, i64 20
  %502 = lshr i32 %437, 2
  %503 = and i32 %502, 1
  %504 = zext nneg i32 %503 to i64
  %505 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %504
  %506 = getelementptr inbounds i8, ptr %505, i64 2
  %507 = load i8, ptr %506, align 1, !tbaa !26
  store i8 %507, ptr %501, align 1, !tbaa !25
  %508 = getelementptr inbounds i8, ptr %505, i64 1
  %509 = load i8, ptr %508, align 1, !tbaa !28
  %510 = getelementptr inbounds i8, ptr %.2298488, i64 21
  store i8 %509, ptr %510, align 1, !tbaa !25
  %511 = load i8, ptr %505, align 1, !tbaa !29
  %512 = getelementptr inbounds i8, ptr %.2298488, i64 22
  store i8 %511, ptr %512, align 1, !tbaa !25
  %513 = getelementptr inbounds i8, ptr %.2298488, i64 23
  store i8 -1, ptr %513, align 1, !tbaa !25
  %514 = getelementptr inbounds i8, ptr %.2298488, i64 24
  %515 = lshr i32 %437, 1
  %516 = and i32 %515, 1
  %517 = zext nneg i32 %516 to i64
  %518 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %517
  %519 = getelementptr inbounds i8, ptr %518, i64 2
  %520 = load i8, ptr %519, align 1, !tbaa !26
  store i8 %520, ptr %514, align 1, !tbaa !25
  %521 = getelementptr inbounds i8, ptr %518, i64 1
  %522 = load i8, ptr %521, align 1, !tbaa !28
  %523 = getelementptr inbounds i8, ptr %.2298488, i64 25
  store i8 %522, ptr %523, align 1, !tbaa !25
  %524 = load i8, ptr %518, align 1, !tbaa !29
  %525 = getelementptr inbounds i8, ptr %.2298488, i64 26
  store i8 %524, ptr %525, align 1, !tbaa !25
  %526 = getelementptr inbounds i8, ptr %.2298488, i64 27
  store i8 -1, ptr %526, align 1, !tbaa !25
  %527 = getelementptr inbounds i8, ptr %.2298488, i64 28
  %528 = and i32 %437, 1
  %529 = zext nneg i32 %528 to i64
  %530 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %529
  %531 = getelementptr inbounds i8, ptr %530, i64 2
  %532 = load i8, ptr %531, align 1, !tbaa !26
  store i8 %532, ptr %527, align 1, !tbaa !25
  %533 = getelementptr inbounds i8, ptr %530, i64 1
  %534 = load i8, ptr %533, align 1, !tbaa !28
  %535 = getelementptr inbounds i8, ptr %.2298488, i64 29
  store i8 %534, ptr %535, align 1, !tbaa !25
  %536 = load i8, ptr %530, align 1, !tbaa !29
  %537 = getelementptr inbounds i8, ptr %.2298488, i64 30
  store i8 %536, ptr %537, align 1, !tbaa !25
  %538 = getelementptr inbounds i8, ptr %.2298488, i64 31
  store i8 -1, ptr %538, align 1, !tbaa !25
  %539 = getelementptr inbounds i8, ptr %.2298488, i64 32
  %540 = getelementptr inbounds i8, ptr %.2329486, i64 1
  %541 = add nuw nsw i32 %.0307487, 1
  %exitcond553.not = icmp eq i32 %541, %260
  br i1 %exitcond553.not, label %.loopexit, label %.split, !llvm.loop !46

.lr.ph476.split:                                  ; preds = %.lr.ph476, %.lr.ph476.split
  %.4300475 = phi ptr [ %569, %.lr.ph476.split ], [ %.1297, %.lr.ph476 ]
  %.1308474 = phi i32 [ %568, %.lr.ph476.split ], [ 0, %.lr.ph476 ]
  %.3330473 = phi ptr [ %542, %.lr.ph476.split ], [ %.1328495, %.lr.ph476 ]
  %542 = getelementptr inbounds i8, ptr %.3330473, i64 1
  %543 = load i8, ptr %.3330473, align 1, !tbaa !25
  %544 = zext i8 %543 to i32
  %545 = lshr i32 %544, 4
  %546 = zext nneg i32 %545 to i64
  %547 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %546
  %548 = getelementptr inbounds i8, ptr %547, i64 2
  %549 = load i8, ptr %548, align 1, !tbaa !26
  store i8 %549, ptr %.4300475, align 1, !tbaa !25
  %550 = getelementptr inbounds i8, ptr %547, i64 1
  %551 = load i8, ptr %550, align 1, !tbaa !28
  %552 = getelementptr inbounds i8, ptr %.4300475, i64 1
  store i8 %551, ptr %552, align 1, !tbaa !25
  %553 = load i8, ptr %547, align 1, !tbaa !29
  %554 = getelementptr inbounds i8, ptr %.4300475, i64 2
  store i8 %553, ptr %554, align 1, !tbaa !25
  %555 = getelementptr inbounds i8, ptr %.4300475, i64 3
  store i8 -1, ptr %555, align 1, !tbaa !25
  %556 = and i32 %544, 15
  %557 = zext nneg i32 %556 to i64
  %558 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %557
  %559 = getelementptr inbounds i8, ptr %558, i64 2
  %560 = load i8, ptr %559, align 1, !tbaa !26
  %561 = getelementptr inbounds i8, ptr %.4300475, i64 4
  store i8 %560, ptr %561, align 1, !tbaa !25
  %562 = getelementptr inbounds i8, ptr %558, i64 1
  %563 = load i8, ptr %562, align 1, !tbaa !28
  %564 = getelementptr inbounds i8, ptr %.4300475, i64 5
  store i8 %563, ptr %564, align 1, !tbaa !25
  %565 = load i8, ptr %558, align 1, !tbaa !29
  %566 = getelementptr inbounds i8, ptr %.4300475, i64 6
  store i8 %565, ptr %566, align 1, !tbaa !25
  %567 = getelementptr inbounds i8, ptr %.4300475, i64 7
  store i8 -1, ptr %567, align 1, !tbaa !25
  %568 = add nuw nsw i32 %.1308474, 1
  %569 = getelementptr inbounds i8, ptr %.4300475, i64 8
  %exitcond551.not = icmp eq i32 %568, %258
  br i1 %exitcond551.not, label %.loopexit, label %.lr.ph476.split, !llvm.loop !45

.lr.ph469.split:                                  ; preds = %.lr.ph469.split.preheader, %.lr.ph469.split
  %.5301468 = phi ptr [ %595, %.lr.ph469.split ], [ %.1297, %.lr.ph469.split.preheader ]
  %.4331466 = phi ptr [ %583, %.lr.ph469.split ], [ %.1328495, %.lr.ph469.split.preheader ]
  %niter681 = phi i32 [ %niter681.next.1, %.lr.ph469.split ], [ 0, %.lr.ph469.split.preheader ]
  %570 = getelementptr inbounds i8, ptr %.4331466, i64 1
  %571 = load i8, ptr %.4331466, align 1, !tbaa !25
  %572 = zext i8 %571 to i64
  %573 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %572
  %574 = getelementptr inbounds i8, ptr %573, i64 2
  %575 = load i8, ptr %574, align 1, !tbaa !26
  store i8 %575, ptr %.5301468, align 1, !tbaa !25
  %576 = getelementptr inbounds i8, ptr %573, i64 1
  %577 = load i8, ptr %576, align 1, !tbaa !28
  %578 = getelementptr inbounds i8, ptr %.5301468, i64 1
  store i8 %577, ptr %578, align 1, !tbaa !25
  %579 = load i8, ptr %573, align 1, !tbaa !29
  %580 = getelementptr inbounds i8, ptr %.5301468, i64 2
  store i8 %579, ptr %580, align 1, !tbaa !25
  %581 = getelementptr inbounds i8, ptr %.5301468, i64 3
  store i8 -1, ptr %581, align 1, !tbaa !25
  %582 = getelementptr inbounds i8, ptr %.5301468, i64 4
  %583 = getelementptr inbounds i8, ptr %.4331466, i64 2
  %584 = load i8, ptr %570, align 1, !tbaa !25
  %585 = zext i8 %584 to i64
  %586 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %585
  %587 = getelementptr inbounds i8, ptr %586, i64 2
  %588 = load i8, ptr %587, align 1, !tbaa !26
  store i8 %588, ptr %582, align 1, !tbaa !25
  %589 = getelementptr inbounds i8, ptr %586, i64 1
  %590 = load i8, ptr %589, align 1, !tbaa !28
  %591 = getelementptr inbounds i8, ptr %.5301468, i64 5
  store i8 %590, ptr %591, align 1, !tbaa !25
  %592 = load i8, ptr %586, align 1, !tbaa !29
  %593 = getelementptr inbounds i8, ptr %.5301468, i64 6
  store i8 %592, ptr %593, align 1, !tbaa !25
  %594 = getelementptr inbounds i8, ptr %.5301468, i64 7
  store i8 -1, ptr %594, align 1, !tbaa !25
  %595 = getelementptr inbounds i8, ptr %.5301468, i64 8
  %niter681.next.1 = add i32 %niter681, 2
  %niter681.ncmp.1 = icmp eq i32 %niter681.next.1, %unroll_iter680
  br i1 %niter681.ncmp.1, label %.loopexit.loopexit624.unr-lcssa, label %.lr.ph469.split, !llvm.loop !44

.lr.ph463:                                        ; preds = %.lr.ph463.preheader, %.lr.ph463
  %.6462 = phi ptr [ %615, %.lr.ph463 ], [ %.1297, %.lr.ph463.preheader ]
  %.5332460 = phi ptr [ %606, %.lr.ph463 ], [ %.1328495, %.lr.ph463.preheader ]
  %niter675 = phi i32 [ %niter675.next.1, %.lr.ph463 ], [ 0, %.lr.ph463.preheader ]
  %596 = getelementptr inbounds i8, ptr %.5332460, i64 3
  %597 = getelementptr inbounds i8, ptr %.5332460, i64 2
  %598 = load i8, ptr %597, align 1, !tbaa !40
  store i8 %598, ptr %.6462, align 1, !tbaa !25
  %599 = getelementptr inbounds i8, ptr %.5332460, i64 1
  %600 = load i8, ptr %599, align 1, !tbaa !42
  %601 = getelementptr inbounds i8, ptr %.6462, i64 1
  store i8 %600, ptr %601, align 1, !tbaa !25
  %602 = load i8, ptr %.5332460, align 1, !tbaa !43
  %603 = getelementptr inbounds i8, ptr %.6462, i64 2
  store i8 %602, ptr %603, align 1, !tbaa !25
  %604 = getelementptr inbounds i8, ptr %.6462, i64 3
  store i8 -1, ptr %604, align 1, !tbaa !25
  %605 = getelementptr inbounds i8, ptr %.6462, i64 4
  %606 = getelementptr inbounds i8, ptr %.5332460, i64 6
  %607 = getelementptr inbounds i8, ptr %.5332460, i64 5
  %608 = load i8, ptr %607, align 1, !tbaa !40
  store i8 %608, ptr %605, align 1, !tbaa !25
  %609 = getelementptr inbounds i8, ptr %.5332460, i64 4
  %610 = load i8, ptr %609, align 1, !tbaa !42
  %611 = getelementptr inbounds i8, ptr %.6462, i64 5
  store i8 %610, ptr %611, align 1, !tbaa !25
  %612 = load i8, ptr %596, align 1, !tbaa !43
  %613 = getelementptr inbounds i8, ptr %.6462, i64 6
  store i8 %612, ptr %613, align 1, !tbaa !25
  %614 = getelementptr inbounds i8, ptr %.6462, i64 7
  store i8 -1, ptr %614, align 1, !tbaa !25
  %615 = getelementptr inbounds i8, ptr %.6462, i64 8
  %niter675.next.1 = add i32 %niter675, 2
  %niter675.ncmp.1 = icmp eq i32 %niter675.next.1, %unroll_iter674
  br i1 %niter675.ncmp.1, label %.loopexit.loopexit625.unr-lcssa, label %.lr.ph463, !llvm.loop !47

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %.7458 = phi ptr [ %635, %.lr.ph ], [ %.1297, %.lr.ph.preheader ]
  %.6333456 = phi ptr [ %626, %.lr.ph ], [ %.1328495, %.lr.ph.preheader ]
  %niter669 = phi i32 [ %niter669.next.1, %.lr.ph ], [ 0, %.lr.ph.preheader ]
  %616 = getelementptr inbounds i8, ptr %.6333456, i64 4
  %617 = getelementptr inbounds i8, ptr %.6333456, i64 2
  %618 = load i8, ptr %617, align 1, !tbaa !26
  store i8 %618, ptr %.7458, align 1, !tbaa !25
  %619 = getelementptr inbounds i8, ptr %.6333456, i64 1
  %620 = load i8, ptr %619, align 1, !tbaa !28
  %621 = getelementptr inbounds i8, ptr %.7458, i64 1
  store i8 %620, ptr %621, align 1, !tbaa !25
  %622 = load i8, ptr %.6333456, align 1, !tbaa !29
  %623 = getelementptr inbounds i8, ptr %.7458, i64 2
  store i8 %622, ptr %623, align 1, !tbaa !25
  %624 = getelementptr inbounds i8, ptr %.7458, i64 3
  store i8 -1, ptr %624, align 1, !tbaa !25
  %625 = getelementptr inbounds i8, ptr %.7458, i64 4
  %626 = getelementptr inbounds i8, ptr %.6333456, i64 8
  %627 = getelementptr inbounds i8, ptr %.6333456, i64 6
  %628 = load i8, ptr %627, align 1, !tbaa !26
  store i8 %628, ptr %625, align 1, !tbaa !25
  %629 = getelementptr inbounds i8, ptr %.6333456, i64 5
  %630 = load i8, ptr %629, align 1, !tbaa !28
  %631 = getelementptr inbounds i8, ptr %.7458, i64 5
  store i8 %630, ptr %631, align 1, !tbaa !25
  %632 = load i8, ptr %616, align 1, !tbaa !29
  %633 = getelementptr inbounds i8, ptr %.7458, i64 6
  store i8 %632, ptr %633, align 1, !tbaa !25
  %634 = getelementptr inbounds i8, ptr %.7458, i64 7
  store i8 -1, ptr %634, align 1, !tbaa !25
  %635 = getelementptr inbounds i8, ptr %.7458, i64 8
  %niter669.next.1 = add i32 %niter669, 2
  %niter669.ncmp.1 = icmp eq i32 %niter669.next.1, %unroll_iter668
  br i1 %niter669.ncmp.1, label %.loopexit.loopexit626.unr-lcssa, label %.lr.ph, !llvm.loop !48

.loopexit.loopexit623.unr-lcssa:                  ; preds = %.lr.ph469.split.us, %.lr.ph469.split.us.preheader
  %.lcssa633.ph = phi ptr [ poison, %.lr.ph469.split.us.preheader ], [ %289, %.lr.ph469.split.us ]
  %.lcssa632.ph = phi ptr [ poison, %.lr.ph469.split.us.preheader ], [ %301, %.lr.ph469.split.us ]
  %.5301468.us.unr = phi ptr [ %.1297, %.lr.ph469.split.us.preheader ], [ %301, %.lr.ph469.split.us ]
  %.4331466.us.unr = phi ptr [ %.1328495, %.lr.ph469.split.us.preheader ], [ %289, %.lr.ph469.split.us ]
  br i1 %lcmp.mod683.not, label %.loopexit, label %.lr.ph469.split.us.epil

.lr.ph469.split.us.epil:                          ; preds = %.loopexit.loopexit623.unr-lcssa
  %636 = getelementptr inbounds i8, ptr %.4331466.us.unr, i64 1
  %637 = load i8, ptr %.4331466.us.unr, align 1, !tbaa !25
  %638 = zext i8 %637 to i64
  %639 = getelementptr inbounds %struct.tagRGBTRIPLE, ptr %.0327, i64 %638
  %640 = getelementptr inbounds i8, ptr %639, i64 2
  %641 = load i8, ptr %640, align 1, !tbaa !40
  store i8 %641, ptr %.5301468.us.unr, align 1, !tbaa !25
  %642 = getelementptr inbounds i8, ptr %639, i64 1
  %643 = load i8, ptr %642, align 1, !tbaa !42
  %644 = getelementptr inbounds i8, ptr %.5301468.us.unr, i64 1
  store i8 %643, ptr %644, align 1, !tbaa !25
  %645 = load i8, ptr %639, align 1, !tbaa !43
  %646 = getelementptr inbounds i8, ptr %.5301468.us.unr, i64 2
  store i8 %645, ptr %646, align 1, !tbaa !25
  %647 = getelementptr inbounds i8, ptr %.5301468.us.unr, i64 3
  store i8 -1, ptr %647, align 1, !tbaa !25
  %648 = getelementptr inbounds i8, ptr %.5301468.us.unr, i64 4
  br label %.loopexit

.loopexit.loopexit624.unr-lcssa:                  ; preds = %.lr.ph469.split, %.lr.ph469.split.preheader
  %.lcssa631.ph = phi ptr [ poison, %.lr.ph469.split.preheader ], [ %583, %.lr.ph469.split ]
  %.lcssa630.ph = phi ptr [ poison, %.lr.ph469.split.preheader ], [ %595, %.lr.ph469.split ]
  %.5301468.unr = phi ptr [ %.1297, %.lr.ph469.split.preheader ], [ %595, %.lr.ph469.split ]
  %.4331466.unr = phi ptr [ %.1328495, %.lr.ph469.split.preheader ], [ %583, %.lr.ph469.split ]
  br i1 %lcmp.mod677.not, label %.loopexit, label %.lr.ph469.split.epil

.lr.ph469.split.epil:                             ; preds = %.loopexit.loopexit624.unr-lcssa
  %649 = getelementptr inbounds i8, ptr %.4331466.unr, i64 1
  %650 = load i8, ptr %.4331466.unr, align 1, !tbaa !25
  %651 = zext i8 %650 to i64
  %652 = getelementptr inbounds %struct.tagRGBQUAD, ptr %.0327, i64 %651
  %653 = getelementptr inbounds i8, ptr %652, i64 2
  %654 = load i8, ptr %653, align 1, !tbaa !26
  store i8 %654, ptr %.5301468.unr, align 1, !tbaa !25
  %655 = getelementptr inbounds i8, ptr %652, i64 1
  %656 = load i8, ptr %655, align 1, !tbaa !28
  %657 = getelementptr inbounds i8, ptr %.5301468.unr, i64 1
  store i8 %656, ptr %657, align 1, !tbaa !25
  %658 = load i8, ptr %652, align 1, !tbaa !29
  %659 = getelementptr inbounds i8, ptr %.5301468.unr, i64 2
  store i8 %658, ptr %659, align 1, !tbaa !25
  %660 = getelementptr inbounds i8, ptr %.5301468.unr, i64 3
  store i8 -1, ptr %660, align 1, !tbaa !25
  %661 = getelementptr inbounds i8, ptr %.5301468.unr, i64 4
  br label %.loopexit

.loopexit.loopexit625.unr-lcssa:                  ; preds = %.lr.ph463, %.lr.ph463.preheader
  %.lcssa629.ph = phi ptr [ poison, %.lr.ph463.preheader ], [ %606, %.lr.ph463 ]
  %.lcssa628.ph = phi ptr [ poison, %.lr.ph463.preheader ], [ %615, %.lr.ph463 ]
  %.6462.unr = phi ptr [ %.1297, %.lr.ph463.preheader ], [ %615, %.lr.ph463 ]
  %.5332460.unr = phi ptr [ %.1328495, %.lr.ph463.preheader ], [ %606, %.lr.ph463 ]
  br i1 %lcmp.mod671.not, label %.loopexit, label %.lr.ph463.epil

.lr.ph463.epil:                                   ; preds = %.loopexit.loopexit625.unr-lcssa
  %662 = getelementptr inbounds i8, ptr %.5332460.unr, i64 3
  %663 = getelementptr inbounds i8, ptr %.5332460.unr, i64 2
  %664 = load i8, ptr %663, align 1, !tbaa !40
  store i8 %664, ptr %.6462.unr, align 1, !tbaa !25
  %665 = getelementptr inbounds i8, ptr %.5332460.unr, i64 1
  %666 = load i8, ptr %665, align 1, !tbaa !42
  %667 = getelementptr inbounds i8, ptr %.6462.unr, i64 1
  store i8 %666, ptr %667, align 1, !tbaa !25
  %668 = load i8, ptr %.5332460.unr, align 1, !tbaa !43
  %669 = getelementptr inbounds i8, ptr %.6462.unr, i64 2
  store i8 %668, ptr %669, align 1, !tbaa !25
  %670 = getelementptr inbounds i8, ptr %.6462.unr, i64 3
  store i8 -1, ptr %670, align 1, !tbaa !25
  %671 = getelementptr inbounds i8, ptr %.6462.unr, i64 4
  br label %.loopexit

.loopexit.loopexit626.unr-lcssa:                  ; preds = %.lr.ph, %.lr.ph.preheader
  %.lcssa627.ph = phi ptr [ poison, %.lr.ph.preheader ], [ %626, %.lr.ph ]
  %.lcssa.ph = phi ptr [ poison, %.lr.ph.preheader ], [ %635, %.lr.ph ]
  %.7458.unr = phi ptr [ %.1297, %.lr.ph.preheader ], [ %635, %.lr.ph ]
  %.6333456.unr = phi ptr [ %.1328495, %.lr.ph.preheader ], [ %626, %.lr.ph ]
  br i1 %lcmp.mod665.not, label %.loopexit, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %.loopexit.loopexit626.unr-lcssa
  %672 = getelementptr inbounds i8, ptr %.6333456.unr, i64 4
  %673 = getelementptr inbounds i8, ptr %.6333456.unr, i64 2
  %674 = load i8, ptr %673, align 1, !tbaa !26
  store i8 %674, ptr %.7458.unr, align 1, !tbaa !25
  %675 = getelementptr inbounds i8, ptr %.6333456.unr, i64 1
  %676 = load i8, ptr %675, align 1, !tbaa !28
  %677 = getelementptr inbounds i8, ptr %.7458.unr, i64 1
  store i8 %676, ptr %677, align 1, !tbaa !25
  %678 = load i8, ptr %.6333456.unr, align 1, !tbaa !29
  %679 = getelementptr inbounds i8, ptr %.7458.unr, i64 2
  store i8 %678, ptr %679, align 1, !tbaa !25
  %680 = getelementptr inbounds i8, ptr %.7458.unr, i64 3
  store i8 -1, ptr %680, align 1, !tbaa !25
  %681 = getelementptr inbounds i8, ptr %.7458.unr, i64 4
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph.epil, %.loopexit.loopexit626.unr-lcssa, %.lr.ph463.epil, %.loopexit.loopexit625.unr-lcssa, %.lr.ph469.split.epil, %.loopexit.loopexit624.unr-lcssa, %.lr.ph469.split.us.epil, %.loopexit.loopexit623.unr-lcssa, %.lr.ph476.split, %.lr.ph476.split.us, %.split, %.split.us.us, %.preheader369, %.preheader367, %.preheader365, %.preheader363, %.preheader, %275
  %.7334 = phi ptr [ %.1328495, %275 ], [ %.1328495, %.preheader ], [ %.1328495, %.preheader363 ], [ %.1328495, %.preheader365 ], [ %.1328495, %.preheader367 ], [ %.1328495, %.preheader369 ], [ %434, %.split.us.us ], [ %540, %.split ], [ %302, %.lr.ph476.split.us ], [ %542, %.lr.ph476.split ], [ %.lcssa633.ph, %.loopexit.loopexit623.unr-lcssa ], [ %636, %.lr.ph469.split.us.epil ], [ %.lcssa631.ph, %.loopexit.loopexit624.unr-lcssa ], [ %649, %.lr.ph469.split.epil ], [ %.lcssa629.ph, %.loopexit.loopexit625.unr-lcssa ], [ %662, %.lr.ph463.epil ], [ %.lcssa627.ph, %.loopexit.loopexit626.unr-lcssa ], [ %672, %.lr.ph.epil ]
  %.8 = phi ptr [ %.1297, %275 ], [ %.1297, %.preheader ], [ %.1297, %.preheader363 ], [ %.1297, %.preheader365 ], [ %.1297, %.preheader367 ], [ %.1297, %.preheader369 ], [ %433, %.split.us.us ], [ %539, %.split ], [ %329, %.lr.ph476.split.us ], [ %569, %.lr.ph476.split ], [ %.lcssa632.ph, %.loopexit.loopexit623.unr-lcssa ], [ %648, %.lr.ph469.split.us.epil ], [ %.lcssa630.ph, %.loopexit.loopexit624.unr-lcssa ], [ %661, %.lr.ph469.split.epil ], [ %.lcssa628.ph, %.loopexit.loopexit625.unr-lcssa ], [ %671, %.lr.ph463.epil ], [ %.lcssa.ph, %.loopexit.loopexit626.unr-lcssa ], [ %681, %.lr.ph.epil ]
  %682 = icmp sgt i64 %indvars.iv555, 1
  br i1 %682, label %268, label %.sink.split, !llvm.loop !49

.sink.split:                                      ; preds = %..loopexit383_crit_edge.us, %..loopexit375_crit_edge.us, %.loopexit, %71, %253, %.preheader376, %.preheader384, %.lr.ph421, %.lr.ph448, %65, %34
  %.1286.ph = phi i32 [ 0, %34 ], [ -1, %65 ], [ 1, %.lr.ph448 ], [ 1, %.lr.ph421 ], [ 1, %.preheader384 ], [ 1, %.preheader376 ], [ 1, %253 ], [ 1, %71 ], [ 1, %.loopexit ], [ 1, %..loopexit375_crit_edge.us ], [ 1, %..loopexit383_crit_edge.us ]
  call void @_ZdaPv(ptr noundef nonnull %30) #9
  br label %683

683:                                              ; preds = %.sink.split, %15
  %.1286 = phi i32 [ 0, %15 ], [ %.1286.ph, %.sink.split ]
  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 %.1286

684:                                              ; preds = %36, %38, %40, %16
  %.pn.pn = phi { ptr, i32 } [ %17, %16 ], [ %41, %40 ], [ %39, %38 ], [ %37, %36 ]
  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, !10, i64 0}
!9 = !{!"_ZTS19tagBITMAPFILEHEADER", !10, i64 0, !12, i64 2, !10, i64 6, !10, i64 8, !12, i64 10}
!10 = !{!"short", !11, i64 0}
!11 = !{!"omnipotent char", !7, i64 0}
!12 = !{!"int", !11, i64 0}
!13 = !{!14, !12, i64 16}
!14 = !{!"_ZTS19tagBITMAPINFOHEADER", !12, i64 0, !12, i64 4, !12, i64 8, !10, i64 12, !10, i64 14, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36}
!15 = !{!16, !10, i64 4}
!16 = !{!"_ZTS19tagBITMAPCOREHEADER", !12, i64 0, !10, i64 4, !10, i64 6, !10, i64 8, !10, i64 10}
!17 = !{!16, !10, i64 6}
!18 = !{!14, !12, i64 4}
!19 = !{!14, !12, i64 8}
!20 = !{!10, !10, i64 0}
!21 = !{!12, !12, i64 0}
!22 = !{!23, !23, i64 0}
!23 = !{!"any pointer", !11, i64 0}
!24 = !{!9, !12, i64 10}
!25 = !{!11, !11, i64 0}
!26 = !{!27, !11, i64 2}
!27 = !{!"_ZTS10tagRGBQUAD", !11, i64 0, !11, i64 1, !11, i64 2, !11, i64 3}
!28 = !{!27, !11, i64 1}
!29 = !{!27, !11, i64 0}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = distinct !{!33, !31}
!34 = distinct !{!34, !31}
!35 = distinct !{!35, !31}
!36 = distinct !{!36, !31}
!37 = distinct !{!37, !31}
!38 = distinct !{!38, !31}
!39 = distinct !{!39, !31}
!40 = !{!41, !11, i64 2}
!41 = !{!"_ZTS12tagRGBTRIPLE", !11, i64 0, !11, i64 1, !11, i64 2}
!42 = !{!41, !11, i64 1}
!43 = !{!41, !11, i64 0}
!44 = distinct !{!44, !31}
!45 = distinct !{!45, !31}
!46 = distinct !{!46, !31}
!47 = distinct !{!47, !31}
!48 = distinct !{!48, !31}
!49 = distinct !{!49, !31}


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