; LLVM IR from rweather/lightweight-crypto :: src/combined (gift-cofb-masked)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.gift128b_masked_key_schedule_t = type { [80 x %struct.mask_x4_uint32_t] }
%struct.mask_x4_uint32_t = type { i32, i32, i32, i32 }
%struct.gift_cofb_masked_block_t = type { [4 x %struct.mask_x4_uint32_t] }
%struct.gift_cofb_masked_l_t = type { i32, i32 }
%union.anon = type { [4 x i32] }

; Function Attrs: nounwind uwtable
define dso_local i32 @gift_cofb_masked_aead_encrypt(ptr noundef %0, ptr noundef %1, ptr noundef %2, i64 noundef %3, ptr noundef %4, i64 noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) #0 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca %struct.gift128b_masked_key_schedule_t, align 4
  %20 = alloca %struct.gift_cofb_masked_block_t, align 4
  %21 = alloca %struct.gift_cofb_masked_l_t, align 4
  %22 = alloca [4 x i32], align 16
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca %struct.mask_x4_uint32_t, align 4
  %29 = alloca %struct.mask_x4_uint32_t, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca %struct.mask_x4_uint32_t, align 4
  %35 = alloca %struct.mask_x4_uint32_t, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca %union.anon, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca %struct.mask_x4_uint32_t, align 4
  %58 = alloca %struct.mask_x4_uint32_t, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store i64 %3, ptr %13, align 8, !tbaa !9
  store ptr %4, ptr %14, align 8, !tbaa !5
  store i64 %5, ptr %15, align 8, !tbaa !9
  store ptr %6, ptr %16, align 8, !tbaa !5
  store ptr %7, ptr %17, align 8, !tbaa !5
  store ptr %8, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1280, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #5
  %69 = load ptr, ptr %16, align 8, !tbaa !5
  %70 = load i64, ptr %13, align 8, !tbaa !9
  %71 = add i64 %70, 16
  %72 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 %71, ptr %72, align 8, !tbaa !9
  %73 = load ptr, ptr %18, align 8, !tbaa !5
  call void @gift128b_init_masked(ptr noundef %19, ptr noundef %73)
  br label %74

74:                                               ; preds = %9
  %75 = call i32 @aead_random_generate_32()
  %76 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %77 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %76, i64 0, i64 0
  %78 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %77, i32 0, i32 1
  store i32 %75, ptr %78, align 4, !tbaa !11
  %79 = call i32 @aead_random_generate_32()
  %80 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %81 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %80, i64 0, i64 0
  %82 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %81, i32 0, i32 2
  store i32 %79, ptr %82, align 4, !tbaa !14
  %83 = call i32 @aead_random_generate_32()
  %84 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %85 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %84, i64 0, i64 0
  %86 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %85, i32 0, i32 3
  store i32 %83, ptr %86, align 4, !tbaa !15
  %87 = load ptr, ptr %17, align 8, !tbaa !5
  %88 = getelementptr inbounds i8, ptr %87, i64 0
  %89 = load i8, ptr %88, align 1, !tbaa !16
  %90 = zext i8 %89 to i32
  %91 = shl i32 %90, 24
  %92 = load ptr, ptr %17, align 8, !tbaa !5
  %93 = getelementptr inbounds i8, ptr %92, i64 1
  %94 = load i8, ptr %93, align 1, !tbaa !16
  %95 = zext i8 %94 to i32
  %96 = shl i32 %95, 16
  %97 = or i32 %91, %96
  %98 = load ptr, ptr %17, align 8, !tbaa !5
  %99 = getelementptr inbounds i8, ptr %98, i64 2
  %100 = load i8, ptr %99, align 1, !tbaa !16
  %101 = zext i8 %100 to i32
  %102 = shl i32 %101, 8
  %103 = or i32 %97, %102
  %104 = load ptr, ptr %17, align 8, !tbaa !5
  %105 = getelementptr inbounds i8, ptr %104, i64 3
  %106 = load i8, ptr %105, align 1, !tbaa !16
  %107 = zext i8 %106 to i32
  %108 = or i32 %103, %107
  %109 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %110 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %109, i64 0, i64 0
  %111 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %110, i32 0, i32 1
  %112 = load i32, ptr %111, align 4, !tbaa !11
  %113 = xor i32 %108, %112
  %114 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %115 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %114, i64 0, i64 0
  %116 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %115, i32 0, i32 2
  %117 = load i32, ptr %116, align 4, !tbaa !14
  %118 = xor i32 %113, %117
  %119 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %120 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %119, i64 0, i64 0
  %121 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %120, i32 0, i32 3
  %122 = load i32, ptr %121, align 4, !tbaa !15
  %123 = xor i32 %118, %122
  %124 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %125 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %124, i64 0, i64 0
  %126 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %125, i32 0, i32 0
  store i32 %123, ptr %126, align 4, !tbaa !17
  br label %127

127:                                              ; preds = %74
  br label %128

128:                                              ; preds = %127
  br label %129

129:                                              ; preds = %128
  %130 = call i32 @aead_random_generate_32()
  %131 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %132 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %131, i64 0, i64 1
  %133 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %132, i32 0, i32 1
  store i32 %130, ptr %133, align 4, !tbaa !11
  %134 = call i32 @aead_random_generate_32()
  %135 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %136 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %135, i64 0, i64 1
  %137 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %136, i32 0, i32 2
  store i32 %134, ptr %137, align 4, !tbaa !14
  %138 = call i32 @aead_random_generate_32()
  %139 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %140 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %139, i64 0, i64 1
  %141 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %140, i32 0, i32 3
  store i32 %138, ptr %141, align 4, !tbaa !15
  %142 = load ptr, ptr %17, align 8, !tbaa !5
  %143 = getelementptr inbounds i8, ptr %142, i64 4
  %144 = getelementptr inbounds i8, ptr %143, i64 0
  %145 = load i8, ptr %144, align 1, !tbaa !16
  %146 = zext i8 %145 to i32
  %147 = shl i32 %146, 24
  %148 = load ptr, ptr %17, align 8, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %148, i64 4
  %150 = getelementptr inbounds i8, ptr %149, i64 1
  %151 = load i8, ptr %150, align 1, !tbaa !16
  %152 = zext i8 %151 to i32
  %153 = shl i32 %152, 16
  %154 = or i32 %147, %153
  %155 = load ptr, ptr %17, align 8, !tbaa !5
  %156 = getelementptr inbounds i8, ptr %155, i64 4
  %157 = getelementptr inbounds i8, ptr %156, i64 2
  %158 = load i8, ptr %157, align 1, !tbaa !16
  %159 = zext i8 %158 to i32
  %160 = shl i32 %159, 8
  %161 = or i32 %154, %160
  %162 = load ptr, ptr %17, align 8, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %162, i64 4
  %164 = getelementptr inbounds i8, ptr %163, i64 3
  %165 = load i8, ptr %164, align 1, !tbaa !16
  %166 = zext i8 %165 to i32
  %167 = or i32 %161, %166
  %168 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %169 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %168, i64 0, i64 1
  %170 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %169, i32 0, i32 1
  %171 = load i32, ptr %170, align 4, !tbaa !11
  %172 = xor i32 %167, %171
  %173 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %174 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %173, i64 0, i64 1
  %175 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %174, i32 0, i32 2
  %176 = load i32, ptr %175, align 4, !tbaa !14
  %177 = xor i32 %172, %176
  %178 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %179 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %178, i64 0, i64 1
  %180 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %179, i32 0, i32 3
  %181 = load i32, ptr %180, align 4, !tbaa !15
  %182 = xor i32 %177, %181
  %183 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %184 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %183, i64 0, i64 1
  %185 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %184, i32 0, i32 0
  store i32 %182, ptr %185, align 4, !tbaa !17
  br label %186

186:                                              ; preds = %129
  br label %187

187:                                              ; preds = %186
  br label %188

188:                                              ; preds = %187
  %189 = call i32 @aead_random_generate_32()
  %190 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %191 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %190, i64 0, i64 2
  %192 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %191, i32 0, i32 1
  store i32 %189, ptr %192, align 4, !tbaa !11
  %193 = call i32 @aead_random_generate_32()
  %194 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %195 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %194, i64 0, i64 2
  %196 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %195, i32 0, i32 2
  store i32 %193, ptr %196, align 4, !tbaa !14
  %197 = call i32 @aead_random_generate_32()
  %198 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %199 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %198, i64 0, i64 2
  %200 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %199, i32 0, i32 3
  store i32 %197, ptr %200, align 4, !tbaa !15
  %201 = load ptr, ptr %17, align 8, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %201, i64 8
  %203 = getelementptr inbounds i8, ptr %202, i64 0
  %204 = load i8, ptr %203, align 1, !tbaa !16
  %205 = zext i8 %204 to i32
  %206 = shl i32 %205, 24
  %207 = load ptr, ptr %17, align 8, !tbaa !5
  %208 = getelementptr inbounds i8, ptr %207, i64 8
  %209 = getelementptr inbounds i8, ptr %208, i64 1
  %210 = load i8, ptr %209, align 1, !tbaa !16
  %211 = zext i8 %210 to i32
  %212 = shl i32 %211, 16
  %213 = or i32 %206, %212
  %214 = load ptr, ptr %17, align 8, !tbaa !5
  %215 = getelementptr inbounds i8, ptr %214, i64 8
  %216 = getelementptr inbounds i8, ptr %215, i64 2
  %217 = load i8, ptr %216, align 1, !tbaa !16
  %218 = zext i8 %217 to i32
  %219 = shl i32 %218, 8
  %220 = or i32 %213, %219
  %221 = load ptr, ptr %17, align 8, !tbaa !5
  %222 = getelementptr inbounds i8, ptr %221, i64 8
  %223 = getelementptr inbounds i8, ptr %222, i64 3
  %224 = load i8, ptr %223, align 1, !tbaa !16
  %225 = zext i8 %224 to i32
  %226 = or i32 %220, %225
  %227 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %228 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %227, i64 0, i64 2
  %229 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %228, i32 0, i32 1
  %230 = load i32, ptr %229, align 4, !tbaa !11
  %231 = xor i32 %226, %230
  %232 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %233 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %232, i64 0, i64 2
  %234 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %233, i32 0, i32 2
  %235 = load i32, ptr %234, align 4, !tbaa !14
  %236 = xor i32 %231, %235
  %237 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %238 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %237, i64 0, i64 2
  %239 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %238, i32 0, i32 3
  %240 = load i32, ptr %239, align 4, !tbaa !15
  %241 = xor i32 %236, %240
  %242 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %243 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %242, i64 0, i64 2
  %244 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %243, i32 0, i32 0
  store i32 %241, ptr %244, align 4, !tbaa !17
  br label %245

245:                                              ; preds = %188
  br label %246

246:                                              ; preds = %245
  br label %247

247:                                              ; preds = %246
  %248 = call i32 @aead_random_generate_32()
  %249 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %250 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %249, i64 0, i64 3
  %251 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %250, i32 0, i32 1
  store i32 %248, ptr %251, align 4, !tbaa !11
  %252 = call i32 @aead_random_generate_32()
  %253 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %254 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %253, i64 0, i64 3
  %255 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %254, i32 0, i32 2
  store i32 %252, ptr %255, align 4, !tbaa !14
  %256 = call i32 @aead_random_generate_32()
  %257 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %258 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %257, i64 0, i64 3
  %259 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %258, i32 0, i32 3
  store i32 %256, ptr %259, align 4, !tbaa !15
  %260 = load ptr, ptr %17, align 8, !tbaa !5
  %261 = getelementptr inbounds i8, ptr %260, i64 12
  %262 = getelementptr inbounds i8, ptr %261, i64 0
  %263 = load i8, ptr %262, align 1, !tbaa !16
  %264 = zext i8 %263 to i32
  %265 = shl i32 %264, 24
  %266 = load ptr, ptr %17, align 8, !tbaa !5
  %267 = getelementptr inbounds i8, ptr %266, i64 12
  %268 = getelementptr inbounds i8, ptr %267, i64 1
  %269 = load i8, ptr %268, align 1, !tbaa !16
  %270 = zext i8 %269 to i32
  %271 = shl i32 %270, 16
  %272 = or i32 %265, %271
  %273 = load ptr, ptr %17, align 8, !tbaa !5
  %274 = getelementptr inbounds i8, ptr %273, i64 12
  %275 = getelementptr inbounds i8, ptr %274, i64 2
  %276 = load i8, ptr %275, align 1, !tbaa !16
  %277 = zext i8 %276 to i32
  %278 = shl i32 %277, 8
  %279 = or i32 %272, %278
  %280 = load ptr, ptr %17, align 8, !tbaa !5
  %281 = getelementptr inbounds i8, ptr %280, i64 12
  %282 = getelementptr inbounds i8, ptr %281, i64 3
  %283 = load i8, ptr %282, align 1, !tbaa !16
  %284 = zext i8 %283 to i32
  %285 = or i32 %279, %284
  %286 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %287 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %286, i64 0, i64 3
  %288 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %287, i32 0, i32 1
  %289 = load i32, ptr %288, align 4, !tbaa !11
  %290 = xor i32 %285, %289
  %291 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %292 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %291, i64 0, i64 3
  %293 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %292, i32 0, i32 2
  %294 = load i32, ptr %293, align 4, !tbaa !14
  %295 = xor i32 %290, %294
  %296 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %297 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %296, i64 0, i64 3
  %298 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %297, i32 0, i32 3
  %299 = load i32, ptr %298, align 4, !tbaa !15
  %300 = xor i32 %295, %299
  %301 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %302 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %301, i64 0, i64 3
  %303 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %302, i32 0, i32 0
  store i32 %300, ptr %303, align 4, !tbaa !17
  br label %304

304:                                              ; preds = %247
  br label %305

305:                                              ; preds = %304
  %306 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %307 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %306, i64 0, i64 0
  %308 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %309 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %308, i64 0, i64 0
  call void @gift128b_encrypt_preloaded_masked(ptr noundef %19, ptr noundef %307, ptr noundef %309)
  %310 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %311 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %310, i64 0, i64 0
  %312 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %311, i32 0, i32 0
  %313 = load i32, ptr %312, align 4, !tbaa !17
  %314 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %315 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %314, i64 0, i64 0
  %316 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %315, i32 0, i32 1
  %317 = load i32, ptr %316, align 4, !tbaa !11
  %318 = xor i32 %313, %317
  %319 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %320 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %319, i64 0, i64 0
  %321 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %320, i32 0, i32 2
  %322 = load i32, ptr %321, align 4, !tbaa !14
  %323 = xor i32 %318, %322
  %324 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %325 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %324, i64 0, i64 0
  %326 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %325, i32 0, i32 3
  %327 = load i32, ptr %326, align 4, !tbaa !15
  %328 = xor i32 %323, %327
  %329 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  store i32 %328, ptr %329, align 4, !tbaa !18
  %330 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %331 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %330, i64 0, i64 1
  %332 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %331, i32 0, i32 0
  %333 = load i32, ptr %332, align 4, !tbaa !17
  %334 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %335 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %334, i64 0, i64 1
  %336 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %335, i32 0, i32 1
  %337 = load i32, ptr %336, align 4, !tbaa !11
  %338 = xor i32 %333, %337
  %339 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %340 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %339, i64 0, i64 1
  %341 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %340, i32 0, i32 2
  %342 = load i32, ptr %341, align 4, !tbaa !14
  %343 = xor i32 %338, %342
  %344 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %345 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %344, i64 0, i64 1
  %346 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %345, i32 0, i32 3
  %347 = load i32, ptr %346, align 4, !tbaa !15
  %348 = xor i32 %343, %347
  %349 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  store i32 %348, ptr %349, align 4, !tbaa !20
  %350 = load ptr, ptr %14, align 8, !tbaa !5
  %351 = load i64, ptr %15, align 8, !tbaa !9
  %352 = load i64, ptr %13, align 8, !tbaa !9
  call void @gift_cofb_masked_assoc_data(ptr noundef %19, ptr noundef %20, ptr noundef %21, ptr noundef %350, i64 noundef %351, i64 noundef %352)
  %353 = load i64, ptr %13, align 8, !tbaa !9
  %354 = icmp ugt i64 %353, 0
  br i1 %354, label %355, label %1864

355:                                              ; preds = %305
  br label %356

356:                                              ; preds = %816, %355
  %357 = load i64, ptr %13, align 8, !tbaa !9
  %358 = icmp ugt i64 %357, 16
  br i1 %358, label %359, label %827

359:                                              ; preds = %356
  %360 = load ptr, ptr %12, align 8, !tbaa !5
  %361 = getelementptr inbounds i8, ptr %360, i64 0
  %362 = load i8, ptr %361, align 1, !tbaa !16
  %363 = zext i8 %362 to i32
  %364 = shl i32 %363, 24
  %365 = load ptr, ptr %12, align 8, !tbaa !5
  %366 = getelementptr inbounds i8, ptr %365, i64 1
  %367 = load i8, ptr %366, align 1, !tbaa !16
  %368 = zext i8 %367 to i32
  %369 = shl i32 %368, 16
  %370 = or i32 %364, %369
  %371 = load ptr, ptr %12, align 8, !tbaa !5
  %372 = getelementptr inbounds i8, ptr %371, i64 2
  %373 = load i8, ptr %372, align 1, !tbaa !16
  %374 = zext i8 %373 to i32
  %375 = shl i32 %374, 8
  %376 = or i32 %370, %375
  %377 = load ptr, ptr %12, align 8, !tbaa !5
  %378 = getelementptr inbounds i8, ptr %377, i64 3
  %379 = load i8, ptr %378, align 1, !tbaa !16
  %380 = zext i8 %379 to i32
  %381 = or i32 %376, %380
  %382 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 0
  store i32 %381, ptr %382, align 16, !tbaa !21
  %383 = load ptr, ptr %12, align 8, !tbaa !5
  %384 = getelementptr inbounds i8, ptr %383, i64 4
  %385 = getelementptr inbounds i8, ptr %384, i64 0
  %386 = load i8, ptr %385, align 1, !tbaa !16
  %387 = zext i8 %386 to i32
  %388 = shl i32 %387, 24
  %389 = load ptr, ptr %12, align 8, !tbaa !5
  %390 = getelementptr inbounds i8, ptr %389, i64 4
  %391 = getelementptr inbounds i8, ptr %390, i64 1
  %392 = load i8, ptr %391, align 1, !tbaa !16
  %393 = zext i8 %392 to i32
  %394 = shl i32 %393, 16
  %395 = or i32 %388, %394
  %396 = load ptr, ptr %12, align 8, !tbaa !5
  %397 = getelementptr inbounds i8, ptr %396, i64 4
  %398 = getelementptr inbounds i8, ptr %397, i64 2
  %399 = load i8, ptr %398, align 1, !tbaa !16
  %400 = zext i8 %399 to i32
  %401 = shl i32 %400, 8
  %402 = or i32 %395, %401
  %403 = load ptr, ptr %12, align 8, !tbaa !5
  %404 = getelementptr inbounds i8, ptr %403, i64 4
  %405 = getelementptr inbounds i8, ptr %404, i64 3
  %406 = load i8, ptr %405, align 1, !tbaa !16
  %407 = zext i8 %406 to i32
  %408 = or i32 %402, %407
  %409 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 1
  store i32 %408, ptr %409, align 4, !tbaa !21
  %410 = load ptr, ptr %12, align 8, !tbaa !5
  %411 = getelementptr inbounds i8, ptr %410, i64 8
  %412 = getelementptr inbounds i8, ptr %411, i64 0
  %413 = load i8, ptr %412, align 1, !tbaa !16
  %414 = zext i8 %413 to i32
  %415 = shl i32 %414, 24
  %416 = load ptr, ptr %12, align 8, !tbaa !5
  %417 = getelementptr inbounds i8, ptr %416, i64 8
  %418 = getelementptr inbounds i8, ptr %417, i64 1
  %419 = load i8, ptr %418, align 1, !tbaa !16
  %420 = zext i8 %419 to i32
  %421 = shl i32 %420, 16
  %422 = or i32 %415, %421
  %423 = load ptr, ptr %12, align 8, !tbaa !5
  %424 = getelementptr inbounds i8, ptr %423, i64 8
  %425 = getelementptr inbounds i8, ptr %424, i64 2
  %426 = load i8, ptr %425, align 1, !tbaa !16
  %427 = zext i8 %426 to i32
  %428 = shl i32 %427, 8
  %429 = or i32 %422, %428
  %430 = load ptr, ptr %12, align 8, !tbaa !5
  %431 = getelementptr inbounds i8, ptr %430, i64 8
  %432 = getelementptr inbounds i8, ptr %431, i64 3
  %433 = load i8, ptr %432, align 1, !tbaa !16
  %434 = zext i8 %433 to i32
  %435 = or i32 %429, %434
  %436 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 2
  store i32 %435, ptr %436, align 8, !tbaa !21
  %437 = load ptr, ptr %12, align 8, !tbaa !5
  %438 = getelementptr inbounds i8, ptr %437, i64 12
  %439 = getelementptr inbounds i8, ptr %438, i64 0
  %440 = load i8, ptr %439, align 1, !tbaa !16
  %441 = zext i8 %440 to i32
  %442 = shl i32 %441, 24
  %443 = load ptr, ptr %12, align 8, !tbaa !5
  %444 = getelementptr inbounds i8, ptr %443, i64 12
  %445 = getelementptr inbounds i8, ptr %444, i64 1
  %446 = load i8, ptr %445, align 1, !tbaa !16
  %447 = zext i8 %446 to i32
  %448 = shl i32 %447, 16
  %449 = or i32 %442, %448
  %450 = load ptr, ptr %12, align 8, !tbaa !5
  %451 = getelementptr inbounds i8, ptr %450, i64 12
  %452 = getelementptr inbounds i8, ptr %451, i64 2
  %453 = load i8, ptr %452, align 1, !tbaa !16
  %454 = zext i8 %453 to i32
  %455 = shl i32 %454, 8
  %456 = or i32 %449, %455
  %457 = load ptr, ptr %12, align 8, !tbaa !5
  %458 = getelementptr inbounds i8, ptr %457, i64 12
  %459 = getelementptr inbounds i8, ptr %458, i64 3
  %460 = load i8, ptr %459, align 1, !tbaa !16
  %461 = zext i8 %460 to i32
  %462 = or i32 %456, %461
  %463 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 3
  store i32 %462, ptr %463, align 4, !tbaa !21
  br label %464

