; LLVM IR from caryll/otfcc :: lib/table (cmap)

; 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.table_cmap = type { ptr, ptr }
%struct.cmap_Entry = type { %struct.UT_hash_handle, i32, %struct.otfcc_Handle }
%struct.UT_hash_handle = type { ptr, ptr, ptr, ptr, ptr, ptr, i32, i32 }
%struct.otfcc_Handle = type { i32, i16, ptr }
%struct.UT_hash_table = type { ptr, i32, i32, i32, ptr, i64, i32, i32, i32, i32, i32 }
%struct.UT_hash_bucket = type { ptr, i32, i32 }

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @memcmp(ptr noundef, ptr noundef, i64 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local ptr @otfcc_cmapLookup(ptr noundef %0, i32 noundef %1) #2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #3
  br label %14

14:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  br label %15

15:                                               ; preds = %14
  br label %16

16:                                               ; preds = %15
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  store ptr %5, ptr %11, align 8, !tbaa !5
  store i32 -17973521, ptr %7, align 4, !tbaa !9
  store i32 -1640531527, ptr %9, align 4, !tbaa !9
  store i32 -1640531527, ptr %8, align 4, !tbaa !9
  store i32 4, ptr %10, align 4, !tbaa !9
  br label %17

17:                                               ; preds = %185, %16
  %18 = load i32, ptr %10, align 4, !tbaa !9
  %19 = icmp uge i32 %18, 12
  br i1 %19, label %20, label %190

20:                                               ; preds = %17
  %21 = load ptr, ptr %11, align 8, !tbaa !5
  %22 = getelementptr inbounds i8, ptr %21, i64 0
  %23 = load i8, ptr %22, align 1, !tbaa !11
  %24 = zext i8 %23 to i32
  %25 = load ptr, ptr %11, align 8, !tbaa !5
  %26 = getelementptr inbounds i8, ptr %25, i64 1
  %27 = load i8, ptr %26, align 1, !tbaa !11
  %28 = zext i8 %27 to i32
  %29 = shl i32 %28, 8
  %30 = add i32 %24, %29
  %31 = load ptr, ptr %11, align 8, !tbaa !5
  %32 = getelementptr inbounds i8, ptr %31, i64 2
  %33 = load i8, ptr %32, align 1, !tbaa !11
  %34 = zext i8 %33 to i32
  %35 = shl i32 %34, 16
  %36 = add i32 %30, %35
  %37 = load ptr, ptr %11, align 8, !tbaa !5
  %38 = getelementptr inbounds i8, ptr %37, i64 3
  %39 = load i8, ptr %38, align 1, !tbaa !11
  %40 = zext i8 %39 to i32
  %41 = shl i32 %40, 24
  %42 = add i32 %36, %41
  %43 = load i32, ptr %8, align 4, !tbaa !9
  %44 = add i32 %43, %42
  store i32 %44, ptr %8, align 4, !tbaa !9
  %45 = load ptr, ptr %11, align 8, !tbaa !5
  %46 = getelementptr inbounds i8, ptr %45, i64 4
  %47 = load i8, ptr %46, align 1, !tbaa !11
  %48 = zext i8 %47 to i32
  %49 = load ptr, ptr %11, align 8, !tbaa !5
  %50 = getelementptr inbounds i8, ptr %49, i64 5
  %51 = load i8, ptr %50, align 1, !tbaa !11
  %52 = zext i8 %51 to i32
  %53 = shl i32 %52, 8
  %54 = add i32 %48, %53
  %55 = load ptr, ptr %11, align 8, !tbaa !5
  %56 = getelementptr inbounds i8, ptr %55, i64 6
  %57 = load i8, ptr %56, align 1, !tbaa !11
  %58 = zext i8 %57 to i32
  %59 = shl i32 %58, 16
  %60 = add i32 %54, %59
  %61 = load ptr, ptr %11, align 8, !tbaa !5
  %62 = getelementptr inbounds i8, ptr %61, i64 7
  %63 = load i8, ptr %62, align 1, !tbaa !11
  %64 = zext i8 %63 to i32
  %65 = shl i32 %64, 24
  %66 = add i32 %60, %65
  %67 = load i32, ptr %9, align 4, !tbaa !9
  %68 = add i32 %67, %66
  store i32 %68, ptr %9, align 4, !tbaa !9
  %69 = load ptr, ptr %11, align 8, !tbaa !5
  %70 = getelementptr inbounds i8, ptr %69, i64 8
  %71 = load i8, ptr %70, align 1, !tbaa !11
  %72 = zext i8 %71 to i32
  %73 = load ptr, ptr %11, align 8, !tbaa !5
  %74 = getelementptr inbounds i8, ptr %73, i64 9
  %75 = load i8, ptr %74, align 1, !tbaa !11
  %76 = zext i8 %75 to i32
  %77 = shl i32 %76, 8
  %78 = add i32 %72, %77
  %79 = load ptr, ptr %11, align 8, !tbaa !5
  %80 = getelementptr inbounds i8, ptr %79, i64 10
  %81 = load i8, ptr %80, align 1, !tbaa !11
  %82 = zext i8 %81 to i32
  %83 = shl i32 %82, 16
  %84 = add i32 %78, %83
  %85 = load ptr, ptr %11, align 8, !tbaa !5
  %86 = getelementptr inbounds i8, ptr %85, i64 11
  %87 = load i8, ptr %86, align 1, !tbaa !11
  %88 = zext i8 %87 to i32
  %89 = shl i32 %88, 24
  %90 = add i32 %84, %89
  %91 = load i32, ptr %7, align 4, !tbaa !9
  %92 = add i32 %91, %90
  store i32 %92, ptr %7, align 4, !tbaa !9
  br label %93

93:                                               ; preds = %20
  %94 = load i32, ptr %9, align 4, !tbaa !9
  %95 = load i32, ptr %8, align 4, !tbaa !9
  %96 = sub i32 %95, %94
  store i32 %96, ptr %8, align 4, !tbaa !9
  %97 = load i32, ptr %7, align 4, !tbaa !9
  %98 = load i32, ptr %8, align 4, !tbaa !9
  %99 = sub i32 %98, %97
  store i32 %99, ptr %8, align 4, !tbaa !9
  %100 = load i32, ptr %7, align 4, !tbaa !9
  %101 = lshr i32 %100, 13
  %102 = load i32, ptr %8, align 4, !tbaa !9
  %103 = xor i32 %102, %101
  store i32 %103, ptr %8, align 4, !tbaa !9
  %104 = load i32, ptr %7, align 4, !tbaa !9
  %105 = load i32, ptr %9, align 4, !tbaa !9
  %106 = sub i32 %105, %104
  store i32 %106, ptr %9, align 4, !tbaa !9
  %107 = load i32, ptr %8, align 4, !tbaa !9
  %108 = load i32, ptr %9, align 4, !tbaa !9
  %109 = sub i32 %108, %107
  store i32 %109, ptr %9, align 4, !tbaa !9
  %110 = load i32, ptr %8, align 4, !tbaa !9
  %111 = shl i32 %110, 8
  %112 = load i32, ptr %9, align 4, !tbaa !9
  %113 = xor i32 %112, %111
  store i32 %113, ptr %9, align 4, !tbaa !9
  %114 = load i32, ptr %8, align 4, !tbaa !9
  %115 = load i32, ptr %7, align 4, !tbaa !9
  %116 = sub i32 %115, %114
  store i32 %116, ptr %7, align 4, !tbaa !9
  %117 = load i32, ptr %9, align 4, !tbaa !9
  %118 = load i32, ptr %7, align 4, !tbaa !9
  %119 = sub i32 %118, %117
  store i32 %119, ptr %7, align 4, !tbaa !9
  %120 = load i32, ptr %9, align 4, !tbaa !9
  %121 = lshr i32 %120, 13
  %122 = load i32, ptr %7, align 4, !tbaa !9
  %123 = xor i32 %122, %121
  store i32 %123, ptr %7, align 4, !tbaa !9
  %124 = load i32, ptr %9, align 4, !tbaa !9
  %125 = load i32, ptr %8, align 4, !tbaa !9
  %126 = sub i32 %125, %124
  store i32 %126, ptr %8, align 4, !tbaa !9
  %127 = load i32, ptr %7, align 4, !tbaa !9
  %128 = load i32, ptr %8, align 4, !tbaa !9
  %129 = sub i32 %128, %127
  store i32 %129, ptr %8, align 4, !tbaa !9
  %130 = load i32, ptr %7, align 4, !tbaa !9
  %131 = lshr i32 %130, 12
  %132 = load i32, ptr %8, align 4, !tbaa !9
  %133 = xor i32 %132, %131
  store i32 %133, ptr %8, align 4, !tbaa !9
  %134 = load i32, ptr %7, align 4, !tbaa !9
  %135 = load i32, ptr %9, align 4, !tbaa !9
  %136 = sub i32 %135, %134
  store i32 %136, ptr %9, align 4, !tbaa !9
  %137 = load i32, ptr %8, align 4, !tbaa !9
  %138 = load i32, ptr %9, align 4, !tbaa !9
  %139 = sub i32 %138, %137
  store i32 %139, ptr %9, align 4, !tbaa !9
  %140 = load i32, ptr %8, align 4, !tbaa !9
  %141 = shl i32 %140, 16
  %142 = load i32, ptr %9, align 4, !tbaa !9
  %143 = xor i32 %142, %141
  store i32 %143, ptr %9, align 4, !tbaa !9
  %144 = load i32, ptr %8, align 4, !tbaa !9
  %145 = load i32, ptr %7, align 4, !tbaa !9
  %146 = sub i32 %145, %144
  store i32 %146, ptr %7, align 4, !tbaa !9
  %147 = load i32, ptr %9, align 4, !tbaa !9
  %148 = load i32, ptr %7, align 4, !tbaa !9
  %149 = sub i32 %148, %147
  store i32 %149, ptr %7, align 4, !tbaa !9
  %150 = load i32, ptr %9, align 4, !tbaa !9
  %151 = lshr i32 %150, 5
  %152 = load i32, ptr %7, align 4, !tbaa !9
  %153 = xor i32 %152, %151
  store i32 %153, ptr %7, align 4, !tbaa !9
  %154 = load i32, ptr %9, align 4, !tbaa !9
  %155 = load i32, ptr %8, align 4, !tbaa !9
  %156 = sub i32 %155, %154
  store i32 %156, ptr %8, align 4, !tbaa !9
  %157 = load i32, ptr %7, align 4, !tbaa !9
  %158 = load i32, ptr %8, align 4, !tbaa !9
  %159 = sub i32 %158, %157
  store i32 %159, ptr %8, align 4, !tbaa !9
  %160 = load i32, ptr %7, align 4, !tbaa !9
  %161 = lshr i32 %160, 3
  %162 = load i32, ptr %8, align 4, !tbaa !9
  %163 = xor i32 %162, %161
  store i32 %163, ptr %8, align 4, !tbaa !9
  %164 = load i32, ptr %7, align 4, !tbaa !9
  %165 = load i32, ptr %9, align 4, !tbaa !9
  %166 = sub i32 %165, %164
  store i32 %166, ptr %9, align 4, !tbaa !9
  %167 = load i32, ptr %8, align 4, !tbaa !9
  %168 = load i32, ptr %9, align 4, !tbaa !9
  %169 = sub i32 %168, %167
  store i32 %169, ptr %9, align 4, !tbaa !9
  %170 = load i32, ptr %8, align 4, !tbaa !9
  %171 = shl i32 %170, 10
  %172 = load i32, ptr %9, align 4, !tbaa !9
  %173 = xor i32 %172, %171
  store i32 %173, ptr %9, align 4, !tbaa !9
  %174 = load i32, ptr %8, align 4, !tbaa !9
  %175 = load i32, ptr %7, align 4, !tbaa !9
  %176 = sub i32 %175, %174
  store i32 %176, ptr %7, align 4, !tbaa !9
  %177 = load i32, ptr %9, align 4, !tbaa !9
  %178 = load i32, ptr %7, align 4, !tbaa !9
  %179 = sub i32 %178, %177
  store i32 %179, ptr %7, align 4, !tbaa !9
  %180 = load i32, ptr %9, align 4, !tbaa !9
  %181 = lshr i32 %180, 15
  %182 = load i32, ptr %7, align 4, !tbaa !9
  %183 = xor i32 %182, %181
  store i32 %183, ptr %7, align 4, !tbaa !9
  br label %184

184:                                              ; preds = %93
  br label %185

185:                                              ; preds = %184
  %186 = load ptr, ptr %11, align 8, !tbaa !5
  %187 = getelementptr inbounds i8, ptr %186, i64 12
  store ptr %187, ptr %11, align 8, !tbaa !5
  %188 = load i32, ptr %10, align 4, !tbaa !9
  %189 = sub i32 %188, 12
  store i32 %189, ptr %10, align 4, !tbaa !9
  br label %17, !llvm.loop !12

190:                                              ; preds = %17
  %191 = load i32, ptr %7, align 4, !tbaa !9
  %192 = add i32 %191, 4
  store i32 %192, ptr %7, align 4, !tbaa !9
  %193 = load i32, ptr %10, align 4, !tbaa !9
  switch i32 %193, label %280 [
    i32 11, label %194
    i32 10, label %202
    i32 9, label %210
    i32 8, label %218
    i32 7, label %226
    i32 6, label %234
    i32 5, label %242
    i32 4, label %249
    i32 3, label %257
    i32 2, label %265
    i32 1, label %273
  ]

194:                                              ; preds = %190
  %195 = load ptr, ptr %11, align 8, !tbaa !5
  %196 = getelementptr inbounds i8, ptr %195, i64 10
  %197 = load i8, ptr %196, align 1, !tbaa !11
  %198 = zext i8 %197 to i32
  %199 = shl i32 %198, 24
  %200 = load i32, ptr %7, align 4, !tbaa !9
  %201 = add i32 %200, %199
  store i32 %201, ptr %7, align 4, !tbaa !9
  br label %202

202:                                              ; preds = %194, %190
  %203 = load ptr, ptr %11, align 8, !tbaa !5
  %204 = getelementptr inbounds i8, ptr %203, i64 9
  %205 = load i8, ptr %204, align 1, !tbaa !11
  %206 = zext i8 %205 to i32
  %207 = shl i32 %206, 16
  %208 = load i32, ptr %7, align 4, !tbaa !9
  %209 = add i32 %208, %207
  store i32 %209, ptr %7, align 4, !tbaa !9
  br label %210

210:                                              ; preds = %202, %190
  %211 = load ptr, ptr %11, align 8, !tbaa !5
  %212 = getelementptr inbounds i8, ptr %211, i64 8
  %213 = load i8, ptr %212, align 1, !tbaa !11
  %214 = zext i8 %213 to i32
  %215 = shl i32 %214, 8
  %216 = load i32, ptr %7, align 4, !tbaa !9
  %217 = add i32 %216, %215
  store i32 %217, ptr %7, align 4, !tbaa !9
  br label %218

218:                                              ; preds = %210, %190
  %219 = load ptr, ptr %11, align 8, !tbaa !5
  %220 = getelementptr inbounds i8, ptr %219, i64 7
  %221 = load i8, ptr %220, align 1, !tbaa !11
  %222 = zext i8 %221 to i32
  %223 = shl i32 %222, 24
  %224 = load i32, ptr %9, align 4, !tbaa !9
  %225 = add i32 %224, %223
  store i32 %225, ptr %9, align 4, !tbaa !9
  br label %226

226:                                              ; preds = %218, %190
  %227 = load ptr, ptr %11, align 8, !tbaa !5
  %228 = getelementptr inbounds i8, ptr %227, i64 6
  %229 = load i8, ptr %228, align 1, !tbaa !11
  %230 = zext i8 %229 to i32
  %231 = shl i32 %230, 16
  %232 = load i32, ptr %9, align 4, !tbaa !9
  %233 = add i32 %232, %231
  store i32 %233, ptr %9, align 4, !tbaa !9
  br label %234

234:                                              ; preds = %226, %190
  %235 = load ptr, ptr %11, align 8, !tbaa !5
  %236 = getelementptr inbounds i8, ptr %235, i64 5
  %237 = load i8, ptr %236, align 1, !tbaa !11
  %238 = zext i8 %237 to i32
  %239 = shl i32 %238, 8
  %240 = load i32, ptr %9, align 4, !tbaa !9
  %241 = add i32 %240, %239
  store i32 %241, ptr %9, align 4, !tbaa !9
  br label %242

242:                                              ; preds = %234, %190
  %243 = load ptr, ptr %11, align 8, !tbaa !5
  %244 = getelementptr inbounds i8, ptr %243, i64 4
  %245 = load i8, ptr %244, align 1, !tbaa !11
  %246 = zext i8 %245 to i32
  %247 = load i32, ptr %9, align 4, !tbaa !9
  %248 = add i32 %247, %246
  store i32 %248, ptr %9, align 4, !tbaa !9
  br label %249

249:                                              ; preds = %242, %190
  %250 = load ptr, ptr %11, align 8, !tbaa !5
  %251 = getelementptr inbounds i8, ptr %250, i64 3
  %252 = load i8, ptr %251, align 1, !tbaa !11
  %253 = zext i8 %252 to i32
  %254 = shl i32 %253, 24
  %255 = load i32, ptr %8, align 4, !tbaa !9
  %256 = add i32 %255, %254
  store i32 %256, ptr %8, align 4, !tbaa !9
  br label %257

257:                                              ; preds = %249, %190
  %258 = load ptr, ptr %11, align 8, !tbaa !5
  %259 = getelementptr inbounds i8, ptr %258, i64 2
  %260 = load i8, ptr %259, align 1, !tbaa !11
  %261 = zext i8 %260 to i32
  %262 = shl i32 %261, 16
  %263 = load i32, ptr %8, align 4, !tbaa !9
  %264 = add i32 %263, %262
  store i32 %264, ptr %8, align 4, !tbaa !9
  br label %265

265:                                              ; preds = %257, %190
  %266 = load ptr, ptr %11, align 8, !tbaa !5
  %267 = getelementptr inbounds i8, ptr %266, i64 1
  %268 = load i8, ptr %267, align 1, !tbaa !11
  %269 = zext i8 %268 to i32
  %270 = shl i32 %269, 8
  %271 = load i32, ptr %8, align 4, !tbaa !9
  %272 = add i32 %271, %270
  store i32 %272, ptr %8, align 4, !tbaa !9
  br label %273

273:                                              ; preds = %265, %190
  %274 = load ptr, ptr %11, align 8, !tbaa !5
  %275 = getelementptr inbounds i8, ptr %274, i64 0
  %276 = load i8, ptr %275, align 1, !tbaa !11
  %277 = zext i8 %276 to i32
  %278 = load i32, ptr %8, align 4, !tbaa !9
  %279 = add i32 %278, %277
  store i32 %279, ptr %8, align 4, !tbaa !9
  br label %280

280:                                              ; preds = %273, %190
  br label %281

281:                                              ; preds = %280
  %282 = load i32, ptr %9, align 4, !tbaa !9
  %283 = load i32, ptr %8, align 4, !tbaa !9
  %284 = sub i32 %283, %282
  store i32 %284, ptr %8, align 4, !tbaa !9
  %285 = load i32, ptr %7, align 4, !tbaa !9
  %286 = load i32, ptr %8, align 4, !tbaa !9
  %287 = sub i32 %286, %285
  store i32 %287, ptr %8, align 4, !tbaa !9
  %288 = load i32, ptr %7, align 4, !tbaa !9
  %289 = lshr i32 %288, 13
  %290 = load i32, ptr %8, align 4, !tbaa !9
  %291 = xor i32 %290, %289
  store i32 %291, ptr %8, align 4, !tbaa !9
  %292 = load i32, ptr %7, align 4, !tbaa !9
  %293 = load i32, ptr %9, align 4, !tbaa !9
  %294 = sub i32 %293, %292
  store i32 %294, ptr %9, align 4, !tbaa !9
  %295 = load i32, ptr %8, align 4, !tbaa !9
  %296 = load i32, ptr %9, align 4, !tbaa !9
  %297 = sub i32 %296, %295
  store i32 %297, ptr %9, align 4, !tbaa !9
  %298 = load i32, ptr %8, align 4, !tbaa !9
  %299 = shl i32 %298, 8
  %300 = load i32, ptr %9, align 4, !tbaa !9
  %301 = xor i32 %300, %299
  store i32 %301, ptr %9, align 4, !tbaa !9
  %302 = load i32, ptr %8, align 4, !tbaa !9
  %303 = load i32, ptr %7, align 4, !tbaa !9
  %304 = sub i32 %303, %302
  store i32 %304, ptr %7, align 4, !tbaa !9
  %305 = load i32, ptr %9, align 4, !tbaa !9
  %306 = load i32, ptr %7, align 4, !tbaa !9
  %307 = sub i32 %306, %305
  store i32 %307, ptr %7, align 4, !tbaa !9
  %308 = load i32, ptr %9, align 4, !tbaa !9
  %309 = lshr i32 %308, 13
  %310 = load i32, ptr %7, align 4, !tbaa !9
  %311 = xor i32 %310, %309
  store i32 %311, ptr %7, align 4, !tbaa !9
  %312 = load i32, ptr %9, align 4, !tbaa !9
  %313 = load i32, ptr %8, align 4, !tbaa !9
  %314 = sub i32 %313, %312
  store i32 %314, ptr %8, align 4, !tbaa !9
  %315 = load i32, ptr %7, align 4, !tbaa !9
  %316 = load i32, ptr %8, align 4, !tbaa !9
  %317 = sub i32 %316, %315
  store i32 %317, ptr %8, align 4, !tbaa !9
  %318 = load i32, ptr %7, align 4, !tbaa !9
  %319 = lshr i32 %318, 12
  %320 = load i32, ptr %8, align 4, !tbaa !9
  %321 = xor i32 %320, %319
  store i32 %321, ptr %8, align 4, !tbaa !9
  %322 = load i32, ptr %7, align 4, !tbaa !9
  %323 = load i32, ptr %9, align 4, !tbaa !9
  %324 = sub i32 %323, %322
  store i32 %324, ptr %9, align 4, !tbaa !9
  %325 = load i32, ptr %8, align 4, !tbaa !9
  %326 = load i32, ptr %9, align 4, !tbaa !9
  %327 = sub i32 %326, %325
  store i32 %327, ptr %9, align 4, !tbaa !9
  %328 = load i32, ptr %8, align 4, !tbaa !9
  %329 = shl i32 %328, 16
  %330 = load i32, ptr %9, align 4, !tbaa !9
  %331 = xor i32 %330, %329
  store i32 %331, ptr %9, align 4, !tbaa !9
  %332 = load i32, ptr %8, align 4, !tbaa !9
  %333 = load i32, ptr %7, align 4, !tbaa !9
  %334 = sub i32 %333, %332
  store i32 %334, ptr %7, align 4, !tbaa !9
  %335 = load i32, ptr %9, align 4, !tbaa !9
  %336 = load i32, ptr %7, align 4, !tbaa !9
  %337 = sub i32 %336, %335
  store i32 %337, ptr %7, align 4, !tbaa !9
  %338 = load i32, ptr %9, align 4, !tbaa !9
  %339 = lshr i32 %338, 5
  %340 = load i32, ptr %7, align 4, !tbaa !9
  %341 = xor i32 %340, %339
  store i32 %341, ptr %7, align 4, !tbaa !9
  %342 = load i32, ptr %9, align 4, !tbaa !9
  %343 = load i32, ptr %8, align 4, !tbaa !9
  %344 = sub i32 %343, %342
  store i32 %344, ptr %8, align 4, !tbaa !9
  %345 = load i32, ptr %7, align 4, !tbaa !9
  %346 = load i32, ptr %8, align 4, !tbaa !9
  %347 = sub i32 %346, %345
  store i32 %347, ptr %8, align 4, !tbaa !9
  %348 = load i32, ptr %7, align 4, !tbaa !9
  %349 = lshr i32 %348, 3
  %350 = load i32, ptr %8, align 4, !tbaa !9
  %351 = xor i32 %350, %349
  store i32 %351, ptr %8, align 4, !tbaa !9
  %352 = load i32, ptr %7, align 4, !tbaa !9
  %353 = load i32, ptr %9, align 4, !tbaa !9
  %354 = sub i32 %353, %352
  store i32 %354, ptr %9, align 4, !tbaa !9
  %355 = load i32, ptr %8, align 4, !tbaa !9
  %356 = load i32, ptr %9, align 4, !tbaa !9
  %357 = sub i32 %356, %355
  store i32 %357, ptr %9, align 4, !tbaa !9
  %358 = load i32, ptr %8, align 4, !tbaa !9
  %359 = shl i32 %358, 10
  %360 = load i32, ptr %9, align 4, !tbaa !9
  %361 = xor i32 %360, %359
  store i32 %361, ptr %9, align 4, !tbaa !9
  %362 = load i32, ptr %8, align 4, !tbaa !9
  %363 = load i32, ptr %7, align 4, !tbaa !9
  %364 = sub i32 %363, %362
  store i32 %364, ptr %7, align 4, !tbaa !9
  %365 = load i32, ptr %9, align 4, !tbaa !9
  %366 = load i32, ptr %7, align 4, !tbaa !9
  %367 = sub i32 %366, %365
  store i32 %367, ptr %7, align 4, !tbaa !9
  %368 = load i32, ptr %9, align 4, !tbaa !9
  %369 = lshr i32 %368, 15
  %370 = load i32, ptr %7, align 4, !tbaa !9
  %371 = xor i32 %370, %369
  store i32 %371, ptr %7, align 4, !tbaa !9
  br label %372

372:                                              ; preds = %281
  br label %373

373:                                              ; preds = %372
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  br label %374

374:                                              ; preds = %373
  br label %375

375:                                              ; preds = %374
  br label %376

376:                                              ; preds = %375
  br label %377

377:                                              ; preds = %376
  br label %378

378:                                              ; preds = %377
  store ptr null, ptr %6, align 8, !tbaa !5
  %379 = load ptr, ptr %4, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.table_cmap, ptr %379, i32 0, i32 0
  %381 = load ptr, ptr %380, align 8, !tbaa !14
  %382 = icmp ne ptr %381, null
  br i1 %382, label %383, label %497

383:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  br label %384

384:                                              ; preds = %383
  %385 = load i32, ptr %7, align 4, !tbaa !9
  %386 = load ptr, ptr %4, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.table_cmap, ptr %386, i32 0, i32 0
  %388 = load ptr, ptr %387, align 8, !tbaa !14
  %389 = getelementptr inbounds %struct.cmap_Entry, ptr %388, i32 0, i32 0
  %390 = getelementptr inbounds %struct.UT_hash_handle, ptr %389, i32 0, i32 0
  %391 = load ptr, ptr %390, align 8, !tbaa !16
  %392 = getelementptr inbounds %struct.UT_hash_table, ptr %391, i32 0, i32 1
  %393 = load i32, ptr %392, align 8, !tbaa !21
  %394 = sub i32 %393, 1
  %395 = and i32 %385, %394
  store i32 %395, ptr %12, align 4, !tbaa !9
  br label %396

396:                                              ; preds = %384
  br label %397

397:                                              ; preds = %396
  br label %398

398:                                              ; preds = %397
  %399 = load ptr, ptr %4, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.table_cmap, ptr %399, i32 0, i32 0
  %401 = load ptr, ptr %400, align 8, !tbaa !14
  %402 = getelementptr inbounds %struct.cmap_Entry, ptr %401, i32 0, i32 0
  %403 = getelementptr inbounds %struct.UT_hash_handle, ptr %402, i32 0, i32 0
  %404 = load ptr, ptr %403, align 8, !tbaa !16
  %405 = getelementptr inbounds %struct.UT_hash_table, ptr %404, i32 0, i32 0
  %406 = load ptr, ptr %405, align 8, !tbaa !24
  %407 = load i32, ptr %12, align 4, !tbaa !9
  %408 = zext i32 %407 to i64
  %409 = getelementptr inbounds %struct.UT_hash_bucket, ptr %406, i64 %408
  %410 = getelementptr inbounds %struct.UT_hash_bucket, ptr %409, i32 0, i32 0
  %411 = load ptr, ptr %410, align 8, !tbaa !25
  %412 = icmp ne ptr %411, null
  br i1 %412, label %413, label %440

413:                                              ; preds = %398
  br label %414

414:                                              ; preds = %413
  %415 = load ptr, ptr %4, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.table_cmap, ptr %415, i32 0, i32 0
  %417 = load ptr, ptr %416, align 8, !tbaa !14
  %418 = getelementptr inbounds %struct.cmap_Entry, ptr %417, i32 0, i32 0
  %419 = getelementptr inbounds %struct.UT_hash_handle, ptr %418, i32 0, i32 0
  %420 = load ptr, ptr %419, align 8, !tbaa !16
  %421 = getelementptr inbounds %struct.UT_hash_table, ptr %420, i32 0, i32 0
  %422 = load ptr, ptr %421, align 8, !tbaa !24
  %423 = load i32, ptr %12, align 4, !tbaa !9
  %424 = zext i32 %423 to i64
  %425 = getelementptr inbounds %struct.UT_hash_bucket, ptr %422, i64 %424
  %426 = getelementptr inbounds %struct.UT_hash_bucket, ptr %425, i32 0, i32 0
  %427 = load ptr, ptr %426, align 8, !tbaa !25
  %428 = load ptr, ptr %4, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.table_cmap, ptr %428, i32 0, i32 0
  %430 = load ptr, ptr %429, align 8, !tbaa !14
  %431 = getelementptr inbounds %struct.cmap_Entry, ptr %430, i32 0, i32 0
  %432 = getelementptr inbounds %struct.UT_hash_handle, ptr %431, i32 0, i32 0
  %433 = load ptr, ptr %432, align 8, !tbaa !16
  %434 = getelementptr inbounds %struct.UT_hash_table, ptr %433, i32 0, i32 5
  %435 = load i64, ptr %434, align 8, !tbaa !27
  %436 = sub i64 0, %435
  %437 = getelementptr inbounds i8, ptr %427, i64 %436
  store ptr %437, ptr %6, align 8, !tbaa !5
  br label %438

438:                                              ; preds = %414
  br label %439

439:                                              ; preds = %438
  br label %441

440:                                              ; preds = %398
  store ptr null, ptr %6, align 8, !tbaa !5
  br label %441

441:                                              ; preds = %440, %439
  br label %442

442:                                              ; preds = %493, %441
  %443 = load ptr, ptr %6, align 8, !tbaa !5
  %444 = icmp ne ptr %443, null
  br i1 %444, label %445, label %494

445:                                              ; preds = %442
  %446 = load ptr, ptr %6, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.cmap_Entry, ptr %446, i32 0, i32 0
  %448 = getelementptr inbounds %struct.UT_hash_handle, ptr %447, i32 0, i32 7
  %449 = load i32, ptr %448, align 4, !tbaa !28
  %450 = load i32, ptr %7, align 4, !tbaa !9
  %451 = icmp eq i32 %449, %450
  br i1 %451, label %452, label %468

452:                                              ; preds = %445
  %453 = load ptr, ptr %6, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.cmap_Entry, ptr %453, i32 0, i32 0
  %455 = getelementptr inbounds %struct.UT_hash_handle, ptr %454, i32 0, i32 6
  %456 = load i32, ptr %455, align 8, !tbaa !29
  %457 = zext i32 %456 to i64
  %458 = icmp eq i64 %457, 4
  br i1 %458, label %459, label %468

459:                                              ; preds = %452
  %460 = load ptr, ptr %6, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.cmap_Entry, ptr %460, i32 0, i32 0
  %462 = getelementptr inbounds %struct.UT_hash_handle, ptr %461, i32 0, i32 5
  %463 = load ptr, ptr %462, align 8, !tbaa !30
  %464 = call i32 @memcmp(ptr noundef %463, ptr noundef %5, i64 noundef 4) #4
  %465 = icmp eq i32 %464, 0
  br i1 %465, label %466, label %467

466:                                              ; preds = %459
  br label %494

467:                                              ; preds = %459
  br label %468

468:                                              ; preds = %467, %452, %445
  %469 = load ptr, ptr %6, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.cmap_Entry, ptr %469, i32 0, i32 0
  %471 = getelementptr inbounds %struct.UT_hash_handle, ptr %470, i32 0, i32 4
  %472 = load ptr, ptr %471, align 8, !tbaa !31
  %473 = icmp ne ptr %472, null
  br i1 %473, label %474, label %492

474:                                              ; preds = %468
  br label %475

475:                                              ; preds = %474
  %476 = load ptr, ptr %6, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.cmap_Entry, ptr %476, i32 0, i32 0
  %478 = getelementptr inbounds %struct.UT_hash_handle, ptr %477, i32 0, i32 4
  %479 = load ptr, ptr %478, align 8, !tbaa !31
  %480 = load ptr, ptr %4, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.table_cmap, ptr %480, i32 0, i32 0
  %482 = load ptr, ptr %481, align 8, !tbaa !14
  %483 = getelementptr inbounds %struct.cmap_Entry, ptr %482, i32 0, i32 0
  %484 = getelementptr inbounds %struct.UT_hash_handle, ptr %483, i32 0, i32 0
  %485 = load ptr, ptr %484, align 8, !tbaa !16
  %486 = getelementptr inbounds %struct.UT_hash_table, ptr %485, i32 0, i32 5
  %487 = load i64, ptr %486, align 8, !tbaa !27
  %488 = sub i64 0, %487
  %489 = getelementptr inbounds i8, ptr %479, i64 %488
  store ptr %489, ptr %6, align 8, !tbaa !5
  br label %490

490:                                              ; preds = %475
  br label %491

491:                                              ; preds = %490
  br label %493

492:                                              ; preds = %468
  store ptr null, ptr %6, align 8, !tbaa !5
  br label %493

493:                                              ; preds = %492, %491
  br label %442, !llvm.loop !32

494:                                              ; preds = %466, %442
  br label %495

495:                                              ; preds = %494
  br label %496

496:                                              ; preds = %495
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  br label %497

497:                                              ; preds = %496, %378
  br label %498

498:                                              ; preds = %497
  br label %499

499:                                              ; preds = %498
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  br label %500

500:                                              ; preds = %499
  br label %501

501:                                              ; preds = %500
  %502 = load ptr, ptr %6, align 8, !tbaa !5
  %503 = icmp ne ptr %502, null
  br i1 %503, label %504, label %507

504:                                              ; preds = %501
  %505 = load ptr, ptr %6, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.cmap_Entry, ptr %505, i32 0, i32 2
  store ptr %506, ptr %3, align 8
  store i32 1, ptr %13, align 4
  br label %508

507:                                              ; preds = %501
  store ptr null, ptr %3, align 8
  store i32 1, ptr %13, align 4
  br label %508

508:                                              ; preds = %507, %504
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  %509 = load ptr, ptr %3, align 8
  ret ptr %509
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }
attributes #4 = { nounwind willreturn memory(read) }