464:                                              ; preds = %359
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %465 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %466 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %465, i64 0, i64 0
  %467 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %466, i32 0, i32 0
  %468 = load i32, ptr %467, align 4, !tbaa !17
  %469 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %470 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %469, i64 0, i64 0
  %471 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %470, i32 0, i32 1
  %472 = load i32, ptr %471, align 4, !tbaa !11
  %473 = xor i32 %468, %472
  %474 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %475 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %474, i64 0, i64 0
  %476 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %475, i32 0, i32 2
  %477 = load i32, ptr %476, align 4, !tbaa !14
  %478 = xor i32 %473, %477
  %479 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %480 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %479, i64 0, i64 0
  %481 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %480, i32 0, i32 3
  %482 = load i32, ptr %481, align 4, !tbaa !15
  %483 = xor i32 %478, %482
  %484 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 0
  %485 = load i32, ptr %484, align 16, !tbaa !21
  %486 = xor i32 %483, %485
  store i32 %486, ptr %23, align 4, !tbaa !21
  %487 = load i32, ptr %23, align 4, !tbaa !21
  %488 = lshr i32 %487, 24
  %489 = trunc i32 %488 to i8
  %490 = load ptr, ptr %10, align 8, !tbaa !5
  %491 = getelementptr inbounds i8, ptr %490, i64 0
  store i8 %489, ptr %491, align 1, !tbaa !16
  %492 = load i32, ptr %23, align 4, !tbaa !21
  %493 = lshr i32 %492, 16
  %494 = trunc i32 %493 to i8
  %495 = load ptr, ptr %10, align 8, !tbaa !5
  %496 = getelementptr inbounds i8, ptr %495, i64 1
  store i8 %494, ptr %496, align 1, !tbaa !16
  %497 = load i32, ptr %23, align 4, !tbaa !21
  %498 = lshr i32 %497, 8
  %499 = trunc i32 %498 to i8
  %500 = load ptr, ptr %10, align 8, !tbaa !5
  %501 = getelementptr inbounds i8, ptr %500, i64 2
  store i8 %499, ptr %501, align 1, !tbaa !16
  %502 = load i32, ptr %23, align 4, !tbaa !21
  %503 = trunc i32 %502 to i8
  %504 = load ptr, ptr %10, align 8, !tbaa !5
  %505 = getelementptr inbounds i8, ptr %504, i64 3
  store i8 %503, ptr %505, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  br label %506

506:                                              ; preds = %464
  br label %507

507:                                              ; preds = %506
  br label %508

508:                                              ; preds = %507
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %509 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %510 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %509, i64 0, i64 1
  %511 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %510, i32 0, i32 0
  %512 = load i32, ptr %511, align 4, !tbaa !17
  %513 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %514 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %513, i64 0, i64 1
  %515 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %514, i32 0, i32 1
  %516 = load i32, ptr %515, align 4, !tbaa !11
  %517 = xor i32 %512, %516
  %518 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %519 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %518, i64 0, i64 1
  %520 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %519, i32 0, i32 2
  %521 = load i32, ptr %520, align 4, !tbaa !14
  %522 = xor i32 %517, %521
  %523 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %524 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %523, i64 0, i64 1
  %525 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %524, i32 0, i32 3
  %526 = load i32, ptr %525, align 4, !tbaa !15
  %527 = xor i32 %522, %526
  %528 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 1
  %529 = load i32, ptr %528, align 4, !tbaa !21
  %530 = xor i32 %527, %529
  store i32 %530, ptr %24, align 4, !tbaa !21
  %531 = load i32, ptr %24, align 4, !tbaa !21
  %532 = lshr i32 %531, 24
  %533 = trunc i32 %532 to i8
  %534 = load ptr, ptr %10, align 8, !tbaa !5
  %535 = getelementptr inbounds i8, ptr %534, i64 4
  %536 = getelementptr inbounds i8, ptr %535, i64 0
  store i8 %533, ptr %536, align 1, !tbaa !16
  %537 = load i32, ptr %24, align 4, !tbaa !21
  %538 = lshr i32 %537, 16
  %539 = trunc i32 %538 to i8
  %540 = load ptr, ptr %10, align 8, !tbaa !5
  %541 = getelementptr inbounds i8, ptr %540, i64 4
  %542 = getelementptr inbounds i8, ptr %541, i64 1
  store i8 %539, ptr %542, align 1, !tbaa !16
  %543 = load i32, ptr %24, align 4, !tbaa !21
  %544 = lshr i32 %543, 8
  %545 = trunc i32 %544 to i8
  %546 = load ptr, ptr %10, align 8, !tbaa !5
  %547 = getelementptr inbounds i8, ptr %546, i64 4
  %548 = getelementptr inbounds i8, ptr %547, i64 2
  store i8 %545, ptr %548, align 1, !tbaa !16
  %549 = load i32, ptr %24, align 4, !tbaa !21
  %550 = trunc i32 %549 to i8
  %551 = load ptr, ptr %10, align 8, !tbaa !5
  %552 = getelementptr inbounds i8, ptr %551, i64 4
  %553 = getelementptr inbounds i8, ptr %552, i64 3
  store i8 %550, ptr %553, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  br label %554

554:                                              ; preds = %508
  br label %555

555:                                              ; preds = %554
  br label %556

556:                                              ; preds = %555
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %557 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %558 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %557, i64 0, i64 2
  %559 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %558, i32 0, i32 0
  %560 = load i32, ptr %559, align 4, !tbaa !17
  %561 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %562 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %561, i64 0, i64 2
  %563 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %562, i32 0, i32 1
  %564 = load i32, ptr %563, align 4, !tbaa !11
  %565 = xor i32 %560, %564
  %566 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %567 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %566, i64 0, i64 2
  %568 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %567, i32 0, i32 2
  %569 = load i32, ptr %568, align 4, !tbaa !14
  %570 = xor i32 %565, %569
  %571 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %572 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %571, i64 0, i64 2
  %573 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %572, i32 0, i32 3
  %574 = load i32, ptr %573, align 4, !tbaa !15
  %575 = xor i32 %570, %574
  %576 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 2
  %577 = load i32, ptr %576, align 8, !tbaa !21
  %578 = xor i32 %575, %577
  store i32 %578, ptr %25, align 4, !tbaa !21
  %579 = load i32, ptr %25, align 4, !tbaa !21
  %580 = lshr i32 %579, 24
  %581 = trunc i32 %580 to i8
  %582 = load ptr, ptr %10, align 8, !tbaa !5
  %583 = getelementptr inbounds i8, ptr %582, i64 8
  %584 = getelementptr inbounds i8, ptr %583, i64 0
  store i8 %581, ptr %584, align 1, !tbaa !16
  %585 = load i32, ptr %25, align 4, !tbaa !21
  %586 = lshr i32 %585, 16
  %587 = trunc i32 %586 to i8
  %588 = load ptr, ptr %10, align 8, !tbaa !5
  %589 = getelementptr inbounds i8, ptr %588, i64 8
  %590 = getelementptr inbounds i8, ptr %589, i64 1
  store i8 %587, ptr %590, align 1, !tbaa !16
  %591 = load i32, ptr %25, align 4, !tbaa !21
  %592 = lshr i32 %591, 8
  %593 = trunc i32 %592 to i8
  %594 = load ptr, ptr %10, align 8, !tbaa !5
  %595 = getelementptr inbounds i8, ptr %594, i64 8
  %596 = getelementptr inbounds i8, ptr %595, i64 2
  store i8 %593, ptr %596, align 1, !tbaa !16
  %597 = load i32, ptr %25, align 4, !tbaa !21
  %598 = trunc i32 %597 to i8
  %599 = load ptr, ptr %10, align 8, !tbaa !5
  %600 = getelementptr inbounds i8, ptr %599, i64 8
  %601 = getelementptr inbounds i8, ptr %600, i64 3
  store i8 %598, ptr %601, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  br label %602

602:                                              ; preds = %556
  br label %603

603:                                              ; preds = %602
  br label %604

604:                                              ; preds = %603
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %605 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %606 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %605, i64 0, i64 3
  %607 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %606, i32 0, i32 0
  %608 = load i32, ptr %607, align 4, !tbaa !17
  %609 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %610 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %609, i64 0, i64 3
  %611 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %610, i32 0, i32 1
  %612 = load i32, ptr %611, align 4, !tbaa !11
  %613 = xor i32 %608, %612
  %614 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %615 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %614, i64 0, i64 3
  %616 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %615, i32 0, i32 2
  %617 = load i32, ptr %616, align 4, !tbaa !14
  %618 = xor i32 %613, %617
  %619 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %620 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %619, i64 0, i64 3
  %621 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %620, i32 0, i32 3
  %622 = load i32, ptr %621, align 4, !tbaa !15
  %623 = xor i32 %618, %622
  %624 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 3
  %625 = load i32, ptr %624, align 4, !tbaa !21
  %626 = xor i32 %623, %625
  store i32 %626, ptr %26, align 4, !tbaa !21
  %627 = load i32, ptr %26, align 4, !tbaa !21
  %628 = lshr i32 %627, 24
  %629 = trunc i32 %628 to i8
  %630 = load ptr, ptr %10, align 8, !tbaa !5
  %631 = getelementptr inbounds i8, ptr %630, i64 12
  %632 = getelementptr inbounds i8, ptr %631, i64 0
  store i8 %629, ptr %632, align 1, !tbaa !16
  %633 = load i32, ptr %26, align 4, !tbaa !21
  %634 = lshr i32 %633, 16
  %635 = trunc i32 %634 to i8
  %636 = load ptr, ptr %10, align 8, !tbaa !5
  %637 = getelementptr inbounds i8, ptr %636, i64 12
  %638 = getelementptr inbounds i8, ptr %637, i64 1
  store i8 %635, ptr %638, align 1, !tbaa !16
  %639 = load i32, ptr %26, align 4, !tbaa !21
  %640 = lshr i32 %639, 8
  %641 = trunc i32 %640 to i8
  %642 = load ptr, ptr %10, align 8, !tbaa !5
  %643 = getelementptr inbounds i8, ptr %642, i64 12
  %644 = getelementptr inbounds i8, ptr %643, i64 2
  store i8 %641, ptr %644, align 1, !tbaa !16
  %645 = load i32, ptr %26, align 4, !tbaa !21
  %646 = trunc i32 %645 to i8
  %647 = load ptr, ptr %10, align 8, !tbaa !5
  %648 = getelementptr inbounds i8, ptr %647, i64 12
  %649 = getelementptr inbounds i8, ptr %648, i64 3
  store i8 %646, ptr %649, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  br label %650

650:                                              ; preds = %604
  br label %651

651:                                              ; preds = %650
  br label %652

652:                                              ; preds = %651
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %653 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %654 = load i32, ptr %653, align 4, !tbaa !18
  %655 = ashr i32 %654, 31
  store i32 %655, ptr %27, align 4, !tbaa !21
  %656 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %657 = load i32, ptr %656, align 4, !tbaa !18
  %658 = shl i32 %657, 1
  %659 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %660 = load i32, ptr %659, align 4, !tbaa !20
  %661 = lshr i32 %660, 31
  %662 = or i32 %658, %661
  %663 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  store i32 %662, ptr %663, align 4, !tbaa !18
  %664 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %665 = load i32, ptr %664, align 4, !tbaa !20
  %666 = shl i32 %665, 1
  %667 = load i32, ptr %27, align 4, !tbaa !21
  %668 = and i32 %667, 27
  %669 = xor i32 %666, %668
  %670 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  store i32 %669, ptr %670, align 4, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  br label %671

671:                                              ; preds = %652
  br label %672

672:                                              ; preds = %671
  br label %673

673:                                              ; preds = %672
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #5
  %674 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %675 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %674, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %28, ptr align 4 %675, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #5
  %676 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %677 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %676, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %29, ptr align 4 %677, i64 16, i1 false), !tbaa.struct !22
  %678 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %679 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %678, i64 0, i64 0
  %680 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %681 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %680, i64 0, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %679, ptr align 4 %681, i64 16, i1 false), !tbaa.struct !22
  %682 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %683 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %682, i64 0, i64 1
  %684 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %685 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %684, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %683, ptr align 4 %685, i64 16, i1 false), !tbaa.struct !22
  br label %686

686:                                              ; preds = %673
  %687 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %28, i32 0, i32 0
  %688 = load i32, ptr %687, align 4, !tbaa !17
  %689 = shl i32 %688, 1
  %690 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %29, i32 0, i32 0
  %691 = load i32, ptr %690, align 4, !tbaa !17
  %692 = lshr i32 %691, 31
  %693 = or i32 %689, %692
  %694 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %695 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %694, i64 0, i64 2
  %696 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %695, i32 0, i32 0
  store i32 %693, ptr %696, align 4, !tbaa !17
  %697 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %28, i32 0, i32 1
  %698 = load i32, ptr %697, align 4, !tbaa !11
  %699 = shl i32 %698, 1
  %700 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %29, i32 0, i32 1
  %701 = load i32, ptr %700, align 4, !tbaa !11
  %702 = lshr i32 %701, 31
  %703 = or i32 %699, %702
  %704 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %705 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %704, i64 0, i64 2
  %706 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %705, i32 0, i32 1
  store i32 %703, ptr %706, align 4, !tbaa !11
  %707 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %28, i32 0, i32 2
  %708 = load i32, ptr %707, align 4, !tbaa !14
  %709 = shl i32 %708, 1
  %710 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %29, i32 0, i32 2
  %711 = load i32, ptr %710, align 4, !tbaa !14
  %712 = lshr i32 %711, 31
  %713 = or i32 %709, %712
  %714 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %715 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %714, i64 0, i64 2
  %716 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %715, i32 0, i32 2
  store i32 %713, ptr %716, align 4, !tbaa !14
  %717 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %28, i32 0, i32 3
  %718 = load i32, ptr %717, align 4, !tbaa !15
  %719 = shl i32 %718, 1
  %720 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %29, i32 0, i32 3
  %721 = load i32, ptr %720, align 4, !tbaa !15
  %722 = lshr i32 %721, 31
  %723 = or i32 %719, %722
  %724 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %725 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %724, i64 0, i64 2
  %726 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %725, i32 0, i32 3
  store i32 %723, ptr %726, align 4, !tbaa !15
  %727 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %29, i32 0, i32 0
  %728 = load i32, ptr %727, align 4, !tbaa !17
  %729 = shl i32 %728, 1
  %730 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %28, i32 0, i32 0
  %731 = load i32, ptr %730, align 4, !tbaa !17
  %732 = lshr i32 %731, 31
  %733 = or i32 %729, %732
  %734 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %735 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %734, i64 0, i64 3
  %736 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %735, i32 0, i32 0
  store i32 %733, ptr %736, align 4, !tbaa !17
  %737 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %29, i32 0, i32 1
  %738 = load i32, ptr %737, align 4, !tbaa !11
  %739 = shl i32 %738, 1
  %740 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %28, i32 0, i32 1
  %741 = load i32, ptr %740, align 4, !tbaa !11
  %742 = lshr i32 %741, 31
  %743 = or i32 %739, %742
  %744 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %745 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %744, i64 0, i64 3
  %746 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %745, i32 0, i32 1
  store i32 %743, ptr %746, align 4, !tbaa !11
  %747 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %29, i32 0, i32 2
  %748 = load i32, ptr %747, align 4, !tbaa !14
  %749 = shl i32 %748, 1
  %750 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %28, i32 0, i32 2
  %751 = load i32, ptr %750, align 4, !tbaa !14
  %752 = lshr i32 %751, 31
  %753 = or i32 %749, %752
  %754 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %755 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %754, i64 0, i64 3
  %756 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %755, i32 0, i32 2
  store i32 %753, ptr %756, align 4, !tbaa !14
  %757 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %29, i32 0, i32 3
  %758 = load i32, ptr %757, align 4, !tbaa !15
  %759 = shl i32 %758, 1
  %760 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %28, i32 0, i32 3
  %761 = load i32, ptr %760, align 4, !tbaa !15
  %762 = lshr i32 %761, 31
  %763 = or i32 %759, %762
  %764 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %765 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %764, i64 0, i64 3
  %766 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %765, i32 0, i32 3
  store i32 %763, ptr %766, align 4, !tbaa !15
  br label %767

767:                                              ; preds = %686
  br label %768

768:                                              ; preds = %767
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #5
  br label %769

769:                                              ; preds = %768
  br label %770

770:                                              ; preds = %769
  br label %771

771:                                              ; preds = %770
  %772 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %773 = load i32, ptr %772, align 4, !tbaa !18
  %774 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 0
  %775 = load i32, ptr %774, align 16, !tbaa !21
  %776 = xor i32 %773, %775
  %777 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %778 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %777, i64 0, i64 0
  %779 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %778, i32 0, i32 0
  %780 = load i32, ptr %779, align 4, !tbaa !17
  %781 = xor i32 %780, %776
  store i32 %781, ptr %779, align 4, !tbaa !17
  br label %782

782:                                              ; preds = %771
  br label %783

783:                                              ; preds = %782
  br label %784

784:                                              ; preds = %783
  %785 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %786 = load i32, ptr %785, align 4, !tbaa !20
  %787 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 1
  %788 = load i32, ptr %787, align 4, !tbaa !21
  %789 = xor i32 %786, %788
  %790 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %791 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %790, i64 0, i64 1
  %792 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %791, i32 0, i32 0
  %793 = load i32, ptr %792, align 4, !tbaa !17
  %794 = xor i32 %793, %789
  store i32 %794, ptr %792, align 4, !tbaa !17
  br label %795

795:                                              ; preds = %784
  br label %796

796:                                              ; preds = %795
  br label %797

797:                                              ; preds = %796
  %798 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 2
  %799 = load i32, ptr %798, align 8, !tbaa !21
  %800 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %801 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %800, i64 0, i64 2
  %802 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %801, i32 0, i32 0
  %803 = load i32, ptr %802, align 4, !tbaa !17
  %804 = xor i32 %803, %799
  store i32 %804, ptr %802, align 4, !tbaa !17
  br label %805

805:                                              ; preds = %797
  br label %806

806:                                              ; preds = %805
  br label %807

807:                                              ; preds = %806
  %808 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 3
  %809 = load i32, ptr %808, align 4, !tbaa !21
  %810 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %811 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %810, i64 0, i64 3
  %812 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %811, i32 0, i32 0
  %813 = load i32, ptr %812, align 4, !tbaa !17
  %814 = xor i32 %813, %809
  store i32 %814, ptr %812, align 4, !tbaa !17
  br label %815

815:                                              ; preds = %807
  br label %816

816:                                              ; preds = %815
  %817 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %818 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %817, i64 0, i64 0
  %819 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %820 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %819, i64 0, i64 0
  call void @gift128b_encrypt_preloaded_masked(ptr noundef %19, ptr noundef %818, ptr noundef %820)
  %821 = load ptr, ptr %10, align 8, !tbaa !5
  %822 = getelementptr inbounds i8, ptr %821, i64 16
  store ptr %822, ptr %10, align 8, !tbaa !5
  %823 = load ptr, ptr %12, align 8, !tbaa !5
  %824 = getelementptr inbounds i8, ptr %823, i64 16
  store ptr %824, ptr %12, align 8, !tbaa !5
  %825 = load i64, ptr %13, align 8, !tbaa !9
  %826 = sub i64 %825, 16
  store i64 %826, ptr %13, align 8, !tbaa !9
  br label %356, !llvm.loop !23

827:                                              ; preds = %356
  %828 = load i64, ptr %13, align 8, !tbaa !9
  %829 = icmp eq i64 %828, 16
  br i1 %829, label %830, label %1290

830:                                              ; preds = %827
  %831 = load ptr, ptr %12, align 8, !tbaa !5
  %832 = getelementptr inbounds i8, ptr %831, i64 0
  %833 = load i8, ptr %832, align 1, !tbaa !16
  %834 = zext i8 %833 to i32
  %835 = shl i32 %834, 24
  %836 = load ptr, ptr %12, align 8, !tbaa !5
  %837 = getelementptr inbounds i8, ptr %836, i64 1
  %838 = load i8, ptr %837, align 1, !tbaa !16
  %839 = zext i8 %838 to i32
  %840 = shl i32 %839, 16
  %841 = or i32 %835, %840
  %842 = load ptr, ptr %12, align 8, !tbaa !5
  %843 = getelementptr inbounds i8, ptr %842, i64 2
  %844 = load i8, ptr %843, align 1, !tbaa !16
  %845 = zext i8 %844 to i32
  %846 = shl i32 %845, 8
  %847 = or i32 %841, %846
  %848 = load ptr, ptr %12, align 8, !tbaa !5
  %849 = getelementptr inbounds i8, ptr %848, i64 3
  %850 = load i8, ptr %849, align 1, !tbaa !16
  %851 = zext i8 %850 to i32
  %852 = or i32 %847, %851
  %853 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 0
  store i32 %852, ptr %853, align 16, !tbaa !21
  %854 = load ptr, ptr %12, align 8, !tbaa !5
  %855 = getelementptr inbounds i8, ptr %854, i64 4
  %856 = getelementptr inbounds i8, ptr %855, i64 0
  %857 = load i8, ptr %856, align 1, !tbaa !16
  %858 = zext i8 %857 to i32
  %859 = shl i32 %858, 24
  %860 = load ptr, ptr %12, align 8, !tbaa !5
  %861 = getelementptr inbounds i8, ptr %860, i64 4
  %862 = getelementptr inbounds i8, ptr %861, i64 1
  %863 = load i8, ptr %862, align 1, !tbaa !16
  %864 = zext i8 %863 to i32
  %865 = shl i32 %864, 16
  %866 = or i32 %859, %865
  %867 = load ptr, ptr %12, align 8, !tbaa !5
  %868 = getelementptr inbounds i8, ptr %867, i64 4
  %869 = getelementptr inbounds i8, ptr %868, i64 2
  %870 = load i8, ptr %869, align 1, !tbaa !16
  %871 = zext i8 %870 to i32
  %872 = shl i32 %871, 8
  %873 = or i32 %866, %872
  %874 = load ptr, ptr %12, align 8, !tbaa !5
  %875 = getelementptr inbounds i8, ptr %874, i64 4
  %876 = getelementptr inbounds i8, ptr %875, i64 3
  %877 = load i8, ptr %876, align 1, !tbaa !16
  %878 = zext i8 %877 to i32
  %879 = or i32 %873, %878
  %880 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 1
  store i32 %879, ptr %880, align 4, !tbaa !21
  %881 = load ptr, ptr %12, align 8, !tbaa !5
  %882 = getelementptr inbounds i8, ptr %881, i64 8
  %883 = getelementptr inbounds i8, ptr %882, i64 0
  %884 = load i8, ptr %883, align 1, !tbaa !16
  %885 = zext i8 %884 to i32
  %886 = shl i32 %885, 24
  %887 = load ptr, ptr %12, align 8, !tbaa !5
  %888 = getelementptr inbounds i8, ptr %887, i64 8
  %889 = getelementptr inbounds i8, ptr %888, i64 1
  %890 = load i8, ptr %889, align 1, !tbaa !16
  %891 = zext i8 %890 to i32
  %892 = shl i32 %891, 16
  %893 = or i32 %886, %892
  %894 = load ptr, ptr %12, align 8, !tbaa !5
  %895 = getelementptr inbounds i8, ptr %894, i64 8
  %896 = getelementptr inbounds i8, ptr %895, i64 2
  %897 = load i8, ptr %896, align 1, !tbaa !16
  %898 = zext i8 %897 to i32
  %899 = shl i32 %898, 8
  %900 = or i32 %893, %899
  %901 = load ptr, ptr %12, align 8, !tbaa !5
  %902 = getelementptr inbounds i8, ptr %901, i64 8
  %903 = getelementptr inbounds i8, ptr %902, i64 3
  %904 = load i8, ptr %903, align 1, !tbaa !16
  %905 = zext i8 %904 to i32
  %906 = or i32 %900, %905
  %907 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 2
  store i32 %906, ptr %907, align 8, !tbaa !21
  %908 = load ptr, ptr %12, align 8, !tbaa !5
  %909 = getelementptr inbounds i8, ptr %908, i64 12
  %910 = getelementptr inbounds i8, ptr %909, i64 0
  %911 = load i8, ptr %910, align 1, !tbaa !16
  %912 = zext i8 %911 to i32
  %913 = shl i32 %912, 24
  %914 = load ptr, ptr %12, align 8, !tbaa !5
  %915 = getelementptr inbounds i8, ptr %914, i64 12
  %916 = getelementptr inbounds i8, ptr %915, i64 1
  %917 = load i8, ptr %916, align 1, !tbaa !16
  %918 = zext i8 %917 to i32
  %919 = shl i32 %918, 16
  %920 = or i32 %913, %919
  %921 = load ptr, ptr %12, align 8, !tbaa !5
  %922 = getelementptr inbounds i8, ptr %921, i64 12
  %923 = getelementptr inbounds i8, ptr %922, i64 2
  %924 = load i8, ptr %923, align 1, !tbaa !16
  %925 = zext i8 %924 to i32
  %926 = shl i32 %925, 8
  %927 = or i32 %920, %926
  %928 = load ptr, ptr %12, align 8, !tbaa !5
  %929 = getelementptr inbounds i8, ptr %928, i64 12
  %930 = getelementptr inbounds i8, ptr %929, i64 3
  %931 = load i8, ptr %930, align 1, !tbaa !16
  %932 = zext i8 %931 to i32
  %933 = or i32 %927, %932
  %934 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 3
  store i32 %933, ptr %934, align 4, !tbaa !21
  br label %935

935:                                              ; preds = %830
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  %936 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %937 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %936, i64 0, i64 0
  %938 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %937, i32 0, i32 0
  %939 = load i32, ptr %938, align 4, !tbaa !17
  %940 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %941 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %940, i64 0, i64 0
  %942 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %941, i32 0, i32 1
  %943 = load i32, ptr %942, align 4, !tbaa !11
  %944 = xor i32 %939, %943
  %945 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %946 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %945, i64 0, i64 0
  %947 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %946, i32 0, i32 2
  %948 = load i32, ptr %947, align 4, !tbaa !14
  %949 = xor i32 %944, %948
  %950 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %951 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %950, i64 0, i64 0
  %952 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %951, i32 0, i32 3
  %953 = load i32, ptr %952, align 4, !tbaa !15
  %954 = xor i32 %949, %953
  %955 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 0
  %956 = load i32, ptr %955, align 16, !tbaa !21
  %957 = xor i32 %954, %956
  store i32 %957, ptr %30, align 4, !tbaa !21
  %958 = load i32, ptr %30, align 4, !tbaa !21
  %959 = lshr i32 %958, 24
  %960 = trunc i32 %959 to i8
  %961 = load ptr, ptr %10, align 8, !tbaa !5
  %962 = getelementptr inbounds i8, ptr %961, i64 0
  store i8 %960, ptr %962, align 1, !tbaa !16
  %963 = load i32, ptr %30, align 4, !tbaa !21
  %964 = lshr i32 %963, 16
  %965 = trunc i32 %964 to i8
  %966 = load ptr, ptr %10, align 8, !tbaa !5
  %967 = getelementptr inbounds i8, ptr %966, i64 1
  store i8 %965, ptr %967, align 1, !tbaa !16
  %968 = load i32, ptr %30, align 4, !tbaa !21
  %969 = lshr i32 %968, 8
  %970 = trunc i32 %969 to i8
  %971 = load ptr, ptr %10, align 8, !tbaa !5
  %972 = getelementptr inbounds i8, ptr %971, i64 2
  store i8 %970, ptr %972, align 1, !tbaa !16
  %973 = load i32, ptr %30, align 4, !tbaa !21
  %974 = trunc i32 %973 to i8
  %975 = load ptr, ptr %10, align 8, !tbaa !5
  %976 = getelementptr inbounds i8, ptr %975, i64 3
  store i8 %974, ptr %976, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  br label %977

977:                                              ; preds = %935
  br label %978

978:                                              ; preds = %977
  br label %979

979:                                              ; preds = %978
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %980 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %981 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %980, i64 0, i64 1
  %982 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %981, i32 0, i32 0
  %983 = load i32, ptr %982, align 4, !tbaa !17
  %984 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %985 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %984, i64 0, i64 1
  %986 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %985, i32 0, i32 1
  %987 = load i32, ptr %986, align 4, !tbaa !11
  %988 = xor i32 %983, %987
  %989 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %990 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %989, i64 0, i64 1
  %991 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %990, i32 0, i32 2
  %992 = load i32, ptr %991, align 4, !tbaa !14
  %993 = xor i32 %988, %992
  %994 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %995 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %994, i64 0, i64 1
  %996 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %995, i32 0, i32 3
  %997 = load i32, ptr %996, align 4, !tbaa !15
  %998 = xor i32 %993, %997
  %999 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 1
  %1000 = load i32, ptr %999, align 4, !tbaa !21
  %1001 = xor i32 %998, %1000
  store i32 %1001, ptr %31, align 4, !tbaa !21
  %1002 = load i32, ptr %31, align 4, !tbaa !21
  %1003 = lshr i32 %1002, 24
  %1004 = trunc i32 %1003 to i8
  %1005 = load ptr, ptr %10, align 8, !tbaa !5
  %1006 = getelementptr inbounds i8, ptr %1005, i64 4
  %1007 = getelementptr inbounds i8, ptr %1006, i64 0
  store i8 %1004, ptr %1007, align 1, !tbaa !16
  %1008 = load i32, ptr %31, align 4, !tbaa !21
  %1009 = lshr i32 %1008, 16
  %1010 = trunc i32 %1009 to i8
  %1011 = load ptr, ptr %10, align 8, !tbaa !5
  %1012 = getelementptr inbounds i8, ptr %1011, i64 4
  %1013 = getelementptr inbounds i8, ptr %1012, i64 1
  store i8 %1010, ptr %1013, align 1, !tbaa !16
  %1014 = load i32, ptr %31, align 4, !tbaa !21
  %1015 = lshr i32 %1014, 8
  %1016 = trunc i32 %1015 to i8
  %1017 = load ptr, ptr %10, align 8, !tbaa !5
  %1018 = getelementptr inbounds i8, ptr %1017, i64 4
  %1019 = getelementptr inbounds i8, ptr %1018, i64 2
  store i8 %1016, ptr %1019, align 1, !tbaa !16
  %1020 = load i32, ptr %31, align 4, !tbaa !21
  %1021 = trunc i32 %1020 to i8
  %1022 = load ptr, ptr %10, align 8, !tbaa !5
  %1023 = getelementptr inbounds i8, ptr %1022, i64 4
  %1024 = getelementptr inbounds i8, ptr %1023, i64 3
  store i8 %1021, ptr %1024, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  br label %1025

1025:                                             ; preds = %979
  br label %1026

1026:                                             ; preds = %1025
  br label %1027

1027:                                             ; preds = %1026
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  %1028 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1029 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1028, i64 0, i64 2
  %1030 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1029, i32 0, i32 0
  %1031 = load i32, ptr %1030, align 4, !tbaa !17
  %1032 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1033 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1032, i64 0, i64 2
  %1034 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1033, i32 0, i32 1
  %1035 = load i32, ptr %1034, align 4, !tbaa !11
  %1036 = xor i32 %1031, %1035
  %1037 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1038 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1037, i64 0, i64 2
  %1039 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1038, i32 0, i32 2
  %1040 = load i32, ptr %1039, align 4, !tbaa !14
  %1041 = xor i32 %1036, %1040
  %1042 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1043 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1042, i64 0, i64 2
  %1044 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1043, i32 0, i32 3
  %1045 = load i32, ptr %1044, align 4, !tbaa !15
  %1046 = xor i32 %1041, %1045
  %1047 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 2
  %1048 = load i32, ptr %1047, align 8, !tbaa !21
  %1049 = xor i32 %1046, %1048
  store i32 %1049, ptr %32, align 4, !tbaa !21
  %1050 = load i32, ptr %32, align 4, !tbaa !21
  %1051 = lshr i32 %1050, 24
  %1052 = trunc i32 %1051 to i8
  %1053 = load ptr, ptr %10, align 8, !tbaa !5
  %1054 = getelementptr inbounds i8, ptr %1053, i64 8
  %1055 = getelementptr inbounds i8, ptr %1054, i64 0
  store i8 %1052, ptr %1055, align 1, !tbaa !16
  %1056 = load i32, ptr %32, align 4, !tbaa !21
  %1057 = lshr i32 %1056, 16
  %1058 = trunc i32 %1057 to i8
  %1059 = load ptr, ptr %10, align 8, !tbaa !5
  %1060 = getelementptr inbounds i8, ptr %1059, i64 8
  %1061 = getelementptr inbounds i8, ptr %1060, i64 1
  store i8 %1058, ptr %1061, align 1, !tbaa !16
  %1062 = load i32, ptr %32, align 4, !tbaa !21
  %1063 = lshr i32 %1062, 8
  %1064 = trunc i32 %1063 to i8
  %1065 = load ptr, ptr %10, align 8, !tbaa !5
  %1066 = getelementptr inbounds i8, ptr %1065, i64 8
  %1067 = getelementptr inbounds i8, ptr %1066, i64 2
  store i8 %1064, ptr %1067, align 1, !tbaa !16
  %1068 = load i32, ptr %32, align 4, !tbaa !21
  %1069 = trunc i32 %1068 to i8
  %1070 = load ptr, ptr %10, align 8, !tbaa !5
  %1071 = getelementptr inbounds i8, ptr %1070, i64 8
  %1072 = getelementptr inbounds i8, ptr %1071, i64 3
  store i8 %1069, ptr %1072, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  br label %1073

1073:                                             ; preds = %1027
  br label %1074

1074:                                             ; preds = %1073
  br label %1075

1075:                                             ; preds = %1074
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %1076 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1077 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1076, i64 0, i64 3
  %1078 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1077, i32 0, i32 0
  %1079 = load i32, ptr %1078, align 4, !tbaa !17
  %1080 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1081 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1080, i64 0, i64 3
  %1082 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1081, i32 0, i32 1
  %1083 = load i32, ptr %1082, align 4, !tbaa !11
  %1084 = xor i32 %1079, %1083
  %1085 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1086 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1085, i64 0, i64 3
  %1087 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1086, i32 0, i32 2
  %1088 = load i32, ptr %1087, align 4, !tbaa !14
  %1089 = xor i32 %1084, %1088
  %1090 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1091 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1090, i64 0, i64 3
  %1092 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1091, i32 0, i32 3
  %1093 = load i32, ptr %1092, align 4, !tbaa !15
  %1094 = xor i32 %1089, %1093
  %1095 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 3
  %1096 = load i32, ptr %1095, align 4, !tbaa !21
  %1097 = xor i32 %1094, %1096
  store i32 %1097, ptr %33, align 4, !tbaa !21
  %1098 = load i32, ptr %33, align 4, !tbaa !21
  %1099 = lshr i32 %1098, 24
  %1100 = trunc i32 %1099 to i8
  %1101 = load ptr, ptr %10, align 8, !tbaa !5
  %1102 = getelementptr inbounds i8, ptr %1101, i64 12
  %1103 = getelementptr inbounds i8, ptr %1102, i64 0
  store i8 %1100, ptr %1103, align 1, !tbaa !16
  %1104 = load i32, ptr %33, align 4, !tbaa !21
  %1105 = lshr i32 %1104, 16
  %1106 = trunc i32 %1105 to i8
  %1107 = load ptr, ptr %10, align 8, !tbaa !5
  %1108 = getelementptr inbounds i8, ptr %1107, i64 12
  %1109 = getelementptr inbounds i8, ptr %1108, i64 1
  store i8 %1106, ptr %1109, align 1, !tbaa !16
  %1110 = load i32, ptr %33, align 4, !tbaa !21
  %1111 = lshr i32 %1110, 8
  %1112 = trunc i32 %1111 to i8
  %1113 = load ptr, ptr %10, align 8, !tbaa !5
  %1114 = getelementptr inbounds i8, ptr %1113, i64 12
  %1115 = getelementptr inbounds i8, ptr %1114, i64 2
  store i8 %1112, ptr %1115, align 1, !tbaa !16
  %1116 = load i32, ptr %33, align 4, !tbaa !21
  %1117 = trunc i32 %1116 to i8
  %1118 = load ptr, ptr %10, align 8, !tbaa !5
  %1119 = getelementptr inbounds i8, ptr %1118, i64 12
  %1120 = getelementptr inbounds i8, ptr %1119, i64 3
  store i8 %1117, ptr %1120, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  br label %1121

1121:                                             ; preds = %1075
  br label %1122

1122:                                             ; preds = %1121
  br label %1123

1123:                                             ; preds = %1122
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #5
  %1124 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1125 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1124, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %1125, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #5
  %1126 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1127 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1126, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %35, ptr align 4 %1127, i64 16, i1 false), !tbaa.struct !22
  %1128 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1129 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1128, i64 0, i64 0
  %1130 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1131 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1130, i64 0, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1129, ptr align 4 %1131, i64 16, i1 false), !tbaa.struct !22
  %1132 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1133 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1132, i64 0, i64 1
  %1134 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1135 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1134, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1133, ptr align 4 %1135, i64 16, i1 false), !tbaa.struct !22
  br label %1136