!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 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!15, !6, i64 0}
!15 = !{!"", !6, i64 0, !6, i64 8}
!16 = !{!17, !6, i64 0}
!17 = !{!"", !18, i64 0, !10, i64 56, !19, i64 64}
!18 = !{!"UT_hash_handle", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !10, i64 48, !10, i64 52}
!19 = !{!"otfcc_Handle", !10, i64 0, !20, i64 4, !6, i64 8}
!20 = !{!"short", !7, i64 0}
!21 = !{!22, !10, i64 8}
!22 = !{!"UT_hash_table", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !6, i64 24, !23, i64 32, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56}
!23 = !{!"long", !7, i64 0}
!24 = !{!22, !6, i64 0}
!25 = !{!26, !6, i64 0}
!26 = !{!"UT_hash_bucket", !6, i64 0, !10, i64 8, !10, i64 12}
!27 = !{!22, !23, i64 32}
!28 = !{!17, !10, i64 52}
!29 = !{!17, !10, i64 48}
!30 = !{!17, !6, i64 40}
!31 = !{!17, !6, i64 32}
!32 = distinct !{!32, !13}


; 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.UT_hash_bucket = type { ptr, i32, i32 }

; Function Attrs: nofree nounwind memory(read, inaccessiblemem: none) uwtable
define dso_local ptr @otfcc_cmapLookup(ptr nocapture noundef readonly %0, i32 noundef %1) local_unnamed_addr #0 {
  %3 = alloca i32, align 4
  store i32 %1, ptr %3, align 4, !tbaa !5
  %4 = and i32 %1, -16777216
  %5 = and i32 %1, 16711680
  %6 = and i32 %1, 65280
  %7 = and i32 %1, 255
  %8 = add i32 %4, 17973517
  %9 = add i32 %8, %5
  %10 = add i32 %9, %6
  %11 = add i32 %10, %7
  %12 = xor i32 %11, 522093
  %13 = sub i32 -1622558010, %12
  %14 = shl i32 %12, 8
  %15 = xor i32 %13, %14
  %16 = add i32 %12, %15
  %17 = sub i32 -17973517, %16
  %18 = lshr i32 %15, 13
  %19 = xor i32 %17, %18
  %20 = add i32 %15, %19
  %21 = sub i32 %12, %20
  %22 = lshr i32 %19, 12
  %23 = xor i32 %21, %22
  %24 = add i32 %19, %23
  %25 = sub i32 %15, %24
  %26 = shl i32 %23, 16
  %27 = xor i32 %25, %26
  %28 = add i32 %23, %27
  %29 = sub i32 %19, %28
  %30 = lshr i32 %27, 5
  %31 = xor i32 %29, %30
  %32 = add i32 %27, %31
  %33 = sub i32 %23, %32
  %34 = lshr i32 %31, 3
  %35 = xor i32 %33, %34
  %36 = add i32 %31, %35
  %37 = sub i32 %27, %36
  %38 = shl i32 %35, 10
  %39 = xor i32 %37, %38
  %40 = add i32 %35, %39
  %41 = sub i32 %31, %40
  %42 = lshr i32 %39, 15
  %43 = xor i32 %41, %42
  %44 = load ptr, ptr %0, align 8, !tbaa !9
  %.not = icmp eq ptr %44, null
  br i1 %.not, label %.loopexit, label %45