1136:                                             ; preds = %1123
  %1137 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %34, i32 0, i32 0
  %1138 = load i32, ptr %1137, align 4, !tbaa !17
  %1139 = shl i32 %1138, 1
  %1140 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %35, i32 0, i32 0
  %1141 = load i32, ptr %1140, align 4, !tbaa !17
  %1142 = lshr i32 %1141, 31
  %1143 = or i32 %1139, %1142
  %1144 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1145 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1144, i64 0, i64 2
  %1146 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1145, i32 0, i32 0
  store i32 %1143, ptr %1146, align 4, !tbaa !17
  %1147 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %34, i32 0, i32 1
  %1148 = load i32, ptr %1147, align 4, !tbaa !11
  %1149 = shl i32 %1148, 1
  %1150 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %35, i32 0, i32 1
  %1151 = load i32, ptr %1150, align 4, !tbaa !11
  %1152 = lshr i32 %1151, 31
  %1153 = or i32 %1149, %1152
  %1154 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1155 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1154, i64 0, i64 2
  %1156 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1155, i32 0, i32 1
  store i32 %1153, ptr %1156, align 4, !tbaa !11
  %1157 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %34, i32 0, i32 2
  %1158 = load i32, ptr %1157, align 4, !tbaa !14
  %1159 = shl i32 %1158, 1
  %1160 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %35, i32 0, i32 2
  %1161 = load i32, ptr %1160, align 4, !tbaa !14
  %1162 = lshr i32 %1161, 31
  %1163 = or i32 %1159, %1162
  %1164 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1165 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1164, i64 0, i64 2
  %1166 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1165, i32 0, i32 2
  store i32 %1163, ptr %1166, align 4, !tbaa !14
  %1167 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %34, i32 0, i32 3
  %1168 = load i32, ptr %1167, align 4, !tbaa !15
  %1169 = shl i32 %1168, 1
  %1170 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %35, i32 0, i32 3
  %1171 = load i32, ptr %1170, align 4, !tbaa !15
  %1172 = lshr i32 %1171, 31
  %1173 = or i32 %1169, %1172
  %1174 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1175 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1174, i64 0, i64 2
  %1176 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1175, i32 0, i32 3
  store i32 %1173, ptr %1176, align 4, !tbaa !15
  %1177 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %35, i32 0, i32 0
  %1178 = load i32, ptr %1177, align 4, !tbaa !17
  %1179 = shl i32 %1178, 1
  %1180 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %34, i32 0, i32 0
  %1181 = load i32, ptr %1180, align 4, !tbaa !17
  %1182 = lshr i32 %1181, 31
  %1183 = or i32 %1179, %1182
  %1184 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1185 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1184, i64 0, i64 3
  %1186 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1185, i32 0, i32 0
  store i32 %1183, ptr %1186, align 4, !tbaa !17
  %1187 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %35, i32 0, i32 1
  %1188 = load i32, ptr %1187, align 4, !tbaa !11
  %1189 = shl i32 %1188, 1
  %1190 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %34, i32 0, i32 1
  %1191 = load i32, ptr %1190, align 4, !tbaa !11
  %1192 = lshr i32 %1191, 31
  %1193 = or i32 %1189, %1192
  %1194 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1195 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1194, i64 0, i64 3
  %1196 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1195, i32 0, i32 1
  store i32 %1193, ptr %1196, align 4, !tbaa !11
  %1197 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %35, i32 0, i32 2
  %1198 = load i32, ptr %1197, align 4, !tbaa !14
  %1199 = shl i32 %1198, 1
  %1200 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %34, i32 0, i32 2
  %1201 = load i32, ptr %1200, align 4, !tbaa !14
  %1202 = lshr i32 %1201, 31
  %1203 = or i32 %1199, %1202
  %1204 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1205 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1204, i64 0, i64 3
  %1206 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1205, i32 0, i32 2
  store i32 %1203, ptr %1206, align 4, !tbaa !14
  %1207 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %35, i32 0, i32 3
  %1208 = load i32, ptr %1207, align 4, !tbaa !15
  %1209 = shl i32 %1208, 1
  %1210 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %34, i32 0, i32 3
  %1211 = load i32, ptr %1210, align 4, !tbaa !15
  %1212 = lshr i32 %1211, 31
  %1213 = or i32 %1209, %1212
  %1214 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1215 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1214, i64 0, i64 3
  %1216 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1215, i32 0, i32 3
  store i32 %1213, ptr %1216, align 4, !tbaa !15
  br label %1217

1217:                                             ; preds = %1136
  br label %1218

1218:                                             ; preds = %1217
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #5
  br label %1219

1219:                                             ; preds = %1218
  br label %1220

1220:                                             ; preds = %1219
  br label %1221

1221:                                             ; preds = %1220
  %1222 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 0
  %1223 = load i32, ptr %1222, align 16, !tbaa !21
  %1224 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1225 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1224, i64 0, i64 0
  %1226 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1225, i32 0, i32 0
  %1227 = load i32, ptr %1226, align 4, !tbaa !17
  %1228 = xor i32 %1227, %1223
  store i32 %1228, ptr %1226, align 4, !tbaa !17
  br label %1229

1229:                                             ; preds = %1221
  br label %1230

1230:                                             ; preds = %1229
  br label %1231

1231:                                             ; preds = %1230
  %1232 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 1
  %1233 = load i32, ptr %1232, align 4, !tbaa !21
  %1234 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1235 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1234, i64 0, i64 1
  %1236 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1235, i32 0, i32 0
  %1237 = load i32, ptr %1236, align 4, !tbaa !17
  %1238 = xor i32 %1237, %1233
  store i32 %1238, ptr %1236, align 4, !tbaa !17
  br label %1239

1239:                                             ; preds = %1231
  br label %1240

1240:                                             ; preds = %1239
  br label %1241

1241:                                             ; preds = %1240
  %1242 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 2
  %1243 = load i32, ptr %1242, align 8, !tbaa !21
  %1244 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1245 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1244, i64 0, i64 2
  %1246 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1245, i32 0, i32 0
  %1247 = load i32, ptr %1246, align 4, !tbaa !17
  %1248 = xor i32 %1247, %1243
  store i32 %1248, ptr %1246, align 4, !tbaa !17
  br label %1249

1249:                                             ; preds = %1241
  br label %1250

1250:                                             ; preds = %1249
  br label %1251

1251:                                             ; preds = %1250
  %1252 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 3
  %1253 = load i32, ptr %1252, align 4, !tbaa !21
  %1254 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1255 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1254, i64 0, i64 3
  %1256 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1255, i32 0, i32 0
  %1257 = load i32, ptr %1256, align 4, !tbaa !17
  %1258 = xor i32 %1257, %1253
  store i32 %1258, ptr %1256, align 4, !tbaa !17
  br label %1259

1259:                                             ; preds = %1251
  br label %1260

1260:                                             ; preds = %1259
  br label %1261

1261:                                             ; preds = %1260
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  %1262 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %1263 = load i32, ptr %1262, align 4, !tbaa !18
  %1264 = ashr i32 %1263, 31
  store i32 %1264, ptr %36, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  %1265 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %1266 = load i32, ptr %1265, align 4, !tbaa !18
  %1267 = shl i32 %1266, 1
  %1268 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %1269 = load i32, ptr %1268, align 4, !tbaa !20
  %1270 = lshr i32 %1269, 31
  %1271 = or i32 %1267, %1270
  store i32 %1271, ptr %37, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  %1272 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %1273 = load i32, ptr %1272, align 4, !tbaa !20
  %1274 = shl i32 %1273, 1
  %1275 = load i32, ptr %36, align 4, !tbaa !21
  %1276 = and i32 %1275, 27
  %1277 = xor i32 %1274, %1276
  store i32 %1277, ptr %38, align 4, !tbaa !21
  %1278 = load i32, ptr %37, align 4, !tbaa !21
  %1279 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %1280 = load i32, ptr %1279, align 4, !tbaa !18
  %1281 = xor i32 %1280, %1278
  store i32 %1281, ptr %1279, align 4, !tbaa !18
  %1282 = load i32, ptr %38, align 4, !tbaa !21
  %1283 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %1284 = load i32, ptr %1283, align 4, !tbaa !20
  %1285 = xor i32 %1284, %1282
  store i32 %1285, ptr %1283, align 4, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  br label %1286

1286:                                             ; preds = %1261
  br label %1287

1287:                                             ; preds = %1286
  %1288 = load ptr, ptr %10, align 8, !tbaa !5
  %1289 = getelementptr inbounds i8, ptr %1288, i64 16
  store ptr %1289, ptr %10, align 8, !tbaa !5
  br label %1839

1290:                                             ; preds = %827
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  %1291 = load i64, ptr %13, align 8, !tbaa !9
  %1292 = trunc i64 %1291 to i32
  store i32 %1292, ptr %39, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #5
  %1293 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1294 = load ptr, ptr %12, align 8, !tbaa !5
  %1295 = load i32, ptr %39, align 4, !tbaa !21
  %1296 = zext i32 %1295 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1293, ptr align 1 %1294, i64 %1296, i1 false)
  %1297 = load i32, ptr %39, align 4, !tbaa !21
  %1298 = zext i32 %1297 to i64
  %1299 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 %1298
  store i8 -128, ptr %1299, align 1, !tbaa !16
  %1300 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1301 = load i32, ptr %39, align 4, !tbaa !21
  %1302 = zext i32 %1301 to i64
  %1303 = getelementptr inbounds i8, ptr %1300, i64 %1302
  %1304 = getelementptr inbounds i8, ptr %1303, i64 1
  %1305 = load i32, ptr %39, align 4, !tbaa !21
  %1306 = sub i32 16, %1305
  %1307 = sub i32 %1306, 1
  %1308 = zext i32 %1307 to i64
  call void @llvm.memset.p0.i64(ptr align 1 %1304, i8 0, i64 %1308, i1 false)
  %1309 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1310 = load i8, ptr %1309, align 4, !tbaa !16
  %1311 = zext i8 %1310 to i32
  %1312 = shl i32 %1311, 24
  %1313 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 1
  %1314 = load i8, ptr %1313, align 1, !tbaa !16
  %1315 = zext i8 %1314 to i32
  %1316 = shl i32 %1315, 16
  %1317 = or i32 %1312, %1316
  %1318 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 2
  %1319 = load i8, ptr %1318, align 2, !tbaa !16
  %1320 = zext i8 %1319 to i32
  %1321 = shl i32 %1320, 8
  %1322 = or i32 %1317, %1321
  %1323 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 3
  %1324 = load i8, ptr %1323, align 1, !tbaa !16
  %1325 = zext i8 %1324 to i32
  %1326 = or i32 %1322, %1325
  %1327 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 0
  store i32 %1326, ptr %1327, align 16, !tbaa !21
  %1328 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1329 = getelementptr inbounds i8, ptr %1328, i64 4
  %1330 = getelementptr inbounds i8, ptr %1329, i64 0
  %1331 = load i8, ptr %1330, align 1, !tbaa !16
  %1332 = zext i8 %1331 to i32
  %1333 = shl i32 %1332, 24
  %1334 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1335 = getelementptr inbounds i8, ptr %1334, i64 4
  %1336 = getelementptr inbounds i8, ptr %1335, i64 1
  %1337 = load i8, ptr %1336, align 1, !tbaa !16
  %1338 = zext i8 %1337 to i32
  %1339 = shl i32 %1338, 16
  %1340 = or i32 %1333, %1339
  %1341 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1342 = getelementptr inbounds i8, ptr %1341, i64 4
  %1343 = getelementptr inbounds i8, ptr %1342, i64 2
  %1344 = load i8, ptr %1343, align 1, !tbaa !16
  %1345 = zext i8 %1344 to i32
  %1346 = shl i32 %1345, 8
  %1347 = or i32 %1340, %1346
  %1348 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1349 = getelementptr inbounds i8, ptr %1348, i64 4
  %1350 = getelementptr inbounds i8, ptr %1349, i64 3
  %1351 = load i8, ptr %1350, align 1, !tbaa !16
  %1352 = zext i8 %1351 to i32
  %1353 = or i32 %1347, %1352
  %1354 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 1
  store i32 %1353, ptr %1354, align 4, !tbaa !21
  %1355 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1356 = getelementptr inbounds i8, ptr %1355, i64 8
  %1357 = getelementptr inbounds i8, ptr %1356, i64 0
  %1358 = load i8, ptr %1357, align 1, !tbaa !16
  %1359 = zext i8 %1358 to i32
  %1360 = shl i32 %1359, 24
  %1361 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1362 = getelementptr inbounds i8, ptr %1361, i64 8
  %1363 = getelementptr inbounds i8, ptr %1362, i64 1
  %1364 = load i8, ptr %1363, align 1, !tbaa !16
  %1365 = zext i8 %1364 to i32
  %1366 = shl i32 %1365, 16
  %1367 = or i32 %1360, %1366
  %1368 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1369 = getelementptr inbounds i8, ptr %1368, i64 8
  %1370 = getelementptr inbounds i8, ptr %1369, i64 2
  %1371 = load i8, ptr %1370, align 1, !tbaa !16
  %1372 = zext i8 %1371 to i32
  %1373 = shl i32 %1372, 8
  %1374 = or i32 %1367, %1373
  %1375 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1376 = getelementptr inbounds i8, ptr %1375, i64 8
  %1377 = getelementptr inbounds i8, ptr %1376, i64 3
  %1378 = load i8, ptr %1377, align 1, !tbaa !16
  %1379 = zext i8 %1378 to i32
  %1380 = or i32 %1374, %1379
  %1381 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 2
  store i32 %1380, ptr %1381, align 8, !tbaa !21
  %1382 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1383 = getelementptr inbounds i8, ptr %1382, i64 12
  %1384 = getelementptr inbounds i8, ptr %1383, i64 0
  %1385 = load i8, ptr %1384, align 1, !tbaa !16
  %1386 = zext i8 %1385 to i32
  %1387 = shl i32 %1386, 24
  %1388 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1389 = getelementptr inbounds i8, ptr %1388, i64 12
  %1390 = getelementptr inbounds i8, ptr %1389, i64 1
  %1391 = load i8, ptr %1390, align 1, !tbaa !16
  %1392 = zext i8 %1391 to i32
  %1393 = shl i32 %1392, 16
  %1394 = or i32 %1387, %1393
  %1395 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1396 = getelementptr inbounds i8, ptr %1395, i64 12
  %1397 = getelementptr inbounds i8, ptr %1396, i64 2
  %1398 = load i8, ptr %1397, align 1, !tbaa !16
  %1399 = zext i8 %1398 to i32
  %1400 = shl i32 %1399, 8
  %1401 = or i32 %1394, %1400
  %1402 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1403 = getelementptr inbounds i8, ptr %1402, i64 12
  %1404 = getelementptr inbounds i8, ptr %1403, i64 3
  %1405 = load i8, ptr %1404, align 1, !tbaa !16
  %1406 = zext i8 %1405 to i32
  %1407 = or i32 %1401, %1406
  %1408 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 3
  store i32 %1407, ptr %1408, align 4, !tbaa !21
  br label %1409

1409:                                             ; preds = %1290
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  %1410 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 0
  %1411 = load i32, ptr %1410, align 4, !tbaa !16
  store i32 %1411, ptr %41, align 4, !tbaa !21
  %1412 = load i32, ptr %41, align 4, !tbaa !21
  %1413 = lshr i32 %1412, 24
  %1414 = load i32, ptr %41, align 4, !tbaa !21
  %1415 = shl i32 %1414, 24
  %1416 = or i32 %1413, %1415
  %1417 = load i32, ptr %41, align 4, !tbaa !21
  %1418 = shl i32 %1417, 8
  %1419 = and i32 %1418, 16711680
  %1420 = or i32 %1416, %1419
  %1421 = load i32, ptr %41, align 4, !tbaa !21
  %1422 = lshr i32 %1421, 8
  %1423 = and i32 %1422, 65280
  %1424 = or i32 %1420, %1423
  store i32 %1424, ptr %42, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  %1425 = load i32, ptr %42, align 4, !tbaa !21
  %1426 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 0
  store i32 %1425, ptr %1426, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  %1427 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 1
  %1428 = load i32, ptr %1427, align 4, !tbaa !16
  store i32 %1428, ptr %43, align 4, !tbaa !21
  %1429 = load i32, ptr %43, align 4, !tbaa !21
  %1430 = lshr i32 %1429, 24
  %1431 = load i32, ptr %43, align 4, !tbaa !21
  %1432 = shl i32 %1431, 24
  %1433 = or i32 %1430, %1432
  %1434 = load i32, ptr %43, align 4, !tbaa !21
  %1435 = shl i32 %1434, 8
  %1436 = and i32 %1435, 16711680
  %1437 = or i32 %1433, %1436
  %1438 = load i32, ptr %43, align 4, !tbaa !21
  %1439 = lshr i32 %1438, 8
  %1440 = and i32 %1439, 65280
  %1441 = or i32 %1437, %1440
  store i32 %1441, ptr %44, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  %1442 = load i32, ptr %44, align 4, !tbaa !21
  %1443 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 1
  store i32 %1442, ptr %1443, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  %1444 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 2
  %1445 = load i32, ptr %1444, align 4, !tbaa !16
  store i32 %1445, ptr %45, align 4, !tbaa !21
  %1446 = load i32, ptr %45, align 4, !tbaa !21
  %1447 = lshr i32 %1446, 24
  %1448 = load i32, ptr %45, align 4, !tbaa !21
  %1449 = shl i32 %1448, 24
  %1450 = or i32 %1447, %1449
  %1451 = load i32, ptr %45, align 4, !tbaa !21
  %1452 = shl i32 %1451, 8
  %1453 = and i32 %1452, 16711680
  %1454 = or i32 %1450, %1453
  %1455 = load i32, ptr %45, align 4, !tbaa !21
  %1456 = lshr i32 %1455, 8
  %1457 = and i32 %1456, 65280
  %1458 = or i32 %1454, %1457
  store i32 %1458, ptr %46, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  %1459 = load i32, ptr %46, align 4, !tbaa !21
  %1460 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 2
  store i32 %1459, ptr %1460, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  %1461 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 3
  %1462 = load i32, ptr %1461, align 4, !tbaa !16
  store i32 %1462, ptr %47, align 4, !tbaa !21
  %1463 = load i32, ptr %47, align 4, !tbaa !21
  %1464 = lshr i32 %1463, 24
  %1465 = load i32, ptr %47, align 4, !tbaa !21
  %1466 = shl i32 %1465, 24
  %1467 = or i32 %1464, %1466
  %1468 = load i32, ptr %47, align 4, !tbaa !21
  %1469 = shl i32 %1468, 8
  %1470 = and i32 %1469, 16711680
  %1471 = or i32 %1467, %1470
  %1472 = load i32, ptr %47, align 4, !tbaa !21
  %1473 = lshr i32 %1472, 8
  %1474 = and i32 %1473, 65280
  %1475 = or i32 %1471, %1474
  store i32 %1475, ptr %48, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  %1476 = load i32, ptr %48, align 4, !tbaa !21
  %1477 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 3
  store i32 %1476, ptr %1477, align 4, !tbaa !16
  br label %1478

1478:                                             ; preds = %1409
  br label %1479

1479:                                             ; preds = %1478
  %1480 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1481 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1480, i64 0, i64 0
  %1482 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1481, i32 0, i32 0
  %1483 = load i32, ptr %1482, align 4, !tbaa !17
  %1484 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1485 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1484, i64 0, i64 0
  %1486 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1485, i32 0, i32 1
  %1487 = load i32, ptr %1486, align 4, !tbaa !11
  %1488 = xor i32 %1483, %1487
  %1489 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1490 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1489, i64 0, i64 0
  %1491 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1490, i32 0, i32 2
  %1492 = load i32, ptr %1491, align 4, !tbaa !14
  %1493 = xor i32 %1488, %1492
  %1494 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1495 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1494, i64 0, i64 0
  %1496 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1495, i32 0, i32 3
  %1497 = load i32, ptr %1496, align 4, !tbaa !15
  %1498 = xor i32 %1493, %1497
  %1499 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 0
  %1500 = load i32, ptr %1499, align 4, !tbaa !16
  %1501 = xor i32 %1500, %1498
  store i32 %1501, ptr %1499, align 4, !tbaa !16
  %1502 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1503 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1502, i64 0, i64 1
  %1504 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1503, i32 0, i32 0
  %1505 = load i32, ptr %1504, align 4, !tbaa !17
  %1506 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1507 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1506, i64 0, i64 1
  %1508 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1507, i32 0, i32 1
  %1509 = load i32, ptr %1508, align 4, !tbaa !11
  %1510 = xor i32 %1505, %1509
  %1511 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1512 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1511, i64 0, i64 1
  %1513 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1512, i32 0, i32 2
  %1514 = load i32, ptr %1513, align 4, !tbaa !14
  %1515 = xor i32 %1510, %1514
  %1516 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1517 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1516, i64 0, i64 1
  %1518 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1517, i32 0, i32 3
  %1519 = load i32, ptr %1518, align 4, !tbaa !15
  %1520 = xor i32 %1515, %1519
  %1521 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 1
  %1522 = load i32, ptr %1521, align 4, !tbaa !16
  %1523 = xor i32 %1522, %1520
  store i32 %1523, ptr %1521, align 4, !tbaa !16
  %1524 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1525 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1524, i64 0, i64 2
  %1526 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1525, i32 0, i32 0
  %1527 = load i32, ptr %1526, align 4, !tbaa !17
  %1528 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1529 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1528, i64 0, i64 2
  %1530 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1529, i32 0, i32 1
  %1531 = load i32, ptr %1530, align 4, !tbaa !11
  %1532 = xor i32 %1527, %1531
  %1533 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1534 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1533, i64 0, i64 2
  %1535 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1534, i32 0, i32 2
  %1536 = load i32, ptr %1535, align 4, !tbaa !14
  %1537 = xor i32 %1532, %1536
  %1538 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1539 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1538, i64 0, i64 2
  %1540 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1539, i32 0, i32 3
  %1541 = load i32, ptr %1540, align 4, !tbaa !15
  %1542 = xor i32 %1537, %1541
  %1543 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 2
  %1544 = load i32, ptr %1543, align 4, !tbaa !16
  %1545 = xor i32 %1544, %1542
  store i32 %1545, ptr %1543, align 4, !tbaa !16
  %1546 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1547 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1546, i64 0, i64 3
  %1548 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1547, i32 0, i32 0
  %1549 = load i32, ptr %1548, align 4, !tbaa !17
  %1550 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1551 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1550, i64 0, i64 3
  %1552 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1551, i32 0, i32 1
  %1553 = load i32, ptr %1552, align 4, !tbaa !11
  %1554 = xor i32 %1549, %1553
  %1555 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1556 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1555, i64 0, i64 3
  %1557 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1556, i32 0, i32 2
  %1558 = load i32, ptr %1557, align 4, !tbaa !14
  %1559 = xor i32 %1554, %1558
  %1560 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1561 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1560, i64 0, i64 3
  %1562 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1561, i32 0, i32 3
  %1563 = load i32, ptr %1562, align 4, !tbaa !15
  %1564 = xor i32 %1559, %1563
  %1565 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 3
  %1566 = load i32, ptr %1565, align 4, !tbaa !16
  %1567 = xor i32 %1566, %1564
  store i32 %1567, ptr %1565, align 4, !tbaa !16
  br label %1568

1568:                                             ; preds = %1479
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #5
  %1569 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 0
  %1570 = load i32, ptr %1569, align 4, !tbaa !16
  store i32 %1570, ptr %49, align 4, !tbaa !21
  %1571 = load i32, ptr %49, align 4, !tbaa !21
  %1572 = lshr i32 %1571, 24
  %1573 = load i32, ptr %49, align 4, !tbaa !21
  %1574 = shl i32 %1573, 24
  %1575 = or i32 %1572, %1574
  %1576 = load i32, ptr %49, align 4, !tbaa !21
  %1577 = shl i32 %1576, 8
  %1578 = and i32 %1577, 16711680
  %1579 = or i32 %1575, %1578
  %1580 = load i32, ptr %49, align 4, !tbaa !21
  %1581 = lshr i32 %1580, 8
  %1582 = and i32 %1581, 65280
  %1583 = or i32 %1579, %1582
  store i32 %1583, ptr %50, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  %1584 = load i32, ptr %50, align 4, !tbaa !21
  %1585 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 0
  store i32 %1584, ptr %1585, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #5
  %1586 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 1
  %1587 = load i32, ptr %1586, align 4, !tbaa !16
  store i32 %1587, ptr %51, align 4, !tbaa !21
  %1588 = load i32, ptr %51, align 4, !tbaa !21
  %1589 = lshr i32 %1588, 24
  %1590 = load i32, ptr %51, align 4, !tbaa !21
  %1591 = shl i32 %1590, 24
  %1592 = or i32 %1589, %1591
  %1593 = load i32, ptr %51, align 4, !tbaa !21
  %1594 = shl i32 %1593, 8
  %1595 = and i32 %1594, 16711680
  %1596 = or i32 %1592, %1595
  %1597 = load i32, ptr %51, align 4, !tbaa !21
  %1598 = lshr i32 %1597, 8
  %1599 = and i32 %1598, 65280
  %1600 = or i32 %1596, %1599
  store i32 %1600, ptr %52, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  %1601 = load i32, ptr %52, align 4, !tbaa !21
  %1602 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 1
  store i32 %1601, ptr %1602, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #5
  %1603 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 2
  %1604 = load i32, ptr %1603, align 4, !tbaa !16
  store i32 %1604, ptr %53, align 4, !tbaa !21
  %1605 = load i32, ptr %53, align 4, !tbaa !21
  %1606 = lshr i32 %1605, 24
  %1607 = load i32, ptr %53, align 4, !tbaa !21
  %1608 = shl i32 %1607, 24
  %1609 = or i32 %1606, %1608
  %1610 = load i32, ptr %53, align 4, !tbaa !21
  %1611 = shl i32 %1610, 8
  %1612 = and i32 %1611, 16711680
  %1613 = or i32 %1609, %1612
  %1614 = load i32, ptr %53, align 4, !tbaa !21
  %1615 = lshr i32 %1614, 8
  %1616 = and i32 %1615, 65280
  %1617 = or i32 %1613, %1616
  store i32 %1617, ptr %54, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  %1618 = load i32, ptr %54, align 4, !tbaa !21
  %1619 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 2
  store i32 %1618, ptr %1619, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #5
  %1620 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 3
  %1621 = load i32, ptr %1620, align 4, !tbaa !16
  store i32 %1621, ptr %55, align 4, !tbaa !21
  %1622 = load i32, ptr %55, align 4, !tbaa !21
  %1623 = lshr i32 %1622, 24
  %1624 = load i32, ptr %55, align 4, !tbaa !21
  %1625 = shl i32 %1624, 24
  %1626 = or i32 %1623, %1625
  %1627 = load i32, ptr %55, align 4, !tbaa !21
  %1628 = shl i32 %1627, 8
  %1629 = and i32 %1628, 16711680
  %1630 = or i32 %1626, %1629
  %1631 = load i32, ptr %55, align 4, !tbaa !21
  %1632 = lshr i32 %1631, 8
  %1633 = and i32 %1632, 65280
  %1634 = or i32 %1630, %1633
  store i32 %1634, ptr %56, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  %1635 = load i32, ptr %56, align 4, !tbaa !21
  %1636 = getelementptr inbounds [4 x i32], ptr %40, i64 0, i64 3
  store i32 %1635, ptr %1636, align 4, !tbaa !16
  br label %1637

1637:                                             ; preds = %1568
  br label %1638

1638:                                             ; preds = %1637
  %1639 = load ptr, ptr %10, align 8, !tbaa !5
  %1640 = getelementptr inbounds [16 x i8], ptr %40, i64 0, i64 0
  %1641 = load i32, ptr %39, align 4, !tbaa !21
  %1642 = zext i32 %1641 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1639, ptr align 4 %1640, i64 %1642, i1 false)
  br label %1643

1643:                                             ; preds = %1638
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #5
  %1644 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1645 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1644, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %57, ptr align 4 %1645, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #5
  %1646 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1647 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1646, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %58, ptr align 4 %1647, i64 16, i1 false), !tbaa.struct !22
  %1648 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1649 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1648, i64 0, i64 0
  %1650 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1651 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1650, i64 0, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1649, ptr align 4 %1651, i64 16, i1 false), !tbaa.struct !22
  %1652 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1653 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1652, i64 0, i64 1
  %1654 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1655 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1654, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1653, ptr align 4 %1655, i64 16, i1 false), !tbaa.struct !22
  br label %1656

1656:                                             ; preds = %1643
  %1657 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %57, i32 0, i32 0
  %1658 = load i32, ptr %1657, align 4, !tbaa !17
  %1659 = shl i32 %1658, 1
  %1660 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %58, i32 0, i32 0
  %1661 = load i32, ptr %1660, align 4, !tbaa !17
  %1662 = lshr i32 %1661, 31
  %1663 = or i32 %1659, %1662
  %1664 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1665 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1664, i64 0, i64 2
  %1666 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1665, i32 0, i32 0
  store i32 %1663, ptr %1666, align 4, !tbaa !17
  %1667 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %57, i32 0, i32 1
  %1668 = load i32, ptr %1667, align 4, !tbaa !11
  %1669 = shl i32 %1668, 1
  %1670 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %58, i32 0, i32 1
  %1671 = load i32, ptr %1670, align 4, !tbaa !11
  %1672 = lshr i32 %1671, 31
  %1673 = or i32 %1669, %1672
  %1674 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1675 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1674, i64 0, i64 2
  %1676 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1675, i32 0, i32 1
  store i32 %1673, ptr %1676, align 4, !tbaa !11
  %1677 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %57, i32 0, i32 2
  %1678 = load i32, ptr %1677, align 4, !tbaa !14
  %1679 = shl i32 %1678, 1
  %1680 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %58, i32 0, i32 2
  %1681 = load i32, ptr %1680, align 4, !tbaa !14
  %1682 = lshr i32 %1681, 31
  %1683 = or i32 %1679, %1682
  %1684 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1685 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1684, i64 0, i64 2
  %1686 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1685, i32 0, i32 2
  store i32 %1683, ptr %1686, align 4, !tbaa !14
  %1687 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %57, i32 0, i32 3
  %1688 = load i32, ptr %1687, align 4, !tbaa !15
  %1689 = shl i32 %1688, 1
  %1690 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %58, i32 0, i32 3
  %1691 = load i32, ptr %1690, align 4, !tbaa !15
  %1692 = lshr i32 %1691, 31
  %1693 = or i32 %1689, %1692
  %1694 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1695 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1694, i64 0, i64 2
  %1696 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1695, i32 0, i32 3
  store i32 %1693, ptr %1696, align 4, !tbaa !15
  %1697 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %58, i32 0, i32 0
  %1698 = load i32, ptr %1697, align 4, !tbaa !17
  %1699 = shl i32 %1698, 1
  %1700 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %57, i32 0, i32 0
  %1701 = load i32, ptr %1700, align 4, !tbaa !17
  %1702 = lshr i32 %1701, 31
  %1703 = or i32 %1699, %1702
  %1704 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1705 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1704, i64 0, i64 3
  %1706 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1705, i32 0, i32 0
  store i32 %1703, ptr %1706, align 4, !tbaa !17
  %1707 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %58, i32 0, i32 1
  %1708 = load i32, ptr %1707, align 4, !tbaa !11
  %1709 = shl i32 %1708, 1
  %1710 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %57, i32 0, i32 1
  %1711 = load i32, ptr %1710, align 4, !tbaa !11
  %1712 = lshr i32 %1711, 31
  %1713 = or i32 %1709, %1712
  %1714 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1715 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1714, i64 0, i64 3
  %1716 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1715, i32 0, i32 1
  store i32 %1713, ptr %1716, align 4, !tbaa !11
  %1717 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %58, i32 0, i32 2
  %1718 = load i32, ptr %1717, align 4, !tbaa !14
  %1719 = shl i32 %1718, 1
  %1720 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %57, i32 0, i32 2
  %1721 = load i32, ptr %1720, align 4, !tbaa !14
  %1722 = lshr i32 %1721, 31
  %1723 = or i32 %1719, %1722
  %1724 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1725 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1724, i64 0, i64 3
  %1726 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1725, i32 0, i32 2
  store i32 %1723, ptr %1726, align 4, !tbaa !14
  %1727 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %58, i32 0, i32 3
  %1728 = load i32, ptr %1727, align 4, !tbaa !15
  %1729 = shl i32 %1728, 1
  %1730 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %57, i32 0, i32 3
  %1731 = load i32, ptr %1730, align 4, !tbaa !15
  %1732 = lshr i32 %1731, 31
  %1733 = or i32 %1729, %1732
  %1734 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1735 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1734, i64 0, i64 3
  %1736 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1735, i32 0, i32 3
  store i32 %1733, ptr %1736, align 4, !tbaa !15
  br label %1737

1737:                                             ; preds = %1656
  br label %1738

1738:                                             ; preds = %1737
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #5
  br label %1739

1739:                                             ; preds = %1738
  br label %1740

1740:                                             ; preds = %1739
  br label %1741

1741:                                             ; preds = %1740
  %1742 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 0
  %1743 = load i32, ptr %1742, align 16, !tbaa !21
  %1744 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1745 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1744, i64 0, i64 0
  %1746 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1745, i32 0, i32 0
  %1747 = load i32, ptr %1746, align 4, !tbaa !17
  %1748 = xor i32 %1747, %1743
  store i32 %1748, ptr %1746, align 4, !tbaa !17
  br label %1749

1749:                                             ; preds = %1741
  br label %1750

1750:                                             ; preds = %1749
  br label %1751

1751:                                             ; preds = %1750
  %1752 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 1
  %1753 = load i32, ptr %1752, align 4, !tbaa !21
  %1754 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1755 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1754, i64 0, i64 1
  %1756 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1755, i32 0, i32 0
  %1757 = load i32, ptr %1756, align 4, !tbaa !17
  %1758 = xor i32 %1757, %1753
  store i32 %1758, ptr %1756, align 4, !tbaa !17
  br label %1759

1759:                                             ; preds = %1751
  br label %1760

1760:                                             ; preds = %1759
  br label %1761

1761:                                             ; preds = %1760
  %1762 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 2
  %1763 = load i32, ptr %1762, align 8, !tbaa !21
  %1764 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1765 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1764, i64 0, i64 2
  %1766 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1765, i32 0, i32 0
  %1767 = load i32, ptr %1766, align 4, !tbaa !17
  %1768 = xor i32 %1767, %1763
  store i32 %1768, ptr %1766, align 4, !tbaa !17
  br label %1769

1769:                                             ; preds = %1761
  br label %1770

1770:                                             ; preds = %1769
  br label %1771

1771:                                             ; preds = %1770
  %1772 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 3
  %1773 = load i32, ptr %1772, align 4, !tbaa !21
  %1774 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1775 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1774, i64 0, i64 3
  %1776 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1775, i32 0, i32 0
  %1777 = load i32, ptr %1776, align 4, !tbaa !17
  %1778 = xor i32 %1777, %1773
  store i32 %1778, ptr %1776, align 4, !tbaa !17
  br label %1779

1779:                                             ; preds = %1771
  br label %1780

1780:                                             ; preds = %1779
  br label %1781

1781:                                             ; preds = %1780
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #5
  %1782 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %1783 = load i32, ptr %1782, align 4, !tbaa !18
  %1784 = ashr i32 %1783, 31
  store i32 %1784, ptr %59, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #5
  %1785 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %1786 = load i32, ptr %1785, align 4, !tbaa !18
  %1787 = shl i32 %1786, 1
  %1788 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %1789 = load i32, ptr %1788, align 4, !tbaa !20
  %1790 = lshr i32 %1789, 31
  %1791 = or i32 %1787, %1790
  store i32 %1791, ptr %60, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #5
  %1792 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %1793 = load i32, ptr %1792, align 4, !tbaa !20
  %1794 = shl i32 %1793, 1
  %1795 = load i32, ptr %59, align 4, !tbaa !21
  %1796 = and i32 %1795, 27
  %1797 = xor i32 %1794, %1796
  store i32 %1797, ptr %61, align 4, !tbaa !21
  %1798 = load i32, ptr %60, align 4, !tbaa !21
  %1799 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %1800 = load i32, ptr %1799, align 4, !tbaa !18
  %1801 = xor i32 %1800, %1798
  store i32 %1801, ptr %1799, align 4, !tbaa !18
  %1802 = load i32, ptr %61, align 4, !tbaa !21
  %1803 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %1804 = load i32, ptr %1803, align 4, !tbaa !20
  %1805 = xor i32 %1804, %1802
  store i32 %1805, ptr %1803, align 4, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  br label %1806

1806:                                             ; preds = %1781
  br label %1807

1807:                                             ; preds = %1806
  br label %1808

1808:                                             ; preds = %1807
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #5
  %1809 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %1810 = load i32, ptr %1809, align 4, !tbaa !18
  %1811 = ashr i32 %1810, 31
  store i32 %1811, ptr %62, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #5
  %1812 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %1813 = load i32, ptr %1812, align 4, !tbaa !18
  %1814 = shl i32 %1813, 1
  %1815 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %1816 = load i32, ptr %1815, align 4, !tbaa !20
  %1817 = lshr i32 %1816, 31
  %1818 = or i32 %1814, %1817
  store i32 %1818, ptr %63, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #5
  %1819 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %1820 = load i32, ptr %1819, align 4, !tbaa !20
  %1821 = shl i32 %1820, 1
  %1822 = load i32, ptr %62, align 4, !tbaa !21
  %1823 = and i32 %1822, 27
  %1824 = xor i32 %1821, %1823
  store i32 %1824, ptr %64, align 4, !tbaa !21
  %1825 = load i32, ptr %63, align 4, !tbaa !21
  %1826 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %1827 = load i32, ptr %1826, align 4, !tbaa !18
  %1828 = xor i32 %1827, %1825
  store i32 %1828, ptr %1826, align 4, !tbaa !18
  %1829 = load i32, ptr %64, align 4, !tbaa !21
  %1830 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %1831 = load i32, ptr %1830, align 4, !tbaa !20
  %1832 = xor i32 %1831, %1829
  store i32 %1832, ptr %1830, align 4, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  br label %1833

1833:                                             ; preds = %1808
  br label %1834

1834:                                             ; preds = %1833
  %1835 = load i32, ptr %39, align 4, !tbaa !21
  %1836 = load ptr, ptr %10, align 8, !tbaa !5
  %1837 = zext i32 %1835 to i64
  %1838 = getelementptr inbounds i8, ptr %1836, i64 %1837
  store ptr %1838, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  br label %1839

1839:                                             ; preds = %1834, %1287
  br label %1840

1840:                                             ; preds = %1839
  %1841 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 0
  %1842 = load i32, ptr %1841, align 4, !tbaa !18
  %1843 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1844 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1843, i64 0, i64 0
  %1845 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1844, i32 0, i32 0
  %1846 = load i32, ptr %1845, align 4, !tbaa !17
  %1847 = xor i32 %1846, %1842
  store i32 %1847, ptr %1845, align 4, !tbaa !17
  br label %1848

1848:                                             ; preds = %1840
  br label %1849

1849:                                             ; preds = %1848
  br label %1850

1850:                                             ; preds = %1849
  %1851 = getelementptr inbounds %struct.gift_cofb_masked_l_t, ptr %21, i32 0, i32 1
  %1852 = load i32, ptr %1851, align 4, !tbaa !20
  %1853 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1854 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1853, i64 0, i64 1
  %1855 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1854, i32 0, i32 0
  %1856 = load i32, ptr %1855, align 4, !tbaa !17
  %1857 = xor i32 %1856, %1852
  store i32 %1857, ptr %1855, align 4, !tbaa !17
  br label %1858

1858:                                             ; preds = %1850
  br label %1859

1859:                                             ; preds = %1858
  %1860 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1861 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1860, i64 0, i64 0
  %1862 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1863 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1862, i64 0, i64 0
  call void @gift128b_encrypt_preloaded_masked(ptr noundef %19, ptr noundef %1861, ptr noundef %1863)
  br label %1864

1864:                                             ; preds = %1859, %305
  br label %1865

1865:                                             ; preds = %1864
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #5
  %1866 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1867 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1866, i64 0, i64 0
  %1868 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1867, i32 0, i32 0
  %1869 = load i32, ptr %1868, align 4, !tbaa !17
  %1870 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1871 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1870, i64 0, i64 0
  %1872 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1871, i32 0, i32 1
  %1873 = load i32, ptr %1872, align 4, !tbaa !11
  %1874 = xor i32 %1869, %1873
  %1875 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1876 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1875, i64 0, i64 0
  %1877 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1876, i32 0, i32 2
  %1878 = load i32, ptr %1877, align 4, !tbaa !14
  %1879 = xor i32 %1874, %1878
  %1880 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1881 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1880, i64 0, i64 0
  %1882 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1881, i32 0, i32 3
  %1883 = load i32, ptr %1882, align 4, !tbaa !15
  %1884 = xor i32 %1879, %1883
  store i32 %1884, ptr %65, align 4, !tbaa !21
  %1885 = load i32, ptr %65, align 4, !tbaa !21
  %1886 = lshr i32 %1885, 24
  %1887 = trunc i32 %1886 to i8
  %1888 = load ptr, ptr %10, align 8, !tbaa !5
  %1889 = getelementptr inbounds i8, ptr %1888, i64 0
  store i8 %1887, ptr %1889, align 1, !tbaa !16
  %1890 = load i32, ptr %65, align 4, !tbaa !21
  %1891 = lshr i32 %1890, 16
  %1892 = trunc i32 %1891 to i8
  %1893 = load ptr, ptr %10, align 8, !tbaa !5
  %1894 = getelementptr inbounds i8, ptr %1893, i64 1
  store i8 %1892, ptr %1894, align 1, !tbaa !16
  %1895 = load i32, ptr %65, align 4, !tbaa !21
  %1896 = lshr i32 %1895, 8
  %1897 = trunc i32 %1896 to i8
  %1898 = load ptr, ptr %10, align 8, !tbaa !5
  %1899 = getelementptr inbounds i8, ptr %1898, i64 2
  store i8 %1897, ptr %1899, align 1, !tbaa !16
  %1900 = load i32, ptr %65, align 4, !tbaa !21
  %1901 = trunc i32 %1900 to i8
  %1902 = load ptr, ptr %10, align 8, !tbaa !5
  %1903 = getelementptr inbounds i8, ptr %1902, i64 3
  store i8 %1901, ptr %1903, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #5
  br label %1904