45:                                               ; preds = %2
  %46 = load ptr, ptr %44, align 8, !tbaa !12
  %47 = getelementptr inbounds i8, ptr %46, i64 8
  %48 = load i32, ptr %47, align 8, !tbaa !17
  %49 = add i32 %48, -1
  %50 = and i32 %49, %43
  %51 = load ptr, ptr %46, align 8, !tbaa !20
  %52 = zext i32 %50 to i64
  %53 = getelementptr inbounds %struct.UT_hash_bucket, ptr %51, i64 %52
  %54 = load ptr, ptr %53, align 8, !tbaa !21
  %.not192 = icmp eq ptr %54, null
  br i1 %.not192, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %45
  %55 = getelementptr inbounds i8, ptr %46, i64 32
  %56 = load i64, ptr %55, align 8, !tbaa !23
  %57 = sub i64 0, %56
  %58 = getelementptr inbounds i8, ptr %54, i64 %57
  %59 = getelementptr inbounds i8, ptr %46, i64 32
  br label %60

60:                                               ; preds = %75, %.lr.ph
  %.1186211 = phi ptr [ %58, %.lr.ph ], [ %78, %75 ]
  %61 = getelementptr inbounds i8, ptr %.1186211, i64 52
  %62 = load i32, ptr %61, align 4, !tbaa !24
  %63 = icmp eq i32 %62, %43
  br i1 %63, label %64, label %72

64:                                               ; preds = %60
  %65 = getelementptr inbounds i8, ptr %.1186211, i64 48
  %66 = load i32, ptr %65, align 8, !tbaa !25
  %67 = icmp eq i32 %66, 4
  br i1 %67, label %68, label %72

68:                                               ; preds = %64
  %69 = getelementptr inbounds i8, ptr %.1186211, i64 40
  %70 = load ptr, ptr %69, align 8, !tbaa !26
  %bcmp = call i32 @bcmp(ptr noundef nonnull dereferenceable(4) %70, ptr noundef nonnull dereferenceable(4) %3, i64 4)
  %71 = icmp eq i32 %bcmp, 0
  br i1 %71, label %.loopexit, label %72

72:                                               ; preds = %68, %64, %60
  %73 = getelementptr inbounds i8, ptr %.1186211, i64 32
  %74 = load ptr, ptr %73, align 8, !tbaa !27
  %.not194 = icmp eq ptr %74, null
  br i1 %.not194, label %.loopexit, label %75

75:                                               ; preds = %72
  %76 = load i64, ptr %59, align 8, !tbaa !23
  %77 = sub i64 0, %76
  %78 = getelementptr inbounds i8, ptr %74, i64 %77
  br label %60, !llvm.loop !28

.loopexit:                                        ; preds = %72, %68, %45, %2
  %.3188 = phi ptr [ null, %2 ], [ null, %45 ], [ null, %72 ], [ %.1186211, %68 ]
  %.not195 = icmp eq ptr %.3188, null
  %79 = getelementptr inbounds i8, ptr %.3188, i64 64
  %.0 = select i1 %.not195, ptr null, ptr %79
  ret ptr %.0
}

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #1

attributes #0 = { nofree nounwind memory(read, inaccessiblemem: none) 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 = { nofree nounwind willreturn memory(argmem: read) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 8}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!13, !11, i64 0}
!13 = !{!"", !14, i64 0, !6, i64 56, !15, i64 64}
!14 = !{!"UT_hash_handle", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !6, i64 48, !6, i64 52}
!15 = !{!"otfcc_Handle", !6, i64 0, !16, i64 4, !11, i64 8}
!16 = !{!"short", !7, i64 0}
!17 = !{!18, !6, i64 8}
!18 = !{!"UT_hash_table", !11, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !11, i64 24, !19, i64 32, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56}
!19 = !{!"long", !7, i64 0}
!20 = !{!18, !11, i64 0}
!21 = !{!22, !11, i64 0}
!22 = !{!"UT_hash_bucket", !11, i64 0, !6, i64 8, !6, i64 12}
!23 = !{!18, !19, i64 32}
!24 = !{!13, !6, i64 52}
!25 = !{!13, !6, i64 48}
!26 = !{!13, !11, i64 40}
!27 = !{!13, !11, i64 32}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}


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