1904:                                             ; preds = %1865
  br label %1905

1905:                                             ; preds = %1904
  br label %1906

1906:                                             ; preds = %1905
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #5
  %1907 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1908 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1907, i64 0, i64 1
  %1909 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1908, i32 0, i32 0
  %1910 = load i32, ptr %1909, align 4, !tbaa !17
  %1911 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1912 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1911, i64 0, i64 1
  %1913 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1912, i32 0, i32 1
  %1914 = load i32, ptr %1913, align 4, !tbaa !11
  %1915 = xor i32 %1910, %1914
  %1916 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1917 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1916, i64 0, i64 1
  %1918 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1917, i32 0, i32 2
  %1919 = load i32, ptr %1918, align 4, !tbaa !14
  %1920 = xor i32 %1915, %1919
  %1921 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1922 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1921, i64 0, i64 1
  %1923 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1922, i32 0, i32 3
  %1924 = load i32, ptr %1923, align 4, !tbaa !15
  %1925 = xor i32 %1920, %1924
  store i32 %1925, ptr %66, align 4, !tbaa !21
  %1926 = load i32, ptr %66, align 4, !tbaa !21
  %1927 = lshr i32 %1926, 24
  %1928 = trunc i32 %1927 to i8
  %1929 = load ptr, ptr %10, align 8, !tbaa !5
  %1930 = getelementptr inbounds i8, ptr %1929, i64 4
  %1931 = getelementptr inbounds i8, ptr %1930, i64 0
  store i8 %1928, ptr %1931, align 1, !tbaa !16
  %1932 = load i32, ptr %66, align 4, !tbaa !21
  %1933 = lshr i32 %1932, 16
  %1934 = trunc i32 %1933 to i8
  %1935 = load ptr, ptr %10, align 8, !tbaa !5
  %1936 = getelementptr inbounds i8, ptr %1935, i64 4
  %1937 = getelementptr inbounds i8, ptr %1936, i64 1
  store i8 %1934, ptr %1937, align 1, !tbaa !16
  %1938 = load i32, ptr %66, align 4, !tbaa !21
  %1939 = lshr i32 %1938, 8
  %1940 = trunc i32 %1939 to i8
  %1941 = load ptr, ptr %10, align 8, !tbaa !5
  %1942 = getelementptr inbounds i8, ptr %1941, i64 4
  %1943 = getelementptr inbounds i8, ptr %1942, i64 2
  store i8 %1940, ptr %1943, align 1, !tbaa !16
  %1944 = load i32, ptr %66, align 4, !tbaa !21
  %1945 = trunc i32 %1944 to i8
  %1946 = load ptr, ptr %10, align 8, !tbaa !5
  %1947 = getelementptr inbounds i8, ptr %1946, i64 4
  %1948 = getelementptr inbounds i8, ptr %1947, i64 3
  store i8 %1945, ptr %1948, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #5
  br label %1949

1949:                                             ; preds = %1906
  br label %1950

1950:                                             ; preds = %1949
  br label %1951

1951:                                             ; preds = %1950
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #5
  %1952 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1953 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1952, i64 0, i64 2
  %1954 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1953, i32 0, i32 0
  %1955 = load i32, ptr %1954, align 4, !tbaa !17
  %1956 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1957 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1956, i64 0, i64 2
  %1958 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1957, i32 0, i32 1
  %1959 = load i32, ptr %1958, align 4, !tbaa !11
  %1960 = xor i32 %1955, %1959
  %1961 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1962 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1961, i64 0, i64 2
  %1963 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1962, i32 0, i32 2
  %1964 = load i32, ptr %1963, align 4, !tbaa !14
  %1965 = xor i32 %1960, %1964
  %1966 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1967 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1966, i64 0, i64 2
  %1968 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1967, i32 0, i32 3
  %1969 = load i32, ptr %1968, align 4, !tbaa !15
  %1970 = xor i32 %1965, %1969
  store i32 %1970, ptr %67, align 4, !tbaa !21
  %1971 = load i32, ptr %67, align 4, !tbaa !21
  %1972 = lshr i32 %1971, 24
  %1973 = trunc i32 %1972 to i8
  %1974 = load ptr, ptr %10, align 8, !tbaa !5
  %1975 = getelementptr inbounds i8, ptr %1974, i64 8
  %1976 = getelementptr inbounds i8, ptr %1975, i64 0
  store i8 %1973, ptr %1976, align 1, !tbaa !16
  %1977 = load i32, ptr %67, align 4, !tbaa !21
  %1978 = lshr i32 %1977, 16
  %1979 = trunc i32 %1978 to i8
  %1980 = load ptr, ptr %10, align 8, !tbaa !5
  %1981 = getelementptr inbounds i8, ptr %1980, i64 8
  %1982 = getelementptr inbounds i8, ptr %1981, i64 1
  store i8 %1979, ptr %1982, align 1, !tbaa !16
  %1983 = load i32, ptr %67, align 4, !tbaa !21
  %1984 = lshr i32 %1983, 8
  %1985 = trunc i32 %1984 to i8
  %1986 = load ptr, ptr %10, align 8, !tbaa !5
  %1987 = getelementptr inbounds i8, ptr %1986, i64 8
  %1988 = getelementptr inbounds i8, ptr %1987, i64 2
  store i8 %1985, ptr %1988, align 1, !tbaa !16
  %1989 = load i32, ptr %67, align 4, !tbaa !21
  %1990 = trunc i32 %1989 to i8
  %1991 = load ptr, ptr %10, align 8, !tbaa !5
  %1992 = getelementptr inbounds i8, ptr %1991, i64 8
  %1993 = getelementptr inbounds i8, ptr %1992, i64 3
  store i8 %1990, ptr %1993, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #5
  br label %1994

1994:                                             ; preds = %1951
  br label %1995

1995:                                             ; preds = %1994
  br label %1996

1996:                                             ; preds = %1995
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #5
  %1997 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %1998 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %1997, i64 0, i64 3
  %1999 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %1998, i32 0, i32 0
  %2000 = load i32, ptr %1999, align 4, !tbaa !17
  %2001 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %2002 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %2001, i64 0, i64 3
  %2003 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %2002, i32 0, i32 1
  %2004 = load i32, ptr %2003, align 4, !tbaa !11
  %2005 = xor i32 %2000, %2004
  %2006 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %2007 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %2006, i64 0, i64 3
  %2008 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %2007, i32 0, i32 2
  %2009 = load i32, ptr %2008, align 4, !tbaa !14
  %2010 = xor i32 %2005, %2009
  %2011 = getelementptr inbounds %struct.gift_cofb_masked_block_t, ptr %20, i32 0, i32 0
  %2012 = getelementptr inbounds [4 x %struct.mask_x4_uint32_t], ptr %2011, i64 0, i64 3
  %2013 = getelementptr inbounds %struct.mask_x4_uint32_t, ptr %2012, i32 0, i32 3
  %2014 = load i32, ptr %2013, align 4, !tbaa !15
  %2015 = xor i32 %2010, %2014
  store i32 %2015, ptr %68, align 4, !tbaa !21
  %2016 = load i32, ptr %68, align 4, !tbaa !21
  %2017 = lshr i32 %2016, 24
  %2018 = trunc i32 %2017 to i8
  %2019 = load ptr, ptr %10, align 8, !tbaa !5
  %2020 = getelementptr inbounds i8, ptr %2019, i64 12
  %2021 = getelementptr inbounds i8, ptr %2020, i64 0
  store i8 %2018, ptr %2021, align 1, !tbaa !16
  %2022 = load i32, ptr %68, align 4, !tbaa !21
  %2023 = lshr i32 %2022, 16
  %2024 = trunc i32 %2023 to i8
  %2025 = load ptr, ptr %10, align 8, !tbaa !5
  %2026 = getelementptr inbounds i8, ptr %2025, i64 12
  %2027 = getelementptr inbounds i8, ptr %2026, i64 1
  store i8 %2024, ptr %2027, align 1, !tbaa !16
  %2028 = load i32, ptr %68, align 4, !tbaa !21
  %2029 = lshr i32 %2028, 8
  %2030 = trunc i32 %2029 to i8
  %2031 = load ptr, ptr %10, align 8, !tbaa !5
  %2032 = getelementptr inbounds i8, ptr %2031, i64 12
  %2033 = getelementptr inbounds i8, ptr %2032, i64 2
  store i8 %2030, ptr %2033, align 1, !tbaa !16
  %2034 = load i32, ptr %68, align 4, !tbaa !21
  %2035 = trunc i32 %2034 to i8
  %2036 = load ptr, ptr %10, align 8, !tbaa !5
  %2037 = getelementptr inbounds i8, ptr %2036, i64 12
  %2038 = getelementptr inbounds i8, ptr %2037, i64 3
  store i8 %2035, ptr %2038, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #5
  br label %2039

2039:                                             ; preds = %1996
  br label %2040

2040:                                             ; preds = %2039
  call void @aead_random_finish()
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 1280, ptr %19) #5
  ret i32 0
}

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

declare void @gift128b_init_masked(ptr noundef, ptr noundef) #2

declare i32 @aead_random_generate_32() #2

declare void @gift128b_encrypt_preloaded_masked(ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @gift_cofb_masked_assoc_data(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef) #0

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

declare void @aead_random_finish() #2

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long long", !7, i64 0}
!11 = !{!12, !13, i64 4}
!12 = !{!"", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12}
!13 = !{!"int", !7, i64 0}
!14 = !{!12, !13, i64 8}
!15 = !{!12, !13, i64 12}
!16 = !{!7, !7, i64 0}
!17 = !{!12, !13, i64 0}
!18 = !{!19, !13, i64 0}
!19 = !{!"", !13, i64 0, !13, i64 4}
!20 = !{!19, !13, i64 4}
!21 = !{!13, !13, i64 0}
!22 = !{i64 0, i64 4, !21, i64 4, i64 4, !21, i64 8, i64 4, !21, i64 12, i64 4, !21}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}


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

%struct.gift128b_masked_key_schedule_t = type { [80 x %struct.mask_x4_uint32_t] }
%struct.mask_x4_uint32_t = type { i32, i32, i32, i32 }
%struct.gift_cofb_masked_block_t = type { [4 x %struct.mask_x4_uint32_t] }
%struct.gift_cofb_masked_l_t = type { i32, i32 }
%union.anon = type { [4 x i32] }

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @gift_cofb_masked_aead_encrypt(ptr noundef writeonly %0, ptr nocapture noundef writeonly %1, ptr nocapture noundef readonly %2, i64 noundef %3, ptr noundef %4, i64 noundef %5, ptr nocapture noundef readnone %6, ptr nocapture noundef readonly %7, ptr noundef %8) local_unnamed_addr #0 {
  %10 = alloca %struct.gift128b_masked_key_schedule_t, align 4
  %11 = alloca %struct.gift_cofb_masked_block_t, align 4
  %12 = alloca %struct.gift_cofb_masked_l_t, align 4
  %13 = alloca %union.anon, align 4
  call void @llvm.lifetime.start.p0(i64 1280, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  %14 = add i64 %3, 16
  store i64 %14, ptr %1, align 8, !tbaa !5
  call void @gift128b_init_masked(ptr noundef nonnull %10, ptr noundef %8) #6
  %15 = call i32 @aead_random_generate_32() #6
  %16 = getelementptr inbounds i8, ptr %11, i64 4
  store i32 %15, ptr %16, align 4, !tbaa !9
  %17 = call i32 @aead_random_generate_32() #6
  %18 = getelementptr inbounds i8, ptr %11, i64 8
  store i32 %17, ptr %18, align 4, !tbaa !12
  %19 = call i32 @aead_random_generate_32() #6
  %20 = getelementptr inbounds i8, ptr %11, i64 12
  store i32 %19, ptr %20, align 4, !tbaa !13
  %21 = load i8, ptr %7, align 1, !tbaa !14
  %22 = zext i8 %21 to i32
  %23 = shl nuw i32 %22, 24
  %24 = getelementptr inbounds i8, ptr %7, i64 1
  %25 = load i8, ptr %24, align 1, !tbaa !14
  %26 = zext i8 %25 to i32
  %27 = shl nuw nsw i32 %26, 16
  %28 = or disjoint i32 %27, %23
  %29 = getelementptr inbounds i8, ptr %7, i64 2
  %30 = load i8, ptr %29, align 1, !tbaa !14
  %31 = zext i8 %30 to i32
  %32 = shl nuw nsw i32 %31, 8
  %33 = or disjoint i32 %28, %32
  %34 = getelementptr inbounds i8, ptr %7, i64 3
  %35 = load i8, ptr %34, align 1, !tbaa !14
  %36 = zext i8 %35 to i32
  %37 = or disjoint i32 %33, %36
  %38 = load i32, ptr %16, align 4, !tbaa !9
  %39 = load i32, ptr %18, align 4, !tbaa !12
  %40 = xor i32 %38, %39
  %41 = xor i32 %40, %37
  %42 = xor i32 %41, %19
  store i32 %42, ptr %11, align 4, !tbaa !15
  %43 = call i32 @aead_random_generate_32() #6
  %44 = getelementptr inbounds i8, ptr %11, i64 16
  %45 = getelementptr inbounds i8, ptr %11, i64 20
  store i32 %43, ptr %45, align 4, !tbaa !9
  %46 = call i32 @aead_random_generate_32() #6
  %47 = getelementptr inbounds i8, ptr %11, i64 24
  store i32 %46, ptr %47, align 4, !tbaa !12
  %48 = call i32 @aead_random_generate_32() #6
  %49 = getelementptr inbounds i8, ptr %11, i64 28
  store i32 %48, ptr %49, align 4, !tbaa !13
  %50 = getelementptr inbounds i8, ptr %7, i64 4
  %51 = load i8, ptr %50, align 1, !tbaa !14
  %52 = zext i8 %51 to i32
  %53 = shl nuw i32 %52, 24
  %54 = getelementptr inbounds i8, ptr %7, i64 5
  %55 = load i8, ptr %54, align 1, !tbaa !14
  %56 = zext i8 %55 to i32
  %57 = shl nuw nsw i32 %56, 16
  %58 = or disjoint i32 %57, %53
  %59 = getelementptr inbounds i8, ptr %7, i64 6
  %60 = load i8, ptr %59, align 1, !tbaa !14
  %61 = zext i8 %60 to i32
  %62 = shl nuw nsw i32 %61, 8
  %63 = or disjoint i32 %58, %62
  %64 = getelementptr inbounds i8, ptr %7, i64 7
  %65 = load i8, ptr %64, align 1, !tbaa !14
  %66 = zext i8 %65 to i32
  %67 = or disjoint i32 %63, %66
  %68 = load i32, ptr %45, align 4, !tbaa !9
  %69 = load i32, ptr %47, align 4, !tbaa !12
  %70 = xor i32 %68, %69
  %71 = xor i32 %70, %67
  %72 = xor i32 %71, %48
  store i32 %72, ptr %44, align 4, !tbaa !15
  %73 = call i32 @aead_random_generate_32() #6
  %74 = getelementptr inbounds i8, ptr %11, i64 32
  %75 = getelementptr inbounds i8, ptr %11, i64 36
  store i32 %73, ptr %75, align 4, !tbaa !9
  %76 = call i32 @aead_random_generate_32() #6
  %77 = getelementptr inbounds i8, ptr %11, i64 40
  store i32 %76, ptr %77, align 4, !tbaa !12
  %78 = call i32 @aead_random_generate_32() #6
  %79 = getelementptr inbounds i8, ptr %11, i64 44
  store i32 %78, ptr %79, align 4, !tbaa !13
  %80 = getelementptr inbounds i8, ptr %7, i64 8
  %81 = load i8, ptr %80, align 1, !tbaa !14
  %82 = zext i8 %81 to i32
  %83 = shl nuw i32 %82, 24
  %84 = getelementptr inbounds i8, ptr %7, i64 9
  %85 = load i8, ptr %84, align 1, !tbaa !14
  %86 = zext i8 %85 to i32
  %87 = shl nuw nsw i32 %86, 16
  %88 = or disjoint i32 %87, %83
  %89 = getelementptr inbounds i8, ptr %7, i64 10
  %90 = load i8, ptr %89, align 1, !tbaa !14
  %91 = zext i8 %90 to i32
  %92 = shl nuw nsw i32 %91, 8
  %93 = or disjoint i32 %88, %92
  %94 = getelementptr inbounds i8, ptr %7, i64 11
  %95 = load i8, ptr %94, align 1, !tbaa !14
  %96 = zext i8 %95 to i32
  %97 = or disjoint i32 %93, %96
  %98 = load i32, ptr %75, align 4, !tbaa !9
  %99 = load i32, ptr %77, align 4, !tbaa !12
  %100 = xor i32 %98, %99
  %101 = xor i32 %100, %97
  %102 = xor i32 %101, %78
  store i32 %102, ptr %74, align 4, !tbaa !15
  %103 = call i32 @aead_random_generate_32() #6
  %104 = getelementptr inbounds i8, ptr %11, i64 48
  %105 = getelementptr inbounds i8, ptr %11, i64 52
  store i32 %103, ptr %105, align 4, !tbaa !9
  %106 = call i32 @aead_random_generate_32() #6
  %107 = getelementptr inbounds i8, ptr %11, i64 56
  store i32 %106, ptr %107, align 4, !tbaa !12
  %108 = call i32 @aead_random_generate_32() #6
  %109 = getelementptr inbounds i8, ptr %11, i64 60
  store i32 %108, ptr %109, align 4, !tbaa !13
  %110 = getelementptr inbounds i8, ptr %7, i64 12
  %111 = load i8, ptr %110, align 1, !tbaa !14
  %112 = zext i8 %111 to i32
  %113 = shl nuw i32 %112, 24
  %114 = getelementptr inbounds i8, ptr %7, i64 13
  %115 = load i8, ptr %114, align 1, !tbaa !14
  %116 = zext i8 %115 to i32
  %117 = shl nuw nsw i32 %116, 16
  %118 = or disjoint i32 %117, %113
  %119 = getelementptr inbounds i8, ptr %7, i64 14
  %120 = load i8, ptr %119, align 1, !tbaa !14
  %121 = zext i8 %120 to i32
  %122 = shl nuw nsw i32 %121, 8
  %123 = or disjoint i32 %118, %122
  %124 = getelementptr inbounds i8, ptr %7, i64 15
  %125 = load i8, ptr %124, align 1, !tbaa !14
  %126 = zext i8 %125 to i32
  %127 = or disjoint i32 %123, %126
  %128 = load i32, ptr %105, align 4, !tbaa !9
  %129 = load i32, ptr %107, align 4, !tbaa !12
  %130 = xor i32 %128, %129
  %131 = xor i32 %130, %127
  %132 = xor i32 %131, %108
  store i32 %132, ptr %104, align 4, !tbaa !15
  call void @gift128b_encrypt_preloaded_masked(ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %11) #6
  %133 = load i32, ptr %11, align 4, !tbaa !15
  %134 = load i32, ptr %16, align 4, !tbaa !9
  %135 = xor i32 %134, %133
  %136 = load i32, ptr %18, align 4, !tbaa !12
  %137 = xor i32 %135, %136
  %138 = load i32, ptr %20, align 4, !tbaa !13
  %139 = xor i32 %137, %138
  store i32 %139, ptr %12, align 4, !tbaa !16
  %140 = load i32, ptr %44, align 4, !tbaa !15
  %141 = load i32, ptr %45, align 4, !tbaa !9
  %142 = xor i32 %141, %140
  %143 = load i32, ptr %47, align 4, !tbaa !12
  %144 = xor i32 %142, %143
  %145 = load i32, ptr %49, align 4, !tbaa !13
  %146 = xor i32 %144, %145
  %147 = getelementptr inbounds i8, ptr %12, i64 4
  store i32 %146, ptr %147, align 4, !tbaa !18
  call void @gift_cofb_masked_assoc_data(ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef %4, i64 noundef %5, i64 noundef %3)
  %.not = icmp eq i64 %3, 0
  br i1 %.not, label %644, label %.preheader

.preheader:                                       ; preds = %9
  %148 = icmp ugt i64 %3, 16
  br i1 %148, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader, %.lr.ph
  %.0286 = phi ptr [ %317, %.lr.ph ], [ %0, %.preheader ]
  %.0278285 = phi ptr [ %318, %.lr.ph ], [ %2, %.preheader ]
  %.0279284 = phi i64 [ %319, %.lr.ph ], [ %3, %.preheader ]
  %149 = load i8, ptr %.0278285, align 1, !tbaa !14
  %150 = zext i8 %149 to i32
  %151 = shl nuw i32 %150, 24
  %152 = getelementptr inbounds i8, ptr %.0278285, i64 1
  %153 = load i8, ptr %152, align 1, !tbaa !14
  %154 = zext i8 %153 to i32
  %155 = shl nuw nsw i32 %154, 16
  %156 = or disjoint i32 %155, %151
  %157 = getelementptr inbounds i8, ptr %.0278285, i64 2
  %158 = load i8, ptr %157, align 1, !tbaa !14
  %159 = zext i8 %158 to i32
  %160 = shl nuw nsw i32 %159, 8
  %161 = or disjoint i32 %156, %160
  %162 = getelementptr inbounds i8, ptr %.0278285, i64 3
  %163 = load i8, ptr %162, align 1, !tbaa !14
  %164 = zext i8 %163 to i32
  %165 = or disjoint i32 %161, %164
  %166 = getelementptr inbounds i8, ptr %.0278285, i64 4
  %167 = load i8, ptr %166, align 1, !tbaa !14
  %168 = zext i8 %167 to i32
  %169 = shl nuw i32 %168, 24
  %170 = getelementptr inbounds i8, ptr %.0278285, i64 5
  %171 = load i8, ptr %170, align 1, !tbaa !14
  %172 = zext i8 %171 to i32
  %173 = shl nuw nsw i32 %172, 16
  %174 = or disjoint i32 %173, %169
  %175 = getelementptr inbounds i8, ptr %.0278285, i64 6
  %176 = load i8, ptr %175, align 1, !tbaa !14
  %177 = zext i8 %176 to i32
  %178 = shl nuw nsw i32 %177, 8
  %179 = or disjoint i32 %174, %178
  %180 = getelementptr inbounds i8, ptr %.0278285, i64 7
  %181 = load i8, ptr %180, align 1, !tbaa !14
  %182 = zext i8 %181 to i32
  %183 = or disjoint i32 %179, %182
  %184 = getelementptr inbounds i8, ptr %.0278285, i64 8
  %185 = load i8, ptr %184, align 1, !tbaa !14
  %186 = zext i8 %185 to i32
  %187 = shl nuw i32 %186, 24
  %188 = getelementptr inbounds i8, ptr %.0278285, i64 9
  %189 = load i8, ptr %188, align 1, !tbaa !14
  %190 = zext i8 %189 to i32
  %191 = shl nuw nsw i32 %190, 16
  %192 = or disjoint i32 %191, %187
  %193 = getelementptr inbounds i8, ptr %.0278285, i64 10
  %194 = load i8, ptr %193, align 1, !tbaa !14
  %195 = zext i8 %194 to i32
  %196 = shl nuw nsw i32 %195, 8
  %197 = or disjoint i32 %192, %196
  %198 = getelementptr inbounds i8, ptr %.0278285, i64 11
  %199 = load i8, ptr %198, align 1, !tbaa !14
  %200 = zext i8 %199 to i32
  %201 = or disjoint i32 %197, %200
  %202 = getelementptr inbounds i8, ptr %.0278285, i64 12
  %203 = load i8, ptr %202, align 1, !tbaa !14
  %204 = zext i8 %203 to i32
  %205 = shl nuw i32 %204, 24
  %206 = getelementptr inbounds i8, ptr %.0278285, i64 13
  %207 = load i8, ptr %206, align 1, !tbaa !14
  %208 = zext i8 %207 to i32
  %209 = shl nuw nsw i32 %208, 16
  %210 = or disjoint i32 %209, %205
  %211 = getelementptr inbounds i8, ptr %.0278285, i64 14
  %212 = load i8, ptr %211, align 1, !tbaa !14
  %213 = zext i8 %212 to i32
  %214 = shl nuw nsw i32 %213, 8
  %215 = or disjoint i32 %210, %214
  %216 = getelementptr inbounds i8, ptr %.0278285, i64 15
  %217 = load i8, ptr %216, align 1, !tbaa !14
  %218 = zext i8 %217 to i32
  %219 = or disjoint i32 %215, %218
  %220 = load i32, ptr %11, align 4, !tbaa !19
  %221 = load i32, ptr %16, align 4, !tbaa !19
  %222 = load i32, ptr %18, align 4, !tbaa !19
  %223 = load i32, ptr %20, align 4, !tbaa !19
  %224 = xor i32 %220, %165
  %225 = xor i32 %224, %221
  %226 = xor i32 %225, %222
  %227 = xor i32 %226, %223
  %228 = lshr i32 %227, 24
  %229 = trunc nuw i32 %228 to i8
  store i8 %229, ptr %.0286, align 1, !tbaa !14
  %230 = lshr i32 %227, 16
  %231 = trunc i32 %230 to i8
  %232 = getelementptr inbounds i8, ptr %.0286, i64 1
  store i8 %231, ptr %232, align 1, !tbaa !14
  %233 = lshr i32 %227, 8
  %234 = trunc i32 %233 to i8
  %235 = getelementptr inbounds i8, ptr %.0286, i64 2
  store i8 %234, ptr %235, align 1, !tbaa !14
  %236 = trunc i32 %227 to i8
  %237 = getelementptr inbounds i8, ptr %.0286, i64 3
  store i8 %236, ptr %237, align 1, !tbaa !14
  %238 = load i32, ptr %44, align 4, !tbaa !19
  %239 = load i32, ptr %45, align 4, !tbaa !19
  %240 = load i32, ptr %47, align 4, !tbaa !19
  %241 = load i32, ptr %49, align 4, !tbaa !19
  %242 = xor i32 %238, %183
  %243 = xor i32 %242, %239
  %244 = xor i32 %243, %240
  %245 = xor i32 %244, %241
  %246 = lshr i32 %245, 24
  %247 = trunc nuw i32 %246 to i8
  %248 = getelementptr inbounds i8, ptr %.0286, i64 4
  store i8 %247, ptr %248, align 1, !tbaa !14
  %249 = lshr i32 %245, 16
  %250 = trunc i32 %249 to i8
  %251 = getelementptr inbounds i8, ptr %.0286, i64 5
  store i8 %250, ptr %251, align 1, !tbaa !14
  %252 = lshr i32 %245, 8
  %253 = trunc i32 %252 to i8
  %254 = getelementptr inbounds i8, ptr %.0286, i64 6
  store i8 %253, ptr %254, align 1, !tbaa !14
  %255 = trunc i32 %245 to i8
  %256 = getelementptr inbounds i8, ptr %.0286, i64 7
  store i8 %255, ptr %256, align 1, !tbaa !14
  %257 = load i32, ptr %74, align 4, !tbaa !15
  %258 = load i32, ptr %75, align 4, !tbaa !9
  %259 = load i32, ptr %77, align 4, !tbaa !12
  %260 = load i32, ptr %79, align 4, !tbaa !13
  %261 = xor i32 %257, %258
  %262 = xor i32 %261, %259
  %263 = xor i32 %262, %260
  %264 = xor i32 %263, %201
  %265 = lshr i32 %264, 24
  %266 = trunc nuw i32 %265 to i8
  %267 = getelementptr inbounds i8, ptr %.0286, i64 8
  store i8 %266, ptr %267, align 1, !tbaa !14
  %268 = lshr i32 %264, 16
  %269 = trunc i32 %268 to i8
  %270 = getelementptr inbounds i8, ptr %.0286, i64 9
  store i8 %269, ptr %270, align 1, !tbaa !14
  %271 = lshr i32 %264, 8
  %272 = trunc i32 %271 to i8
  %273 = getelementptr inbounds i8, ptr %.0286, i64 10
  store i8 %272, ptr %273, align 1, !tbaa !14
  %274 = trunc i32 %264 to i8
  %275 = getelementptr inbounds i8, ptr %.0286, i64 11
  store i8 %274, ptr %275, align 1, !tbaa !14
  %276 = load i32, ptr %104, align 4, !tbaa !15
  %277 = load i32, ptr %105, align 4, !tbaa !9
  %278 = load i32, ptr %107, align 4, !tbaa !12
  %279 = load i32, ptr %109, align 4, !tbaa !13
  %280 = xor i32 %276, %277
  %281 = xor i32 %280, %278
  %282 = xor i32 %281, %279
  %283 = xor i32 %282, %219
  %284 = lshr i32 %283, 24
  %285 = trunc nuw i32 %284 to i8
  %286 = getelementptr inbounds i8, ptr %.0286, i64 12
  store i8 %285, ptr %286, align 1, !tbaa !14
  %287 = lshr i32 %283, 16
  %288 = trunc i32 %287 to i8
  %289 = getelementptr inbounds i8, ptr %.0286, i64 13
  store i8 %288, ptr %289, align 1, !tbaa !14
  %290 = lshr i32 %283, 8
  %291 = trunc i32 %290 to i8
  %292 = getelementptr inbounds i8, ptr %.0286, i64 14
  store i8 %291, ptr %292, align 1, !tbaa !14
  %293 = trunc i32 %283 to i8
  %294 = getelementptr inbounds i8, ptr %.0286, i64 15
  store i8 %293, ptr %294, align 1, !tbaa !14
  %295 = load i32, ptr %12, align 4, !tbaa !16
  %296 = load i32, ptr %147, align 4, !tbaa !18
  %297 = call i32 @llvm.fshl.i32(i32 %295, i32 %296, i32 1)
  store i32 %297, ptr %12, align 4, !tbaa !16
  %298 = shl i32 %296, 1
  %isneg283 = icmp slt i32 %295, 0
  %299 = select i1 %isneg283, i32 27, i32 0
  %300 = xor i32 %298, %299
  store i32 %300, ptr %147, align 4, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %11, ptr noundef nonnull align 4 dereferenceable(16) %74, i64 16, i1 false), !tbaa.struct !20
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %44, ptr noundef nonnull align 4 dereferenceable(16) %104, i64 16, i1 false), !tbaa.struct !20
  %301 = call i32 @llvm.fshl.i32(i32 %220, i32 %238, i32 1)
  %302 = call i32 @llvm.fshl.i32(i32 %221, i32 %239, i32 1)
  store i32 %302, ptr %75, align 4, !tbaa !9
  %303 = call i32 @llvm.fshl.i32(i32 %222, i32 %240, i32 1)
  store i32 %303, ptr %77, align 4, !tbaa !12
  %304 = call i32 @llvm.fshl.i32(i32 %223, i32 %241, i32 1)
  store i32 %304, ptr %79, align 4, !tbaa !13
  %305 = call i32 @llvm.fshl.i32(i32 %238, i32 %220, i32 1)
  %306 = call i32 @llvm.fshl.i32(i32 %239, i32 %221, i32 1)
  store i32 %306, ptr %105, align 4, !tbaa !9
  %307 = call i32 @llvm.fshl.i32(i32 %240, i32 %222, i32 1)
  store i32 %307, ptr %107, align 4, !tbaa !12
  %308 = call i32 @llvm.fshl.i32(i32 %241, i32 %223, i32 1)
  store i32 %308, ptr %109, align 4, !tbaa !13
  %309 = load i32, ptr %11, align 4, !tbaa !15
  %310 = xor i32 %165, %309
  %311 = xor i32 %310, %297
  store i32 %311, ptr %11, align 4, !tbaa !15
  %312 = load i32, ptr %44, align 4, !tbaa !15
  %313 = xor i32 %183, %312
  %314 = xor i32 %313, %300
  store i32 %314, ptr %44, align 4, !tbaa !15
  %315 = xor i32 %301, %201
  store i32 %315, ptr %74, align 4, !tbaa !15
  %316 = xor i32 %305, %219
  store i32 %316, ptr %104, align 4, !tbaa !15
  call void @gift128b_encrypt_preloaded_masked(ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %11) #6
  %317 = getelementptr inbounds i8, ptr %.0286, i64 16
  %318 = getelementptr inbounds i8, ptr %.0278285, i64 16
  %319 = add i64 %.0279284, -16
  %320 = icmp ugt i64 %319, 16
  br i1 %320, label %.lr.ph, label %._crit_edge, !llvm.loop !21

._crit_edge:                                      ; preds = %.lr.ph, %.preheader
  %.0279.lcssa = phi i64 [ %3, %.preheader ], [ %319, %.lr.ph ]
  %.0278.lcssa = phi ptr [ %2, %.preheader ], [ %318, %.lr.ph ]
  %.0.lcssa = phi ptr [ %0, %.preheader ], [ %317, %.lr.ph ]
  %321 = icmp eq i64 %.0279.lcssa, 16
  br i1 %321, label %322, label %492

322:                                              ; preds = %._crit_edge
  %323 = load i8, ptr %.0278.lcssa, align 1, !tbaa !14
  %324 = zext i8 %323 to i32
  %325 = shl nuw i32 %324, 24
  %326 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 1
  %327 = load i8, ptr %326, align 1, !tbaa !14
  %328 = zext i8 %327 to i32
  %329 = shl nuw nsw i32 %328, 16
  %330 = or disjoint i32 %329, %325
  %331 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 2
  %332 = load i8, ptr %331, align 1, !tbaa !14
  %333 = zext i8 %332 to i32
  %334 = shl nuw nsw i32 %333, 8
  %335 = or disjoint i32 %330, %334
  %336 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 3
  %337 = load i8, ptr %336, align 1, !tbaa !14
  %338 = zext i8 %337 to i32
  %339 = or disjoint i32 %335, %338
  %340 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 4
  %341 = load i8, ptr %340, align 1, !tbaa !14
  %342 = zext i8 %341 to i32
  %343 = shl nuw i32 %342, 24
  %344 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 5
  %345 = load i8, ptr %344, align 1, !tbaa !14
  %346 = zext i8 %345 to i32
  %347 = shl nuw nsw i32 %346, 16
  %348 = or disjoint i32 %347, %343
  %349 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 6
  %350 = load i8, ptr %349, align 1, !tbaa !14
  %351 = zext i8 %350 to i32
  %352 = shl nuw nsw i32 %351, 8
  %353 = or disjoint i32 %348, %352
  %354 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 7
  %355 = load i8, ptr %354, align 1, !tbaa !14
  %356 = zext i8 %355 to i32
  %357 = or disjoint i32 %353, %356
  %358 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 8
  %359 = load i8, ptr %358, align 1, !tbaa !14
  %360 = zext i8 %359 to i32
  %361 = shl nuw i32 %360, 24
  %362 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 9
  %363 = load i8, ptr %362, align 1, !tbaa !14
  %364 = zext i8 %363 to i32
  %365 = shl nuw nsw i32 %364, 16
  %366 = or disjoint i32 %365, %361
  %367 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 10
  %368 = load i8, ptr %367, align 1, !tbaa !14
  %369 = zext i8 %368 to i32
  %370 = shl nuw nsw i32 %369, 8
  %371 = or disjoint i32 %366, %370
  %372 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 11
  %373 = load i8, ptr %372, align 1, !tbaa !14
  %374 = zext i8 %373 to i32
  %375 = or disjoint i32 %371, %374
  %376 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 12
  %377 = load i8, ptr %376, align 1, !tbaa !14
  %378 = zext i8 %377 to i32
  %379 = shl nuw i32 %378, 24
  %380 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 13
  %381 = load i8, ptr %380, align 1, !tbaa !14
  %382 = zext i8 %381 to i32
  %383 = shl nuw nsw i32 %382, 16
  %384 = or disjoint i32 %383, %379
  %385 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 14
  %386 = load i8, ptr %385, align 1, !tbaa !14
  %387 = zext i8 %386 to i32
  %388 = shl nuw nsw i32 %387, 8
  %389 = or disjoint i32 %384, %388
  %390 = getelementptr inbounds i8, ptr %.0278.lcssa, i64 15
  %391 = load i8, ptr %390, align 1, !tbaa !14
  %392 = zext i8 %391 to i32
  %393 = or disjoint i32 %389, %392
  %394 = load i32, ptr %11, align 4, !tbaa !19
  %395 = load i32, ptr %16, align 4, !tbaa !19
  %396 = load i32, ptr %18, align 4, !tbaa !19
  %397 = load i32, ptr %20, align 4, !tbaa !19
  %398 = xor i32 %394, %339
  %399 = xor i32 %398, %395
  %400 = xor i32 %399, %396
  %401 = xor i32 %400, %397
  %402 = lshr i32 %401, 24
  %403 = trunc nuw i32 %402 to i8
  store i8 %403, ptr %.0.lcssa, align 1, !tbaa !14
  %404 = lshr i32 %401, 16
  %405 = trunc i32 %404 to i8
  %406 = getelementptr inbounds i8, ptr %.0.lcssa, i64 1
  store i8 %405, ptr %406, align 1, !tbaa !14
  %407 = lshr i32 %401, 8
  %408 = trunc i32 %407 to i8
  %409 = getelementptr inbounds i8, ptr %.0.lcssa, i64 2
  store i8 %408, ptr %409, align 1, !tbaa !14
  %410 = trunc i32 %401 to i8
  %411 = getelementptr inbounds i8, ptr %.0.lcssa, i64 3
  store i8 %410, ptr %411, align 1, !tbaa !14
  %412 = load i32, ptr %44, align 4, !tbaa !19
  %413 = load i32, ptr %45, align 4, !tbaa !19
  %414 = load i32, ptr %47, align 4, !tbaa !19
  %415 = load i32, ptr %49, align 4, !tbaa !19
  %416 = xor i32 %412, %357
  %417 = xor i32 %416, %413
  %418 = xor i32 %417, %414
  %419 = xor i32 %418, %415
  %420 = lshr i32 %419, 24
  %421 = trunc nuw i32 %420 to i8
  %422 = getelementptr inbounds i8, ptr %.0.lcssa, i64 4
  store i8 %421, ptr %422, align 1, !tbaa !14
  %423 = lshr i32 %419, 16
  %424 = trunc i32 %423 to i8
  %425 = getelementptr inbounds i8, ptr %.0.lcssa, i64 5
  store i8 %424, ptr %425, align 1, !tbaa !14
  %426 = lshr i32 %419, 8
  %427 = trunc i32 %426 to i8
  %428 = getelementptr inbounds i8, ptr %.0.lcssa, i64 6
  store i8 %427, ptr %428, align 1, !tbaa !14
  %429 = trunc i32 %419 to i8
  %430 = getelementptr inbounds i8, ptr %.0.lcssa, i64 7
  store i8 %429, ptr %430, align 1, !tbaa !14
  %431 = load i32, ptr %74, align 4, !tbaa !15
  %432 = load i32, ptr %75, align 4, !tbaa !9
  %433 = load i32, ptr %77, align 4, !tbaa !12
  %434 = load i32, ptr %79, align 4, !tbaa !13
  %435 = xor i32 %431, %432
  %436 = xor i32 %435, %433
  %437 = xor i32 %436, %434
  %438 = xor i32 %437, %375
  %439 = lshr i32 %438, 24
  %440 = trunc nuw i32 %439 to i8
  %441 = getelementptr inbounds i8, ptr %.0.lcssa, i64 8
  store i8 %440, ptr %441, align 1, !tbaa !14
  %442 = lshr i32 %438, 16
  %443 = trunc i32 %442 to i8
  %444 = getelementptr inbounds i8, ptr %.0.lcssa, i64 9
  store i8 %443, ptr %444, align 1, !tbaa !14
  %445 = lshr i32 %438, 8
  %446 = trunc i32 %445 to i8
  %447 = getelementptr inbounds i8, ptr %.0.lcssa, i64 10
  store i8 %446, ptr %447, align 1, !tbaa !14
  %448 = trunc i32 %438 to i8
  %449 = getelementptr inbounds i8, ptr %.0.lcssa, i64 11
  store i8 %448, ptr %449, align 1, !tbaa !14
  %450 = load i32, ptr %104, align 4, !tbaa !15
  %451 = load i32, ptr %105, align 4, !tbaa !9
  %452 = load i32, ptr %107, align 4, !tbaa !12
  %453 = load i32, ptr %109, align 4, !tbaa !13
  %454 = xor i32 %450, %451
  %455 = xor i32 %454, %452
  %456 = xor i32 %455, %453
  %457 = xor i32 %456, %393
  %458 = lshr i32 %457, 24
  %459 = trunc nuw i32 %458 to i8
  %460 = getelementptr inbounds i8, ptr %.0.lcssa, i64 12
  store i8 %459, ptr %460, align 1, !tbaa !14
  %461 = lshr i32 %457, 16
  %462 = trunc i32 %461 to i8
  %463 = getelementptr inbounds i8, ptr %.0.lcssa, i64 13
  store i8 %462, ptr %463, align 1, !tbaa !14
  %464 = lshr i32 %457, 8
  %465 = trunc i32 %464 to i8
  %466 = getelementptr inbounds i8, ptr %.0.lcssa, i64 14
  store i8 %465, ptr %466, align 1, !tbaa !14
  %467 = trunc i32 %457 to i8
  %468 = getelementptr inbounds i8, ptr %.0.lcssa, i64 15
  store i8 %467, ptr %468, align 1, !tbaa !14
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %11, ptr noundef nonnull align 4 dereferenceable(16) %74, i64 16, i1 false), !tbaa.struct !20
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %44, ptr noundef nonnull align 4 dereferenceable(16) %104, i64 16, i1 false), !tbaa.struct !20
  %469 = call i32 @llvm.fshl.i32(i32 %394, i32 %412, i32 1)
  %470 = call i32 @llvm.fshl.i32(i32 %395, i32 %413, i32 1)
  store i32 %470, ptr %75, align 4, !tbaa !9
  %471 = call i32 @llvm.fshl.i32(i32 %396, i32 %414, i32 1)
  store i32 %471, ptr %77, align 4, !tbaa !12
  %472 = call i32 @llvm.fshl.i32(i32 %397, i32 %415, i32 1)
  store i32 %472, ptr %79, align 4, !tbaa !13
  %473 = call i32 @llvm.fshl.i32(i32 %412, i32 %394, i32 1)
  %474 = call i32 @llvm.fshl.i32(i32 %413, i32 %395, i32 1)
  store i32 %474, ptr %105, align 4, !tbaa !9
  %475 = call i32 @llvm.fshl.i32(i32 %414, i32 %396, i32 1)
  store i32 %475, ptr %107, align 4, !tbaa !12
  %476 = call i32 @llvm.fshl.i32(i32 %415, i32 %397, i32 1)
  store i32 %476, ptr %109, align 4, !tbaa !13
  %477 = load i32, ptr %11, align 4, !tbaa !15
  %478 = xor i32 %477, %339
  %479 = load i32, ptr %44, align 4, !tbaa !15
  %480 = xor i32 %479, %357
  %481 = xor i32 %469, %375
  store i32 %481, ptr %74, align 4, !tbaa !15
  %482 = xor i32 %473, %393
  store i32 %482, ptr %104, align 4, !tbaa !15
  %483 = load i32, ptr %12, align 4, !tbaa !16
  %484 = load i32, ptr %147, align 4, !tbaa !18
  %485 = call i32 @llvm.fshl.i32(i32 %483, i32 %484, i32 1)
  %486 = shl i32 %484, 1
  %isneg282 = icmp slt i32 %483, 0
  %487 = select i1 %isneg282, i32 27, i32 0
  %488 = xor i32 %485, %483
  store i32 %488, ptr %12, align 4, !tbaa !16
  %489 = xor i32 %487, %486
  %490 = xor i32 %489, %484
  %491 = getelementptr inbounds i8, ptr %.0.lcssa, i64 16
  br label %638

492:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #6
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %13, ptr align 1 %.0278.lcssa, i64 %.0279.lcssa, i1 false)
  %493 = getelementptr inbounds [16 x i8], ptr %13, i64 0, i64 %.0279.lcssa
  store i8 -128, ptr %493, align 1, !tbaa !14
  %494 = getelementptr inbounds i8, ptr %493, i64 1
  %495 = sub nuw nsw i64 15, %.0279.lcssa
  call void @llvm.memset.p0.i64(ptr nonnull align 1 %494, i8 0, i64 %495, i1 false)
  %496 = load i8, ptr %13, align 4, !tbaa !14
  %497 = zext i8 %496 to i32
  %498 = shl nuw i32 %497, 24
  %499 = getelementptr inbounds i8, ptr %13, i64 1
  %500 = load i8, ptr %499, align 1, !tbaa !14
  %501 = zext i8 %500 to i32
  %502 = shl nuw nsw i32 %501, 16
  %503 = or disjoint i32 %502, %498
  %504 = getelementptr inbounds i8, ptr %13, i64 2
  %505 = load i8, ptr %504, align 2, !tbaa !14
  %506 = zext i8 %505 to i32
  %507 = shl nuw nsw i32 %506, 8
  %508 = or disjoint i32 %503, %507
  %509 = getelementptr inbounds i8, ptr %13, i64 3
  %510 = load i8, ptr %509, align 1, !tbaa !14
  %511 = zext i8 %510 to i32
  %512 = or disjoint i32 %508, %511
  %513 = getelementptr inbounds i8, ptr %13, i64 4
  %514 = load i8, ptr %513, align 4, !tbaa !14
  %515 = zext i8 %514 to i32
  %516 = shl nuw i32 %515, 24
  %517 = getelementptr inbounds i8, ptr %13, i64 5
  %518 = load i8, ptr %517, align 1, !tbaa !14
  %519 = zext i8 %518 to i32
  %520 = shl nuw nsw i32 %519, 16
  %521 = or disjoint i32 %520, %516
  %522 = getelementptr inbounds i8, ptr %13, i64 6
  %523 = load i8, ptr %522, align 2, !tbaa !14
  %524 = zext i8 %523 to i32
  %525 = shl nuw nsw i32 %524, 8
  %526 = or disjoint i32 %521, %525
  %527 = getelementptr inbounds i8, ptr %13, i64 7
  %528 = load i8, ptr %527, align 1, !tbaa !14
  %529 = zext i8 %528 to i32
  %530 = or disjoint i32 %526, %529
  %531 = getelementptr inbounds i8, ptr %13, i64 8
  %532 = load i8, ptr %531, align 4, !tbaa !14
  %533 = zext i8 %532 to i32
  %534 = shl nuw i32 %533, 24
  %535 = getelementptr inbounds i8, ptr %13, i64 9
  %536 = load i8, ptr %535, align 1, !tbaa !14
  %537 = zext i8 %536 to i32
  %538 = shl nuw nsw i32 %537, 16
  %539 = or disjoint i32 %538, %534
  %540 = getelementptr inbounds i8, ptr %13, i64 10
  %541 = load i8, ptr %540, align 2, !tbaa !14
  %542 = zext i8 %541 to i32
  %543 = shl nuw nsw i32 %542, 8
  %544 = or disjoint i32 %539, %543
  %545 = getelementptr inbounds i8, ptr %13, i64 11
  %546 = load i8, ptr %545, align 1, !tbaa !14
  %547 = zext i8 %546 to i32
  %548 = or disjoint i32 %544, %547
  %549 = getelementptr inbounds i8, ptr %13, i64 12
  %550 = load i8, ptr %549, align 4, !tbaa !14
  %551 = zext i8 %550 to i32
  %552 = shl nuw i32 %551, 24
  %553 = getelementptr inbounds i8, ptr %13, i64 13
  %554 = load i8, ptr %553, align 1, !tbaa !14
  %555 = zext i8 %554 to i32
  %556 = shl nuw nsw i32 %555, 16
  %557 = or disjoint i32 %556, %552
  %558 = getelementptr inbounds i8, ptr %13, i64 14
  %559 = load i8, ptr %558, align 2, !tbaa !14
  %560 = zext i8 %559 to i32
  %561 = shl nuw nsw i32 %560, 8
  %562 = or disjoint i32 %557, %561
  %563 = getelementptr inbounds i8, ptr %13, i64 15
  %564 = load i8, ptr %563, align 1, !tbaa !14
  %565 = zext i8 %564 to i32
  %566 = or disjoint i32 %562, %565
  %567 = load i32, ptr %13, align 4, !tbaa !14
  %568 = call i32 @llvm.bswap.i32(i32 %567)
  %569 = load i32, ptr %513, align 4, !tbaa !14
  %570 = call i32 @llvm.bswap.i32(i32 %569)
  %571 = load i32, ptr %531, align 4, !tbaa !14
  %572 = load i32, ptr %549, align 4, !tbaa !14
  %573 = load i32, ptr %11, align 4, !tbaa !19
  %574 = load i32, ptr %16, align 4, !tbaa !19
  %575 = load i32, ptr %18, align 4, !tbaa !19
  %576 = load i32, ptr %20, align 4, !tbaa !19
  %577 = xor i32 %573, %568
  %578 = xor i32 %577, %574
  %579 = xor i32 %578, %575
  %580 = xor i32 %579, %576
  %581 = load i32, ptr %44, align 4, !tbaa !19
  %582 = load i32, ptr %45, align 4, !tbaa !19
  %583 = load i32, ptr %47, align 4, !tbaa !19
  %584 = load i32, ptr %49, align 4, !tbaa !19
  %585 = xor i32 %581, %570
  %586 = xor i32 %585, %582
  %587 = xor i32 %586, %583
  %588 = xor i32 %587, %584
  %589 = load i32, ptr %74, align 4, !tbaa !15
  %590 = load i32, ptr %75, align 4, !tbaa !9
  %591 = load i32, ptr %77, align 4, !tbaa !12
  %592 = load i32, ptr %79, align 4, !tbaa !13
  %593 = xor i32 %589, %590
  %594 = xor i32 %593, %591
  %595 = xor i32 %594, %592
  %596 = load i32, ptr %104, align 4, !tbaa !15
  %597 = load i32, ptr %105, align 4, !tbaa !9
  %598 = load i32, ptr %107, align 4, !tbaa !12
  %599 = load i32, ptr %109, align 4, !tbaa !13
  %600 = xor i32 %596, %597
  %601 = xor i32 %600, %598
  %602 = xor i32 %601, %599
  %603 = call i32 @llvm.bswap.i32(i32 %580)
  store i32 %603, ptr %13, align 4, !tbaa !14
  %604 = call i32 @llvm.bswap.i32(i32 %588)
  store i32 %604, ptr %513, align 4, !tbaa !14
  %605 = call i32 @llvm.bswap.i32(i32 %595)
  %606 = xor i32 %605, %571
  store i32 %606, ptr %531, align 4, !tbaa !14
  %607 = call i32 @llvm.bswap.i32(i32 %602)
  %608 = xor i32 %607, %572
  store i32 %608, ptr %549, align 4, !tbaa !14
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.0.lcssa, ptr nonnull align 4 %13, i64 %.0279.lcssa, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %11, ptr noundef nonnull align 4 dereferenceable(16) %74, i64 16, i1 false), !tbaa.struct !20
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %44, ptr noundef nonnull align 4 dereferenceable(16) %104, i64 16, i1 false), !tbaa.struct !20
  %609 = call i32 @llvm.fshl.i32(i32 %573, i32 %581, i32 1)
  %610 = call i32 @llvm.fshl.i32(i32 %574, i32 %582, i32 1)
  store i32 %610, ptr %75, align 4, !tbaa !9
  %611 = call i32 @llvm.fshl.i32(i32 %575, i32 %583, i32 1)
  store i32 %611, ptr %77, align 4, !tbaa !12
  %612 = call i32 @llvm.fshl.i32(i32 %576, i32 %584, i32 1)
  store i32 %612, ptr %79, align 4, !tbaa !13
  %613 = call i32 @llvm.fshl.i32(i32 %581, i32 %573, i32 1)
  %614 = call i32 @llvm.fshl.i32(i32 %582, i32 %574, i32 1)
  store i32 %614, ptr %105, align 4, !tbaa !9
  %615 = call i32 @llvm.fshl.i32(i32 %583, i32 %575, i32 1)
  store i32 %615, ptr %107, align 4, !tbaa !12
  %616 = call i32 @llvm.fshl.i32(i32 %584, i32 %576, i32 1)
  store i32 %616, ptr %109, align 4, !tbaa !13
  %617 = load i32, ptr %11, align 4, !tbaa !15
  %618 = xor i32 %617, %512
  %619 = load i32, ptr %44, align 4, !tbaa !15
  %620 = xor i32 %619, %530
  %621 = xor i32 %609, %548
  store i32 %621, ptr %74, align 4, !tbaa !15
  %622 = xor i32 %613, %566
  store i32 %622, ptr %104, align 4, !tbaa !15
  %623 = load i32, ptr %12, align 4, !tbaa !16
  %624 = load i32, ptr %147, align 4, !tbaa !18
  %625 = call i32 @llvm.fshl.i32(i32 %623, i32 %624, i32 1)
  %626 = shl i32 %624, 1
  %isneg = icmp slt i32 %623, 0
  %627 = select i1 %isneg, i32 27, i32 0
  %628 = xor i32 %625, %623
  %629 = xor i32 %627, %626
  %630 = xor i32 %629, %624
  %631 = call i32 @llvm.fshl.i32(i32 %628, i32 %630, i32 1)
  %632 = shl i32 %630, 1
  %isneg281 = icmp slt i32 %628, 0
  %633 = select i1 %isneg281, i32 27, i32 0
  %634 = xor i32 %631, %628
  store i32 %634, ptr %12, align 4, !tbaa !16
  %635 = xor i32 %633, %632
  %636 = xor i32 %635, %630
  %637 = getelementptr inbounds i8, ptr %.0.lcssa, i64 %.0279.lcssa
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #6
  br label %638

638:                                              ; preds = %322, %492
  %639 = phi i32 [ %480, %322 ], [ %620, %492 ]
  %640 = phi i32 [ %478, %322 ], [ %618, %492 ]
  %641 = phi i32 [ %488, %322 ], [ %634, %492 ]
  %.sink = phi i32 [ %490, %322 ], [ %636, %492 ]
  %.1 = phi ptr [ %491, %322 ], [ %637, %492 ]
  store i32 %.sink, ptr %147, align 4
  %642 = xor i32 %640, %641
  store i32 %642, ptr %11, align 4, !tbaa !15
  %643 = xor i32 %639, %.sink
  store i32 %643, ptr %44, align 4, !tbaa !15
  call void @gift128b_encrypt_preloaded_masked(ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %11) #6
  br label %644

644:                                              ; preds = %9, %638
  %.2 = phi ptr [ %.1, %638 ], [ %0, %9 ]
  %645 = load i32, ptr %11, align 4, !tbaa !15
  %646 = load i32, ptr %16, align 4, !tbaa !9
  %647 = xor i32 %646, %645
  %648 = load i32, ptr %18, align 4, !tbaa !12
  %649 = xor i32 %647, %648
  %650 = load i32, ptr %20, align 4, !tbaa !13
  %651 = xor i32 %649, %650
  %652 = lshr i32 %651, 24
  %653 = trunc nuw i32 %652 to i8
  store i8 %653, ptr %.2, align 1, !tbaa !14
  %654 = lshr i32 %651, 16
  %655 = trunc i32 %654 to i8
  %656 = getelementptr inbounds i8, ptr %.2, i64 1
  store i8 %655, ptr %656, align 1, !tbaa !14
  %657 = lshr i32 %651, 8
  %658 = trunc i32 %657 to i8
  %659 = getelementptr inbounds i8, ptr %.2, i64 2
  store i8 %658, ptr %659, align 1, !tbaa !14
  %660 = trunc i32 %651 to i8
  %661 = getelementptr inbounds i8, ptr %.2, i64 3
  store i8 %660, ptr %661, align 1, !tbaa !14
  %662 = load i32, ptr %44, align 4, !tbaa !15
  %663 = load i32, ptr %45, align 4, !tbaa !9
  %664 = xor i32 %663, %662
  %665 = load i32, ptr %47, align 4, !tbaa !12
  %666 = xor i32 %664, %665
  %667 = load i32, ptr %49, align 4, !tbaa !13
  %668 = xor i32 %666, %667
  %669 = lshr i32 %668, 24
  %670 = trunc nuw i32 %669 to i8
  %671 = getelementptr inbounds i8, ptr %.2, i64 4
  store i8 %670, ptr %671, align 1, !tbaa !14
  %672 = lshr i32 %668, 16
  %673 = trunc i32 %672 to i8
  %674 = getelementptr inbounds i8, ptr %.2, i64 5
  store i8 %673, ptr %674, align 1, !tbaa !14
  %675 = lshr i32 %668, 8
  %676 = trunc i32 %675 to i8
  %677 = getelementptr inbounds i8, ptr %.2, i64 6
  store i8 %676, ptr %677, align 1, !tbaa !14
  %678 = trunc i32 %668 to i8
  %679 = getelementptr inbounds i8, ptr %.2, i64 7
  store i8 %678, ptr %679, align 1, !tbaa !14
  %680 = load i32, ptr %74, align 4, !tbaa !15
  %681 = load i32, ptr %75, align 4, !tbaa !9
  %682 = xor i32 %681, %680
  %683 = load i32, ptr %77, align 4, !tbaa !12
  %684 = xor i32 %682, %683
  %685 = load i32, ptr %79, align 4, !tbaa !13
  %686 = xor i32 %684, %685
  %687 = lshr i32 %686, 24
  %688 = trunc nuw i32 %687 to i8
  %689 = getelementptr inbounds i8, ptr %.2, i64 8
  store i8 %688, ptr %689, align 1, !tbaa !14
  %690 = lshr i32 %686, 16
  %691 = trunc i32 %690 to i8
  %692 = getelementptr inbounds i8, ptr %.2, i64 9
  store i8 %691, ptr %692, align 1, !tbaa !14
  %693 = lshr i32 %686, 8
  %694 = trunc i32 %693 to i8
  %695 = getelementptr inbounds i8, ptr %.2, i64 10
  store i8 %694, ptr %695, align 1, !tbaa !14
  %696 = trunc i32 %686 to i8
  %697 = getelementptr inbounds i8, ptr %.2, i64 11
  store i8 %696, ptr %697, align 1, !tbaa !14
  %698 = load i32, ptr %104, align 4, !tbaa !15
  %699 = load i32, ptr %105, align 4, !tbaa !9
  %700 = xor i32 %699, %698
  %701 = load i32, ptr %107, align 4, !tbaa !12
  %702 = xor i32 %700, %701
  %703 = load i32, ptr %109, align 4, !tbaa !13
  %704 = xor i32 %702, %703
  %705 = lshr i32 %704, 24
  %706 = trunc nuw i32 %705 to i8
  %707 = getelementptr inbounds i8, ptr %.2, i64 12
  store i8 %706, ptr %707, align 1, !tbaa !14
  %708 = lshr i32 %704, 16
  %709 = trunc i32 %708 to i8
  %710 = getelementptr inbounds i8, ptr %.2, i64 13
  store i8 %709, ptr %710, align 1, !tbaa !14
  %711 = lshr i32 %704, 8
  %712 = trunc i32 %711 to i8
  %713 = getelementptr inbounds i8, ptr %.2, i64 14
  store i8 %712, ptr %713, align 1, !tbaa !14
  %714 = trunc i32 %704 to i8
  %715 = getelementptr inbounds i8, ptr %.2, i64 15
  store i8 %714, ptr %715, align 1, !tbaa !14
  call void @aead_random_finish() #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 1280, ptr nonnull %10) #6
  ret i32 0
}

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

declare void @gift128b_init_masked(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @aead_random_generate_32() local_unnamed_addr #2

declare void @gift128b_encrypt_preloaded_masked(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @gift_cofb_masked_assoc_data(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #0

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

declare void @aead_random_finish() local_unnamed_addr #2

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 = !{!"long long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 4}
!10 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12}
!11 = !{!"int", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = !{!10, !11, i64 12}
!14 = !{!7, !7, i64 0}
!15 = !{!10, !11, i64 0}
!16 = !{!17, !11, i64 0}
!17 = !{!"", !11, i64 0, !11, i64 4}
!18 = !{!17, !11, i64 4}
!19 = !{!11, !11, i64 0}
!20 = !{i64 0, i64 4, !19, i64 4, i64 4, !19, i64 8, i64 4, !19, i64 12, i64 4, !19}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass