; LLVM IR from AdaptiveCpp/AdaptiveCpp :: src/libkernel/sscp/amdgpu/atomic.ll_ (acpp_sscp_cmp_exch_strong_i16)

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z20builtin_memory_orderN7hipsycl4sycl12memory_orderE(i32 noundef) #0

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z20builtin_memory_scopeN7hipsycl4sycl12memory_scopeE(i32 noundef) #0

; Function Attrs: alwaysinline mustprogress nounwind uwtable
define dso_local zeroext i1 @__acpp_sscp_cmp_exch_strong_i16(i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, ptr noundef %5, i16 noundef signext %6) #1 {
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i16, align 2
  %15 = alloca i16, align 2
  %16 = alloca i8, align 1
  store i32 %0, ptr %8, align 4, !tbaa !5
  store i32 %1, ptr %9, align 4, !tbaa !9
  store i32 %2, ptr %10, align 4, !tbaa !9
  store i32 %3, ptr %11, align 4, !tbaa !11
  store ptr %4, ptr %12, align 8, !tbaa !13
  store ptr %5, ptr %13, align 8, !tbaa !13
  store i16 %6, ptr %14, align 2, !tbaa !15
  %17 = load ptr, ptr %12, align 8, !tbaa !13
  %18 = load i32, ptr %9, align 4, !tbaa !9
  %19 = call noundef i32 @_Z20builtin_memory_orderN7hipsycl4sycl12memory_orderE(i32 noundef %18) #2
  %20 = load i32, ptr %11, align 4, !tbaa !11
  %21 = call noundef i32 @_Z20builtin_memory_scopeN7hipsycl4sycl12memory_scopeE(i32 noundef %20) #2
  %22 = load ptr, ptr %13, align 8, !tbaa !13
  %23 = load i16, ptr %14, align 2, !tbaa !15
  store i16 %23, ptr %15, align 2, !tbaa !15
  %24 = load i32, ptr %10, align 4, !tbaa !9
  %25 = call noundef i32 @_Z20builtin_memory_orderN7hipsycl4sycl12memory_orderE(i32 noundef %24) #2
  switch i32 %19, label %26 [
    i32 1, label %27
    i32 2, label %27
    i32 3, label %28
    i32 4, label %29
    i32 5, label %30
  ]

26:                                               ; preds = %7
  switch i32 %21, label %38 [
    i32 1, label %34
    i32 2, label %35
    i32 3, label %36
    i32 4, label %37
  ]

27:                                               ; preds = %7, %7
  switch i32 %21, label %184 [
    i32 1, label %180
    i32 2, label %181
    i32 3, label %182
    i32 4, label %183
  ]

28:                                               ; preds = %7
  switch i32 %21, label %330 [
    i32 1, label %326
    i32 2, label %327
    i32 3, label %328
    i32 4, label %329
  ]

29:                                               ; preds = %7
  switch i32 %21, label %476 [
    i32 1, label %472
    i32 2, label %473
    i32 3, label %474
    i32 4, label %475
  ]

30:                                               ; preds = %7
  switch i32 %21, label %622 [
    i32 1, label %618
    i32 2, label %619
    i32 3, label %620
    i32 4, label %621
  ]

31:                                               ; preds = %623, %477, %331, %185, %39
  %32 = load i8, ptr %16, align 1, !tbaa !17, !range !19, !noundef !20
  %33 = trunc i8 %32 to i1
  ret i1 %33

34:                                               ; preds = %26
  switch i32 %25, label %40 [
    i32 1, label %46
    i32 2, label %46
    i32 5, label %52
  ]

35:                                               ; preds = %26
  switch i32 %25, label %68 [
    i32 1, label %74
    i32 2, label %74
    i32 5, label %80
  ]

36:                                               ; preds = %26
  switch i32 %25, label %96 [
    i32 1, label %102
    i32 2, label %102
    i32 5, label %108
  ]

37:                                               ; preds = %26
  switch i32 %25, label %124 [
    i32 1, label %130
    i32 2, label %130
    i32 5, label %136
  ]

38:                                               ; preds = %26
  switch i32 %25, label %152 [
    i32 1, label %158
    i32 2, label %158
    i32 5, label %164
  ]

39:                                               ; preds = %170, %142, %114, %86, %58
  br label %31

40:                                               ; preds = %34
  %41 = load i16, ptr %22, align 2
  %42 = load i16, ptr %15, align 2
  %43 = cmpxchg ptr %17, i16 %41, i16 %42 monotonic monotonic, align 2
  %44 = extractvalue { i16, i1 } %43, 0
  %45 = extractvalue { i16, i1 } %43, 1
  br i1 %45, label %60, label %59

46:                                               ; preds = %34, %34
  %47 = load i16, ptr %22, align 2
  %48 = load i16, ptr %15, align 2
  %49 = cmpxchg ptr %17, i16 %47, i16 %48 monotonic acquire, align 2
  %50 = extractvalue { i16, i1 } %49, 0
  %51 = extractvalue { i16, i1 } %49, 1
  br i1 %51, label %63, label %62

52:                                               ; preds = %34
  %53 = load i16, ptr %22, align 2
  %54 = load i16, ptr %15, align 2
  %55 = cmpxchg ptr %17, i16 %53, i16 %54 monotonic seq_cst, align 2
  %56 = extractvalue { i16, i1 } %55, 0
  %57 = extractvalue { i16, i1 } %55, 1
  br i1 %57, label %66, label %65

58:                                               ; preds = %66, %63, %60
  br label %39

59:                                               ; preds = %40
  store i16 %44, ptr %22, align 2
  br label %60

60:                                               ; preds = %59, %40
  %61 = zext i1 %45 to i8
  store i8 %61, ptr %16, align 1, !tbaa !17
  br label %58

62:                                               ; preds = %46
  store i16 %50, ptr %22, align 2
  br label %63

63:                                               ; preds = %62, %46
  %64 = zext i1 %51 to i8
  store i8 %64, ptr %16, align 1, !tbaa !17
  br label %58

65:                                               ; preds = %52
  store i16 %56, ptr %22, align 2
  br label %66

66:                                               ; preds = %65, %52
  %67 = zext i1 %57 to i8
  store i8 %67, ptr %16, align 1, !tbaa !17
  br label %58

68:                                               ; preds = %35
  %69 = load i16, ptr %22, align 2
  %70 = load i16, ptr %15, align 2
  %71 = cmpxchg ptr %17, i16 %69, i16 %70 monotonic monotonic, align 2
  %72 = extractvalue { i16, i1 } %71, 0
  %73 = extractvalue { i16, i1 } %71, 1
  br i1 %73, label %88, label %87

74:                                               ; preds = %35, %35
  %75 = load i16, ptr %22, align 2
  %76 = load i16, ptr %15, align 2
  %77 = cmpxchg ptr %17, i16 %75, i16 %76 monotonic acquire, align 2
  %78 = extractvalue { i16, i1 } %77, 0
  %79 = extractvalue { i16, i1 } %77, 1
  br i1 %79, label %91, label %90

80:                                               ; preds = %35
  %81 = load i16, ptr %22, align 2
  %82 = load i16, ptr %15, align 2
  %83 = cmpxchg ptr %17, i16 %81, i16 %82 monotonic seq_cst, align 2
  %84 = extractvalue { i16, i1 } %83, 0
  %85 = extractvalue { i16, i1 } %83, 1
  br i1 %85, label %94, label %93

86:                                               ; preds = %94, %91, %88
  br label %39

87:                                               ; preds = %68
  store i16 %72, ptr %22, align 2
  br label %88

88:                                               ; preds = %87, %68
  %89 = zext i1 %73 to i8
  store i8 %89, ptr %16, align 1, !tbaa !17
  br label %86

90:                                               ; preds = %74
  store i16 %78, ptr %22, align 2
  br label %91

91:                                               ; preds = %90, %74
  %92 = zext i1 %79 to i8
  store i8 %92, ptr %16, align 1, !tbaa !17
  br label %86

93:                                               ; preds = %80
  store i16 %84, ptr %22, align 2
  br label %94

94:                                               ; preds = %93, %80
  %95 = zext i1 %85 to i8
  store i8 %95, ptr %16, align 1, !tbaa !17
  br label %86

96:                                               ; preds = %36
  %97 = load i16, ptr %22, align 2
  %98 = load i16, ptr %15, align 2
  %99 = cmpxchg ptr %17, i16 %97, i16 %98 monotonic monotonic, align 2
  %100 = extractvalue { i16, i1 } %99, 0
  %101 = extractvalue { i16, i1 } %99, 1
  br i1 %101, label %116, label %115

102:                                              ; preds = %36, %36
  %103 = load i16, ptr %22, align 2
  %104 = load i16, ptr %15, align 2
  %105 = cmpxchg ptr %17, i16 %103, i16 %104 monotonic acquire, align 2
  %106 = extractvalue { i16, i1 } %105, 0
  %107 = extractvalue { i16, i1 } %105, 1
  br i1 %107, label %119, label %118

108:                                              ; preds = %36
  %109 = load i16, ptr %22, align 2
  %110 = load i16, ptr %15, align 2
  %111 = cmpxchg ptr %17, i16 %109, i16 %110 monotonic seq_cst, align 2
  %112 = extractvalue { i16, i1 } %111, 0
  %113 = extractvalue { i16, i1 } %111, 1
  br i1 %113, label %122, label %121

114:                                              ; preds = %122, %119, %116
  br label %39

115:                                              ; preds = %96
  store i16 %100, ptr %22, align 2
  br label %116

116:                                              ; preds = %115, %96
  %117 = zext i1 %101 to i8
  store i8 %117, ptr %16, align 1, !tbaa !17
  br label %114

118:                                              ; preds = %102
  store i16 %106, ptr %22, align 2
  br label %119

119:                                              ; preds = %118, %102
  %120 = zext i1 %107 to i8
  store i8 %120, ptr %16, align 1, !tbaa !17
  br label %114

121:                                              ; preds = %108
  store i16 %112, ptr %22, align 2
  br label %122

122:                                              ; preds = %121, %108
  %123 = zext i1 %113 to i8
  store i8 %123, ptr %16, align 1, !tbaa !17
  br label %114

124:                                              ; preds = %37
  %125 = load i16, ptr %22, align 2
  %126 = load i16, ptr %15, align 2
  %127 = cmpxchg ptr %17, i16 %125, i16 %126 monotonic monotonic, align 2
  %128 = extractvalue { i16, i1 } %127, 0
  %129 = extractvalue { i16, i1 } %127, 1
  br i1 %129, label %144, label %143

130:                                              ; preds = %37, %37
  %131 = load i16, ptr %22, align 2
  %132 = load i16, ptr %15, align 2
  %133 = cmpxchg ptr %17, i16 %131, i16 %132 monotonic acquire, align 2
  %134 = extractvalue { i16, i1 } %133, 0
  %135 = extractvalue { i16, i1 } %133, 1
  br i1 %135, label %147, label %146

136:                                              ; preds = %37
  %137 = load i16, ptr %22, align 2
  %138 = load i16, ptr %15, align 2
  %139 = cmpxchg ptr %17, i16 %137, i16 %138 monotonic seq_cst, align 2
  %140 = extractvalue { i16, i1 } %139, 0
  %141 = extractvalue { i16, i1 } %139, 1
  br i1 %141, label %150, label %149

142:                                              ; preds = %150, %147, %144
  br label %39

143:                                              ; preds = %124
  store i16 %128, ptr %22, align 2
  br label %144

144:                                              ; preds = %143, %124
  %145 = zext i1 %129 to i8
  store i8 %145, ptr %16, align 1, !tbaa !17
  br label %142

146:                                              ; preds = %130
  store i16 %134, ptr %22, align 2
  br label %147

147:                                              ; preds = %146, %130
  %148 = zext i1 %135 to i8
  store i8 %148, ptr %16, align 1, !tbaa !17
  br label %142

149:                                              ; preds = %136
  store i16 %140, ptr %22, align 2
  br label %150

150:                                              ; preds = %149, %136
  %151 = zext i1 %141 to i8
  store i8 %151, ptr %16, align 1, !tbaa !17
  br label %142

152:                                              ; preds = %38
  %153 = load i16, ptr %22, align 2
  %154 = load i16, ptr %15, align 2
  %155 = cmpxchg ptr %17, i16 %153, i16 %154 monotonic monotonic, align 2
  %156 = extractvalue { i16, i1 } %155, 0
  %157 = extractvalue { i16, i1 } %155, 1
  br i1 %157, label %172, label %171

158:                                              ; preds = %38, %38
  %159 = load i16, ptr %22, align 2
  %160 = load i16, ptr %15, align 2
  %161 = cmpxchg ptr %17, i16 %159, i16 %160 monotonic acquire, align 2
  %162 = extractvalue { i16, i1 } %161, 0
  %163 = extractvalue { i16, i1 } %161, 1
  br i1 %163, label %175, label %174

164:                                              ; preds = %38
  %165 = load i16, ptr %22, align 2
  %166 = load i16, ptr %15, align 2
  %167 = cmpxchg ptr %17, i16 %165, i16 %166 monotonic seq_cst, align 2
  %168 = extractvalue { i16, i1 } %167, 0
  %169 = extractvalue { i16, i1 } %167, 1
  br i1 %169, label %178, label %177

170:                                              ; preds = %178, %175, %172
  br label %39

171:                                              ; preds = %152
  store i16 %156, ptr %22, align 2
  br label %172

172:                                              ; preds = %171, %152
  %173 = zext i1 %157 to i8
  store i8 %173, ptr %16, align 1, !tbaa !17
  br label %170

174:                                              ; preds = %158
  store i16 %162, ptr %22, align 2
  br label %175

175:                                              ; preds = %174, %158
  %176 = zext i1 %163 to i8
  store i8 %176, ptr %16, align 1, !tbaa !17
  br label %170

177:                                              ; preds = %164
  store i16 %168, ptr %22, align 2
  br label %178

178:                                              ; preds = %177, %164
  %179 = zext i1 %169 to i8
  store i8 %179, ptr %16, align 1, !tbaa !17
  br label %170

180:                                              ; preds = %27
  switch i32 %25, label %186 [
    i32 1, label %192
    i32 2, label %192
    i32 5, label %198
  ]

181:                                              ; preds = %27
  switch i32 %25, label %214 [
    i32 1, label %220
    i32 2, label %220
    i32 5, label %226
  ]

182:                                              ; preds = %27
  switch i32 %25, label %242 [
    i32 1, label %248
    i32 2, label %248
    i32 5, label %254
  ]

183:                                              ; preds = %27
  switch i32 %25, label %270 [
    i32 1, label %276
    i32 2, label %276
    i32 5, label %282
  ]

184:                                              ; preds = %27
  switch i32 %25, label %298 [
    i32 1, label %304
    i32 2, label %304
    i32 5, label %310
  ]

185:                                              ; preds = %316, %288, %260, %232, %204
  br label %31

186:                                              ; preds = %180
  %187 = load i16, ptr %22, align 2
  %188 = load i16, ptr %15, align 2
  %189 = cmpxchg ptr %17, i16 %187, i16 %188 acquire monotonic, align 2
  %190 = extractvalue { i16, i1 } %189, 0
  %191 = extractvalue { i16, i1 } %189, 1
  br i1 %191, label %206, label %205

192:                                              ; preds = %180, %180
  %193 = load i16, ptr %22, align 2
  %194 = load i16, ptr %15, align 2
  %195 = cmpxchg ptr %17, i16 %193, i16 %194 acquire acquire, align 2
  %196 = extractvalue { i16, i1 } %195, 0
  %197 = extractvalue { i16, i1 } %195, 1
  br i1 %197, label %209, label %208

198:                                              ; preds = %180
  %199 = load i16, ptr %22, align 2
  %200 = load i16, ptr %15, align 2
  %201 = cmpxchg ptr %17, i16 %199, i16 %200 acquire seq_cst, align 2
  %202 = extractvalue { i16, i1 } %201, 0
  %203 = extractvalue { i16, i1 } %201, 1
  br i1 %203, label %212, label %211

204:                                              ; preds = %212, %209, %206
  br label %185

205:                                              ; preds = %186
  store i16 %190, ptr %22, align 2
  br label %206

206:                                              ; preds = %205, %186
  %207 = zext i1 %191 to i8
  store i8 %207, ptr %16, align 1, !tbaa !17
  br label %204

208:                                              ; preds = %192
  store i16 %196, ptr %22, align 2
  br label %209

209:                                              ; preds = %208, %192
  %210 = zext i1 %197 to i8
  store i8 %210, ptr %16, align 1, !tbaa !17
  br label %204

211:                                              ; preds = %198
  store i16 %202, ptr %22, align 2
  br label %212

212:                                              ; preds = %211, %198
  %213 = zext i1 %203 to i8
  store i8 %213, ptr %16, align 1, !tbaa !17
  br label %204

214:                                              ; preds = %181
  %215 = load i16, ptr %22, align 2
  %216 = load i16, ptr %15, align 2
  %217 = cmpxchg ptr %17, i16 %215, i16 %216 acquire monotonic, align 2
  %218 = extractvalue { i16, i1 } %217, 0
  %219 = extractvalue { i16, i1 } %217, 1
  br i1 %219, label %234, label %233

220:                                              ; preds = %181, %181
  %221 = load i16, ptr %22, align 2
  %222 = load i16, ptr %15, align 2
  %223 = cmpxchg ptr %17, i16 %221, i16 %222 acquire acquire, align 2
  %224 = extractvalue { i16, i1 } %223, 0
  %225 = extractvalue { i16, i1 } %223, 1
  br i1 %225, label %237, label %236

226:                                              ; preds = %181
  %227 = load i16, ptr %22, align 2
  %228 = load i16, ptr %15, align 2
  %229 = cmpxchg ptr %17, i16 %227, i16 %228 acquire seq_cst, align 2
  %230 = extractvalue { i16, i1 } %229, 0
  %231 = extractvalue { i16, i1 } %229, 1
  br i1 %231, label %240, label %239

232:                                              ; preds = %240, %237, %234
  br label %185

233:                                              ; preds = %214
  store i16 %218, ptr %22, align 2
  br label %234

234:                                              ; preds = %233, %214
  %235 = zext i1 %219 to i8
  store i8 %235, ptr %16, align 1, !tbaa !17
  br label %232

236:                                              ; preds = %220
  store i16 %224, ptr %22, align 2
  br label %237

237:                                              ; preds = %236, %220
  %238 = zext i1 %225 to i8
  store i8 %238, ptr %16, align 1, !tbaa !17
  br label %232

239:                                              ; preds = %226
  store i16 %230, ptr %22, align 2
  br label %240

240:                                              ; preds = %239, %226
  %241 = zext i1 %231 to i8
  store i8 %241, ptr %16, align 1, !tbaa !17
  br label %232

242:                                              ; preds = %182
  %243 = load i16, ptr %22, align 2
  %244 = load i16, ptr %15, align 2
  %245 = cmpxchg ptr %17, i16 %243, i16 %244 acquire monotonic, align 2
  %246 = extractvalue { i16, i1 } %245, 0
  %247 = extractvalue { i16, i1 } %245, 1
  br i1 %247, label %262, label %261

248:                                              ; preds = %182, %182
  %249 = load i16, ptr %22, align 2
  %250 = load i16, ptr %15, align 2
  %251 = cmpxchg ptr %17, i16 %249, i16 %250 acquire acquire, align 2
  %252 = extractvalue { i16, i1 } %251, 0
  %253 = extractvalue { i16, i1 } %251, 1
  br i1 %253, label %265, label %264

254:                                              ; preds = %182
  %255 = load i16, ptr %22, align 2
  %256 = load i16, ptr %15, align 2
  %257 = cmpxchg ptr %17, i16 %255, i16 %256 acquire seq_cst, align 2
  %258 = extractvalue { i16, i1 } %257, 0
  %259 = extractvalue { i16, i1 } %257, 1
  br i1 %259, label %268, label %267

260:                                              ; preds = %268, %265, %262
  br label %185

261:                                              ; preds = %242
  store i16 %246, ptr %22, align 2
  br label %262

262:                                              ; preds = %261, %242
  %263 = zext i1 %247 to i8
  store i8 %263, ptr %16, align 1, !tbaa !17
  br label %260

264:                                              ; preds = %248
  store i16 %252, ptr %22, align 2
  br label %265

265:                                              ; preds = %264, %248
  %266 = zext i1 %253 to i8
  store i8 %266, ptr %16, align 1, !tbaa !17
  br label %260

267:                                              ; preds = %254
  store i16 %258, ptr %22, align 2
  br label %268

268:                                              ; preds = %267, %254
  %269 = zext i1 %259 to i8
  store i8 %269, ptr %16, align 1, !tbaa !17
  br label %260

270:                                              ; preds = %183
  %271 = load i16, ptr %22, align 2
  %272 = load i16, ptr %15, align 2
  %273 = cmpxchg ptr %17, i16 %271, i16 %272 acquire monotonic, align 2
  %274 = extractvalue { i16, i1 } %273, 0
  %275 = extractvalue { i16, i1 } %273, 1
  br i1 %275, label %290, label %289

276:                                              ; preds = %183, %183
  %277 = load i16, ptr %22, align 2
  %278 = load i16, ptr %15, align 2
  %279 = cmpxchg ptr %17, i16 %277, i16 %278 acquire acquire, align 2
  %280 = extractvalue { i16, i1 } %279, 0
  %281 = extractvalue { i16, i1 } %279, 1
  br i1 %281, label %293, label %292

282:                                              ; preds = %183
  %283 = load i16, ptr %22, align 2
  %284 = load i16, ptr %15, align 2
  %285 = cmpxchg ptr %17, i16 %283, i16 %284 acquire seq_cst, align 2
  %286 = extractvalue { i16, i1 } %285, 0
  %287 = extractvalue { i16, i1 } %285, 1
  br i1 %287, label %296, label %295

288:                                              ; preds = %296, %293, %290
  br label %185

289:                                              ; preds = %270
  store i16 %274, ptr %22, align 2
  br label %290

290:                                              ; preds = %289, %270
  %291 = zext i1 %275 to i8
  store i8 %291, ptr %16, align 1, !tbaa !17
  br label %288

292:                                              ; preds = %276
  store i16 %280, ptr %22, align 2
  br label %293

293:                                              ; preds = %292, %276
  %294 = zext i1 %281 to i8
  store i8 %294, ptr %16, align 1, !tbaa !17
  br label %288

295:                                              ; preds = %282
  store i16 %286, ptr %22, align 2
  br label %296

296:                                              ; preds = %295, %282
  %297 = zext i1 %287 to i8
  store i8 %297, ptr %16, align 1, !tbaa !17
  br label %288

298:                                              ; preds = %184
  %299 = load i16, ptr %22, align 2
  %300 = load i16, ptr %15, align 2
  %301 = cmpxchg ptr %17, i16 %299, i16 %300 acquire monotonic, align 2
  %302 = extractvalue { i16, i1 } %301, 0
  %303 = extractvalue { i16, i1 } %301, 1
  br i1 %303, label %318, label %317

304:                                              ; preds = %184, %184
  %305 = load i16, ptr %22, align 2
  %306 = load i16, ptr %15, align 2
  %307 = cmpxchg ptr %17, i16 %305, i16 %306 acquire acquire, align 2
  %308 = extractvalue { i16, i1 } %307, 0
  %309 = extractvalue { i16, i1 } %307, 1
  br i1 %309, label %321, label %320

310:                                              ; preds = %184
  %311 = load i16, ptr %22, align 2
  %312 = load i16, ptr %15, align 2
  %313 = cmpxchg ptr %17, i16 %311, i16 %312 acquire seq_cst, align 2
  %314 = extractvalue { i16, i1 } %313, 0
  %315 = extractvalue { i16, i1 } %313, 1
  br i1 %315, label %324, label %323

316:                                              ; preds = %324, %321, %318
  br label %185

317:                                              ; preds = %298
  store i16 %302, ptr %22, align 2
  br label %318

318:                                              ; preds = %317, %298
  %319 = zext i1 %303 to i8
  store i8 %319, ptr %16, align 1, !tbaa !17
  br label %316

320:                                              ; preds = %304
  store i16 %308, ptr %22, align 2
  br label %321

321:                                              ; preds = %320, %304
  %322 = zext i1 %309 to i8
  store i8 %322, ptr %16, align 1, !tbaa !17
  br label %316

323:                                              ; preds = %310
  store i16 %314, ptr %22, align 2
  br label %324

324:                                              ; preds = %323, %310
  %325 = zext i1 %315 to i8
  store i8 %325, ptr %16, align 1, !tbaa !17
  br label %316

326:                                              ; preds = %28
  switch i32 %25, label %332 [
    i32 1, label %338
    i32 2, label %338
    i32 5, label %344
  ]

327:                                              ; preds = %28
  switch i32 %25, label %360 [
    i32 1, label %366
    i32 2, label %366
    i32 5, label %372
  ]

328:                                              ; preds = %28
  switch i32 %25, label %388 [
    i32 1, label %394
    i32 2, label %394
    i32 5, label %400
  ]

329:                                              ; preds = %28
  switch i32 %25, label %416 [
    i32 1, label %422
    i32 2, label %422
    i32 5, label %428
  ]

330:                                              ; preds = %28
  switch i32 %25, label %444 [
    i32 1, label %450
    i32 2, label %450
    i32 5, label %456
  ]

331:                                              ; preds = %462, %434, %406, %378, %350
  br label %31

332:                                              ; preds = %326
  %333 = load i16, ptr %22, align 2
  %334 = load i16, ptr %15, align 2
  %335 = cmpxchg ptr %17, i16 %333, i16 %334 release monotonic, align 2
  %336 = extractvalue { i16, i1 } %335, 0
  %337 = extractvalue { i16, i1 } %335, 1
  br i1 %337, label %352, label %351

338:                                              ; preds = %326, %326
  %339 = load i16, ptr %22, align 2
  %340 = load i16, ptr %15, align 2
  %341 = cmpxchg ptr %17, i16 %339, i16 %340 release acquire, align 2
  %342 = extractvalue { i16, i1 } %341, 0
  %343 = extractvalue { i16, i1 } %341, 1
  br i1 %343, label %355, label %354

344:                                              ; preds = %326
  %345 = load i16, ptr %22, align 2
  %346 = load i16, ptr %15, align 2
  %347 = cmpxchg ptr %17, i16 %345, i16 %346 release seq_cst, align 2
  %348 = extractvalue { i16, i1 } %347, 0
  %349 = extractvalue { i16, i1 } %347, 1
  br i1 %349, label %358, label %357

350:                                              ; preds = %358, %355, %352
  br label %331

351:                                              ; preds = %332
  store i16 %336, ptr %22, align 2
  br label %352

352:                                              ; preds = %351, %332
  %353 = zext i1 %337 to i8
  store i8 %353, ptr %16, align 1, !tbaa !17
  br label %350

354:                                              ; preds = %338
  store i16 %342, ptr %22, align 2
  br label %355

355:                                              ; preds = %354, %338
  %356 = zext i1 %343 to i8
  store i8 %356, ptr %16, align 1, !tbaa !17
  br label %350

357:                                              ; preds = %344
  store i16 %348, ptr %22, align 2
  br label %358

358:                                              ; preds = %357, %344
  %359 = zext i1 %349 to i8
  store i8 %359, ptr %16, align 1, !tbaa !17
  br label %350

360:                                              ; preds = %327
  %361 = load i16, ptr %22, align 2
  %362 = load i16, ptr %15, align 2
  %363 = cmpxchg ptr %17, i16 %361, i16 %362 release monotonic, align 2
  %364 = extractvalue { i16, i1 } %363, 0
  %365 = extractvalue { i16, i1 } %363, 1
  br i1 %365, label %380, label %379

366:                                              ; preds = %327, %327
  %367 = load i16, ptr %22, align 2
  %368 = load i16, ptr %15, align 2
  %369 = cmpxchg ptr %17, i16 %367, i16 %368 release acquire, align 2
  %370 = extractvalue { i16, i1 } %369, 0
  %371 = extractvalue { i16, i1 } %369, 1
  br i1 %371, label %383, label %382

372:                                              ; preds = %327
  %373 = load i16, ptr %22, align 2
  %374 = load i16, ptr %15, align 2
  %375 = cmpxchg ptr %17, i16 %373, i16 %374 release seq_cst, align 2
  %376 = extractvalue { i16, i1 } %375, 0
  %377 = extractvalue { i16, i1 } %375, 1
  br i1 %377, label %386, label %385

378:                                              ; preds = %386, %383, %380
  br label %331

379:                                              ; preds = %360
  store i16 %364, ptr %22, align 2
  br label %380

380:                                              ; preds = %379, %360
  %381 = zext i1 %365 to i8
  store i8 %381, ptr %16, align 1, !tbaa !17
  br label %378

382:                                              ; preds = %366
  store i16 %370, ptr %22, align 2
  br label %383

383:                                              ; preds = %382, %366
  %384 = zext i1 %371 to i8
  store i8 %384, ptr %16, align 1, !tbaa !17
  br label %378

385:                                              ; preds = %372
  store i16 %376, ptr %22, align 2
  br label %386

386:                                              ; preds = %385, %372
  %387 = zext i1 %377 to i8
  store i8 %387, ptr %16, align 1, !tbaa !17
  br label %378

388:                                              ; preds = %328
  %389 = load i16, ptr %22, align 2
  %390 = load i16, ptr %15, align 2
  %391 = cmpxchg ptr %17, i16 %389, i16 %390 release monotonic, align 2
  %392 = extractvalue { i16, i1 } %391, 0
  %393 = extractvalue { i16, i1 } %391, 1
  br i1 %393, label %408, label %407

394:                                              ; preds = %328, %328
  %395 = load i16, ptr %22, align 2
  %396 = load i16, ptr %15, align 2
  %397 = cmpxchg ptr %17, i16 %395, i16 %396 release acquire, align 2
  %398 = extractvalue { i16, i1 } %397, 0
  %399 = extractvalue { i16, i1 } %397, 1
  br i1 %399, label %411, label %410

400:                                              ; preds = %328
  %401 = load i16, ptr %22, align 2
  %402 = load i16, ptr %15, align 2
  %403 = cmpxchg ptr %17, i16 %401, i16 %402 release seq_cst, align 2
  %404 = extractvalue { i16, i1 } %403, 0
  %405 = extractvalue { i16, i1 } %403, 1
  br i1 %405, label %414, label %413

406:                                              ; preds = %414, %411, %408
  br label %331

407:                                              ; preds = %388
  store i16 %392, ptr %22, align 2
  br label %408

408:                                              ; preds = %407, %388
  %409 = zext i1 %393 to i8
  store i8 %409, ptr %16, align 1, !tbaa !17
  br label %406

410:                                              ; preds = %394
  store i16 %398, ptr %22, align 2
  br label %411

411:                                              ; preds = %410, %394
  %412 = zext i1 %399 to i8
  store i8 %412, ptr %16, align 1, !tbaa !17
  br label %406

413:                                              ; preds = %400
  store i16 %404, ptr %22, align 2
  br label %414

414:                                              ; preds = %413, %400
  %415 = zext i1 %405 to i8
  store i8 %415, ptr %16, align 1, !tbaa !17
  br label %406

416:                                              ; preds = %329
  %417 = load i16, ptr %22, align 2
  %418 = load i16, ptr %15, align 2
  %419 = cmpxchg ptr %17, i16 %417, i16 %418 release monotonic, align 2
  %420 = extractvalue { i16, i1 } %419, 0
  %421 = extractvalue { i16, i1 } %419, 1
  br i1 %421, label %436, label %435

422:                                              ; preds = %329, %329
  %423 = load i16, ptr %22, align 2
  %424 = load i16, ptr %15, align 2
  %425 = cmpxchg ptr %17, i16 %423, i16 %424 release acquire, align 2
  %426 = extractvalue { i16, i1 } %425, 0
  %427 = extractvalue { i16, i1 } %425, 1
  br i1 %427, label %439, label %438

428:                                              ; preds = %329
  %429 = load i16, ptr %22, align 2
  %430 = load i16, ptr %15, align 2
  %431 = cmpxchg ptr %17, i16 %429, i16 %430 release seq_cst, align 2
  %432 = extractvalue { i16, i1 } %431, 0
  %433 = extractvalue { i16, i1 } %431, 1
  br i1 %433, label %442, label %441

434:                                              ; preds = %442, %439, %436
  br label %331

435:                                              ; preds = %416
  store i16 %420, ptr %22, align 2
  br label %436

436:                                              ; preds = %435, %416
  %437 = zext i1 %421 to i8
  store i8 %437, ptr %16, align 1, !tbaa !17
  br label %434

438:                                              ; preds = %422
  store i16 %426, ptr %22, align 2
  br label %439

439:                                              ; preds = %438, %422
  %440 = zext i1 %427 to i8
  store i8 %440, ptr %16, align 1, !tbaa !17
  br label %434

441:                                              ; preds = %428
  store i16 %432, ptr %22, align 2
  br label %442

442:                                              ; preds = %441, %428
  %443 = zext i1 %433 to i8
  store i8 %443, ptr %16, align 1, !tbaa !17
  br label %434

444:                                              ; preds = %330
  %445 = load i16, ptr %22, align 2
  %446 = load i16, ptr %15, align 2
  %447 = cmpxchg ptr %17, i16 %445, i16 %446 release monotonic, align 2
  %448 = extractvalue { i16, i1 } %447, 0
  %449 = extractvalue { i16, i1 } %447, 1
  br i1 %449, label %464, label %463

450:                                              ; preds = %330, %330
  %451 = load i16, ptr %22, align 2
  %452 = load i16, ptr %15, align 2
  %453 = cmpxchg ptr %17, i16 %451, i16 %452 release acquire, align 2
  %454 = extractvalue { i16, i1 } %453, 0
  %455 = extractvalue { i16, i1 } %453, 1
  br i1 %455, label %467, label %466

456:                                              ; preds = %330
  %457 = load i16, ptr %22, align 2
  %458 = load i16, ptr %15, align 2
  %459 = cmpxchg ptr %17, i16 %457, i16 %458 release seq_cst, align 2
  %460 = extractvalue { i16, i1 } %459, 0
  %461 = extractvalue { i16, i1 } %459, 1
  br i1 %461, label %470, label %469

462:                                              ; preds = %470, %467, %464
  br label %331

463:                                              ; preds = %444
  store i16 %448, ptr %22, align 2
  br label %464

464:                                              ; preds = %463, %444
  %465 = zext i1 %449 to i8
  store i8 %465, ptr %16, align 1, !tbaa !17
  br label %462

466:                                              ; preds = %450
  store i16 %454, ptr %22, align 2
  br label %467

467:                                              ; preds = %466, %450
  %468 = zext i1 %455 to i8
  store i8 %468, ptr %16, align 1, !tbaa !17
  br label %462

469:                                              ; preds = %456
  store i16 %460, ptr %22, align 2
  br label %470

470:                                              ; preds = %469, %456
  %471 = zext i1 %461 to i8
  store i8 %471, ptr %16, align 1, !tbaa !17
  br label %462

472:                                              ; preds = %29
  switch i32 %25, label %478 [
    i32 1, label %484
    i32 2, label %484
    i32 5, label %490
  ]

473:                                              ; preds = %29
  switch i32 %25, label %506 [
    i32 1, label %512
    i32 2, label %512
    i32 5, label %518
  ]

474:                                              ; preds = %29
  switch i32 %25, label %534 [
    i32 1, label %540
    i32 2, label %540
    i32 5, label %546
  ]

475:                                              ; preds = %29
  switch i32 %25, label %562 [
    i32 1, label %568
    i32 2, label %568
    i32 5, label %574
  ]

476:                                              ; preds = %29
  switch i32 %25, label %590 [
    i32 1, label %596
    i32 2, label %596
    i32 5, label %602
  ]

477:                                              ; preds = %608, %580, %552, %524, %496
  br label %31

478:                                              ; preds = %472
  %479 = load i16, ptr %22, align 2
  %480 = load i16, ptr %15, align 2
  %481 = cmpxchg ptr %17, i16 %479, i16 %480 acq_rel monotonic, align 2
  %482 = extractvalue { i16, i1 } %481, 0
  %483 = extractvalue { i16, i1 } %481, 1
  br i1 %483, label %498, label %497

484:                                              ; preds = %472, %472
  %485 = load i16, ptr %22, align 2
  %486 = load i16, ptr %15, align 2
  %487 = cmpxchg ptr %17, i16 %485, i16 %486 acq_rel acquire, align 2
  %488 = extractvalue { i16, i1 } %487, 0
  %489 = extractvalue { i16, i1 } %487, 1
  br i1 %489, label %501, label %500

490:                                              ; preds = %472
  %491 = load i16, ptr %22, align 2
  %492 = load i16, ptr %15, align 2
  %493 = cmpxchg ptr %17, i16 %491, i16 %492 acq_rel seq_cst, align 2
  %494 = extractvalue { i16, i1 } %493, 0
  %495 = extractvalue { i16, i1 } %493, 1
  br i1 %495, label %504, label %503

496:                                              ; preds = %504, %501, %498
  br label %477

497:                                              ; preds = %478
  store i16 %482, ptr %22, align 2
  br label %498

498:                                              ; preds = %497, %478
  %499 = zext i1 %483 to i8
  store i8 %499, ptr %16, align 1, !tbaa !17
  br label %496

500:                                              ; preds = %484
  store i16 %488, ptr %22, align 2
  br label %501

501:                                              ; preds = %500, %484
  %502 = zext i1 %489 to i8
  store i8 %502, ptr %16, align 1, !tbaa !17
  br label %496

503:                                              ; preds = %490
  store i16 %494, ptr %22, align 2
  br label %504

504:                                              ; preds = %503, %490
  %505 = zext i1 %495 to i8
  store i8 %505, ptr %16, align 1, !tbaa !17
  br label %496

506:                                              ; preds = %473
  %507 = load i16, ptr %22, align 2
  %508 = load i16, ptr %15, align 2
  %509 = cmpxchg ptr %17, i16 %507, i16 %508 acq_rel monotonic, align 2
  %510 = extractvalue { i16, i1 } %509, 0
  %511 = extractvalue { i16, i1 } %509, 1
  br i1 %511, label %526, label %525

512:                                              ; preds = %473, %473
  %513 = load i16, ptr %22, align 2
  %514 = load i16, ptr %15, align 2
  %515 = cmpxchg ptr %17, i16 %513, i16 %514 acq_rel acquire, align 2
  %516 = extractvalue { i16, i1 } %515, 0
  %517 = extractvalue { i16, i1 } %515, 1
  br i1 %517, label %529, label %528

518:                                              ; preds = %473
  %519 = load i16, ptr %22, align 2
  %520 = load i16, ptr %15, align 2
  %521 = cmpxchg ptr %17, i16 %519, i16 %520 acq_rel seq_cst, align 2
  %522 = extractvalue { i16, i1 } %521, 0
  %523 = extractvalue { i16, i1 } %521, 1
  br i1 %523, label %532, label %531

524:                                              ; preds = %532, %529, %526
  br label %477

525:                                              ; preds = %506
  store i16 %510, ptr %22, align 2
  br label %526

526:                                              ; preds = %525, %506
  %527 = zext i1 %511 to i8
  store i8 %527, ptr %16, align 1, !tbaa !17
  br label %524

528:                                              ; preds = %512
  store i16 %516, ptr %22, align 2
  br label %529

529:                                              ; preds = %528, %512
  %530 = zext i1 %517 to i8
  store i8 %530, ptr %16, align 1, !tbaa !17
  br label %524

531:                                              ; preds = %518
  store i16 %522, ptr %22, align 2
  br label %532

532:                                              ; preds = %531, %518
  %533 = zext i1 %523 to i8
  store i8 %533, ptr %16, align 1, !tbaa !17
  br label %524

534:                                              ; preds = %474
  %535 = load i16, ptr %22, align 2
  %536 = load i16, ptr %15, align 2
  %537 = cmpxchg ptr %17, i16 %535, i16 %536 acq_rel monotonic, align 2
  %538 = extractvalue { i16, i1 } %537, 0
  %539 = extractvalue { i16, i1 } %537, 1
  br i1 %539, label %554, label %553

540:                                              ; preds = %474, %474
  %541 = load i16, ptr %22, align 2
  %542 = load i16, ptr %15, align 2
  %543 = cmpxchg ptr %17, i16 %541, i16 %542 acq_rel acquire, align 2
  %544 = extractvalue { i16, i1 } %543, 0
  %545 = extractvalue { i16, i1 } %543, 1
  br i1 %545, label %557, label %556

546:                                              ; preds = %474
  %547 = load i16, ptr %22, align 2
  %548 = load i16, ptr %15, align 2
  %549 = cmpxchg ptr %17, i16 %547, i16 %548 acq_rel seq_cst, align 2
  %550 = extractvalue { i16, i1 } %549, 0
  %551 = extractvalue { i16, i1 } %549, 1
  br i1 %551, label %560, label %559

552:                                              ; preds = %560, %557, %554
  br label %477

553:                                              ; preds = %534
  store i16 %538, ptr %22, align 2
  br label %554

554:                                              ; preds = %553, %534
  %555 = zext i1 %539 to i8
  store i8 %555, ptr %16, align 1, !tbaa !17
  br label %552

556:                                              ; preds = %540
  store i16 %544, ptr %22, align 2
  br label %557

557:                                              ; preds = %556, %540
  %558 = zext i1 %545 to i8
  store i8 %558, ptr %16, align 1, !tbaa !17
  br label %552

559:                                              ; preds = %546
  store i16 %550, ptr %22, align 2
  br label %560

560:                                              ; preds = %559, %546
  %561 = zext i1 %551 to i8
  store i8 %561, ptr %16, align 1, !tbaa !17
  br label %552

562:                                              ; preds = %475
  %563 = load i16, ptr %22, align 2
  %564 = load i16, ptr %15, align 2
  %565 = cmpxchg ptr %17, i16 %563, i16 %564 acq_rel monotonic, align 2
  %566 = extractvalue { i16, i1 } %565, 0
  %567 = extractvalue { i16, i1 } %565, 1
  br i1 %567, label %582, label %581

568:                                              ; preds = %475, %475
  %569 = load i16, ptr %22, align 2
  %570 = load i16, ptr %15, align 2
  %571 = cmpxchg ptr %17, i16 %569, i16 %570 acq_rel acquire, align 2
  %572 = extractvalue { i16, i1 } %571, 0
  %573 = extractvalue { i16, i1 } %571, 1
  br i1 %573, label %585, label %584

574:                                              ; preds = %475
  %575 = load i16, ptr %22, align 2
  %576 = load i16, ptr %15, align 2
  %577 = cmpxchg ptr %17, i16 %575, i16 %576 acq_rel seq_cst, align 2
  %578 = extractvalue { i16, i1 } %577, 0
  %579 = extractvalue { i16, i1 } %577, 1
  br i1 %579, label %588, label %587

580:                                              ; preds = %588, %585, %582
  br label %477

581:                                              ; preds = %562
  store i16 %566, ptr %22, align 2
  br label %582

582:                                              ; preds = %581, %562
  %583 = zext i1 %567 to i8
  store i8 %583, ptr %16, align 1, !tbaa !17
  br label %580

584:                                              ; preds = %568
  store i16 %572, ptr %22, align 2
  br label %585

585:                                              ; preds = %584, %568
  %586 = zext i1 %573 to i8
  store i8 %586, ptr %16, align 1, !tbaa !17
  br label %580

587:                                              ; preds = %574
  store i16 %578, ptr %22, align 2
  br label %588

588:                                              ; preds = %587, %574
  %589 = zext i1 %579 to i8
  store i8 %589, ptr %16, align 1, !tbaa !17
  br label %580

590:                                              ; preds = %476
  %591 = load i16, ptr %22, align 2
  %592 = load i16, ptr %15, align 2
  %593 = cmpxchg ptr %17, i16 %591, i16 %592 acq_rel monotonic, align 2
  %594 = extractvalue { i16, i1 } %593, 0
  %595 = extractvalue { i16, i1 } %593, 1
  br i1 %595, label %610, label %609

596:                                              ; preds = %476, %476
  %597 = load i16, ptr %22, align 2
  %598 = load i16, ptr %15, align 2
  %599 = cmpxchg ptr %17, i16 %597, i16 %598 acq_rel acquire, align 2
  %600 = extractvalue { i16, i1 } %599, 0
  %601 = extractvalue { i16, i1 } %599, 1
  br i1 %601, label %613, label %612

602:                                              ; preds = %476
  %603 = load i16, ptr %22, align 2
  %604 = load i16, ptr %15, align 2
  %605 = cmpxchg ptr %17, i16 %603, i16 %604 acq_rel seq_cst, align 2
  %606 = extractvalue { i16, i1 } %605, 0
  %607 = extractvalue { i16, i1 } %605, 1
  br i1 %607, label %616, label %615

608:                                              ; preds = %616, %613, %610
  br label %477

609:                                              ; preds = %590
  store i16 %594, ptr %22, align 2
  br label %610

610:                                              ; preds = %609, %590
  %611 = zext i1 %595 to i8
  store i8 %611, ptr %16, align 1, !tbaa !17
  br label %608

612:                                              ; preds = %596
  store i16 %600, ptr %22, align 2
  br label %613

613:                                              ; preds = %612, %596
  %614 = zext i1 %601 to i8
  store i8 %614, ptr %16, align 1, !tbaa !17
  br label %608

615:                                              ; preds = %602
  store i16 %606, ptr %22, align 2
  br label %616

616:                                              ; preds = %615, %602
  %617 = zext i1 %607 to i8
  store i8 %617, ptr %16, align 1, !tbaa !17
  br label %608

618:                                              ; preds = %30
  switch i32 %25, label %624 [
    i32 1, label %630
    i32 2, label %630
    i32 5, label %636
  ]

619:                                              ; preds = %30
  switch i32 %25, label %652 [
    i32 1, label %658
    i32 2, label %658
    i32 5, label %664
  ]

620:                                              ; preds = %30
  switch i32 %25, label %680 [
    i32 1, label %686
    i32 2, label %686
    i32 5, label %692
  ]

621:                                              ; preds = %30
  switch i32 %25, label %708 [
    i32 1, label %714
    i32 2, label %714
    i32 5, label %720
  ]

622:                                              ; preds = %30
  switch i32 %25, label %736 [
    i32 1, label %742
    i32 2, label %742
    i32 5, label %748
  ]

623:                                              ; preds = %754, %726, %698, %670, %642
  br label %31

624:                                              ; preds = %618
  %625 = load i16, ptr %22, align 2
  %626 = load i16, ptr %15, align 2
  %627 = cmpxchg ptr %17, i16 %625, i16 %626 seq_cst monotonic, align 2
  %628 = extractvalue { i16, i1 } %627, 0
  %629 = extractvalue { i16, i1 } %627, 1
  br i1 %629, label %644, label %643

630:                                              ; preds = %618, %618
  %631 = load i16, ptr %22, align 2
  %632 = load i16, ptr %15, align 2
  %633 = cmpxchg ptr %17, i16 %631, i16 %632 seq_cst acquire, align 2
  %634 = extractvalue { i16, i1 } %633, 0
  %635 = extractvalue { i16, i1 } %633, 1
  br i1 %635, label %647, label %646

636:                                              ; preds = %618
  %637 = load i16, ptr %22, align 2
  %638 = load i16, ptr %15, align 2
  %639 = cmpxchg ptr %17, i16 %637, i16 %638 seq_cst seq_cst, align 2
  %640 = extractvalue { i16, i1 } %639, 0
  %641 = extractvalue { i16, i1 } %639, 1
  br i1 %641, label %650, label %649

642:                                              ; preds = %650, %647, %644
  br label %623

643:                                              ; preds = %624
  store i16 %628, ptr %22, align 2
  br label %644

644:                                              ; preds = %643, %624
  %645 = zext i1 %629 to i8
  store i8 %645, ptr %16, align 1, !tbaa !17
  br label %642

646:                                              ; preds = %630
  store i16 %634, ptr %22, align 2
  br label %647

647:                                              ; preds = %646, %630
  %648 = zext i1 %635 to i8
  store i8 %648, ptr %16, align 1, !tbaa !17
  br label %642

649:                                              ; preds = %636
  store i16 %640, ptr %22, align 2
  br label %650

650:                                              ; preds = %649, %636
  %651 = zext i1 %641 to i8
  store i8 %651, ptr %16, align 1, !tbaa !17
  br label %642

652:                                              ; preds = %619
  %653 = load i16, ptr %22, align 2
  %654 = load i16, ptr %15, align 2
  %655 = cmpxchg ptr %17, i16 %653, i16 %654 seq_cst monotonic, align 2
  %656 = extractvalue { i16, i1 } %655, 0
  %657 = extractvalue { i16, i1 } %655, 1
  br i1 %657, label %672, label %671

658:                                              ; preds = %619, %619
  %659 = load i16, ptr %22, align 2
  %660 = load i16, ptr %15, align 2
  %661 = cmpxchg ptr %17, i16 %659, i16 %660 seq_cst acquire, align 2
  %662 = extractvalue { i16, i1 } %661, 0
  %663 = extractvalue { i16, i1 } %661, 1
  br i1 %663, label %675, label %674

664:                                              ; preds = %619
  %665 = load i16, ptr %22, align 2
  %666 = load i16, ptr %15, align 2
  %667 = cmpxchg ptr %17, i16 %665, i16 %666 seq_cst seq_cst, align 2
  %668 = extractvalue { i16, i1 } %667, 0
  %669 = extractvalue { i16, i1 } %667, 1
  br i1 %669, label %678, label %677

670:                                              ; preds = %678, %675, %672
  br label %623

671:                                              ; preds = %652
  store i16 %656, ptr %22, align 2
  br label %672

672:                                              ; preds = %671, %652
  %673 = zext i1 %657 to i8
  store i8 %673, ptr %16, align 1, !tbaa !17
  br label %670

674:                                              ; preds = %658
  store i16 %662, ptr %22, align 2
  br label %675

675:                                              ; preds = %674, %658
  %676 = zext i1 %663 to i8
  store i8 %676, ptr %16, align 1, !tbaa !17
  br label %670

677:                                              ; preds = %664
  store i16 %668, ptr %22, align 2
  br label %678

678:                                              ; preds = %677, %664
  %679 = zext i1 %669 to i8
  store i8 %679, ptr %16, align 1, !tbaa !17
  br label %670

680:                                              ; preds = %620
  %681 = load i16, ptr %22, align 2
  %682 = load i16, ptr %15, align 2
  %683 = cmpxchg ptr %17, i16 %681, i16 %682 seq_cst monotonic, align 2
  %684 = extractvalue { i16, i1 } %683, 0
  %685 = extractvalue { i16, i1 } %683, 1
  br i1 %685, label %700, label %699

686:                                              ; preds = %620, %620
  %687 = load i16, ptr %22, align 2
  %688 = load i16, ptr %15, align 2
  %689 = cmpxchg ptr %17, i16 %687, i16 %688 seq_cst acquire, align 2
  %690 = extractvalue { i16, i1 } %689, 0
  %691 = extractvalue { i16, i1 } %689, 1
  br i1 %691, label %703, label %702

692:                                              ; preds = %620
  %693 = load i16, ptr %22, align 2
  %694 = load i16, ptr %15, align 2
  %695 = cmpxchg ptr %17, i16 %693, i16 %694 seq_cst seq_cst, align 2
  %696 = extractvalue { i16, i1 } %695, 0
  %697 = extractvalue { i16, i1 } %695, 1
  br i1 %697, label %706, label %705

698:                                              ; preds = %706, %703, %700
  br label %623

699:                                              ; preds = %680
  store i16 %684, ptr %22, align 2
  br label %700

700:                                              ; preds = %699, %680
  %701 = zext i1 %685 to i8
  store i8 %701, ptr %16, align 1, !tbaa !17
  br label %698

702:                                              ; preds = %686
  store i16 %690, ptr %22, align 2
  br label %703

703:                                              ; preds = %702, %686
  %704 = zext i1 %691 to i8
  store i8 %704, ptr %16, align 1, !tbaa !17
  br label %698

705:                                              ; preds = %692
  store i16 %696, ptr %22, align 2
  br label %706

706:                                              ; preds = %705, %692
  %707 = zext i1 %697 to i8
  store i8 %707, ptr %16, align 1, !tbaa !17
  br label %698

708:                                              ; preds = %621
  %709 = load i16, ptr %22, align 2
  %710 = load i16, ptr %15, align 2
  %711 = cmpxchg ptr %17, i16 %709, i16 %710 seq_cst monotonic, align 2
  %712 = extractvalue { i16, i1 } %711, 0
  %713 = extractvalue { i16, i1 } %711, 1
  br i1 %713, label %728, label %727

714:                                              ; preds = %621, %621
  %715 = load i16, ptr %22, align 2
  %716 = load i16, ptr %15, align 2
  %717 = cmpxchg ptr %17, i16 %715, i16 %716 seq_cst acquire, align 2
  %718 = extractvalue { i16, i1 } %717, 0
  %719 = extractvalue { i16, i1 } %717, 1
  br i1 %719, label %731, label %730

720:                                              ; preds = %621
  %721 = load i16, ptr %22, align 2
  %722 = load i16, ptr %15, align 2
  %723 = cmpxchg ptr %17, i16 %721, i16 %722 seq_cst seq_cst, align 2
  %724 = extractvalue { i16, i1 } %723, 0
  %725 = extractvalue { i16, i1 } %723, 1
  br i1 %725, label %734, label %733

726:                                              ; preds = %734, %731, %728
  br label %623

727:                                              ; preds = %708
  store i16 %712, ptr %22, align 2
  br label %728

728:                                              ; preds = %727, %708
  %729 = zext i1 %713 to i8
  store i8 %729, ptr %16, align 1, !tbaa !17
  br label %726

730:                                              ; preds = %714
  store i16 %718, ptr %22, align 2
  br label %731

731:                                              ; preds = %730, %714
  %732 = zext i1 %719 to i8
  store i8 %732, ptr %16, align 1, !tbaa !17
  br label %726

733:                                              ; preds = %720
  store i16 %724, ptr %22, align 2
  br label %734

734:                                              ; preds = %733, %720
  %735 = zext i1 %725 to i8
  store i8 %735, ptr %16, align 1, !tbaa !17
  br label %726

736:                                              ; preds = %622
  %737 = load i16, ptr %22, align 2
  %738 = load i16, ptr %15, align 2
  %739 = cmpxchg ptr %17, i16 %737, i16 %738 seq_cst monotonic, align 2
  %740 = extractvalue { i16, i1 } %739, 0
  %741 = extractvalue { i16, i1 } %739, 1
  br i1 %741, label %756, label %755

742:                                              ; preds = %622, %622
  %743 = load i16, ptr %22, align 2
  %744 = load i16, ptr %15, align 2
  %745 = cmpxchg ptr %17, i16 %743, i16 %744 seq_cst acquire, align 2
  %746 = extractvalue { i16, i1 } %745, 0
  %747 = extractvalue { i16, i1 } %745, 1
  br i1 %747, label %759, label %758

748:                                              ; preds = %622
  %749 = load i16, ptr %22, align 2
  %750 = load i16, ptr %15, align 2
  %751 = cmpxchg ptr %17, i16 %749, i16 %750 seq_cst seq_cst, align 2
  %752 = extractvalue { i16, i1 } %751, 0
  %753 = extractvalue { i16, i1 } %751, 1
  br i1 %753, label %762, label %761

754:                                              ; preds = %762, %759, %756
  br label %623

755:                                              ; preds = %736
  store i16 %740, ptr %22, align 2
  br label %756

756:                                              ; preds = %755, %736
  %757 = zext i1 %741 to i8
  store i8 %757, ptr %16, align 1, !tbaa !17
  br label %754

758:                                              ; preds = %742
  store i16 %746, ptr %22, align 2
  br label %759

759:                                              ; preds = %758, %742
  %760 = zext i1 %747 to i8
  store i8 %760, ptr %16, align 1, !tbaa !17
  br label %754

761:                                              ; preds = %748
  store i16 %752, ptr %22, align 2
  br label %762

762:                                              ; preds = %761, %748
  %763 = zext i1 %753 to i8
  store i8 %763, ptr %16, align 1, !tbaa !17
  br label %754
}

attributes #0 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = !{!"_ZTSN7hipsycl4sycl6access13address_spaceE", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"_ZTSN7hipsycl4sycl12memory_orderE", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_ZTSN7hipsycl4sycl12memory_scopeE", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"bool", !7, i64 0}
!19 = !{i8 0, i8 2}
!20 = !{}


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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
define dso_local noundef zeroext i1 @__acpp_sscp_cmp_exch_strong_i16(i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr nocapture noundef %4, ptr nocapture noundef %5, i16 noundef signext %6) local_unnamed_addr #1 {
  %8 = tail call noundef i32 @_Z20builtin_memory_orderN7hipsycl4sycl12memory_orderE(i32 noundef %1) #2
  %9 = tail call noundef i32 @_Z20builtin_memory_scopeN7hipsycl4sycl12memory_scopeE(i32 noundef %3) #2
  %10 = tail call noundef i32 @_Z20builtin_memory_orderN7hipsycl4sycl12memory_orderE(i32 noundef %2) #2
  switch i32 %8, label %11 [
    i32 1, label %12
    i32 2, label %12
    i32 3, label %13
    i32 4, label %14
    i32 5, label %15
  ]

11:                                               ; preds = %7
  switch i32 %9, label %22 [
    i32 1, label %18
    i32 2, label %19
    i32 3, label %20
    i32 4, label %21
  ]

12:                                               ; preds = %7, %7
  switch i32 %9, label %87 [
    i32 1, label %83
    i32 2, label %84
    i32 3, label %85
    i32 4, label %86
  ]

13:                                               ; preds = %7
  switch i32 %9, label %152 [
    i32 1, label %148
    i32 2, label %149
    i32 3, label %150
    i32 4, label %151
  ]

14:                                               ; preds = %7
  switch i32 %9, label %217 [
    i32 1, label %213
    i32 2, label %214
    i32 3, label %215
    i32 4, label %216
  ]

15:                                               ; preds = %7
  switch i32 %9, label %282 [
    i32 1, label %278
    i32 2, label %279
    i32 3, label %280
    i32 4, label %281
  ]

.sink.split:                                      ; preds = %339, %335, %331, %327, %323, %319, %315, %311, %307, %303, %299, %295, %291, %287, %283, %274, %270, %266, %262, %258, %254, %250, %246, %242, %238, %234, %230, %226, %222, %218, %209, %205, %201, %197, %193, %189, %185, %181, %177, %173, %169, %165, %161, %157, %153, %144, %140, %136, %132, %128, %124, %120, %116, %112, %108, %104, %100, %96, %92, %88, %79, %75, %71, %67, %63, %59, %55, %51, %47, %43, %39, %35, %31, %27, %23
  %.sink81 = phi { i16, i1 } [ %25, %23 ], [ %29, %27 ], [ %33, %31 ], [ %37, %35 ], [ %41, %39 ], [ %45, %43 ], [ %49, %47 ], [ %53, %51 ], [ %57, %55 ], [ %61, %59 ], [ %65, %63 ], [ %69, %67 ], [ %73, %71 ], [ %77, %75 ], [ %81, %79 ], [ %90, %88 ], [ %94, %92 ], [ %98, %96 ], [ %102, %100 ], [ %106, %104 ], [ %110, %108 ], [ %114, %112 ], [ %118, %116 ], [ %122, %120 ], [ %126, %124 ], [ %130, %128 ], [ %134, %132 ], [ %138, %136 ], [ %142, %140 ], [ %146, %144 ], [ %155, %153 ], [ %159, %157 ], [ %163, %161 ], [ %167, %165 ], [ %171, %169 ], [ %175, %173 ], [ %179, %177 ], [ %183, %181 ], [ %187, %185 ], [ %191, %189 ], [ %195, %193 ], [ %199, %197 ], [ %203, %201 ], [ %207, %205 ], [ %211, %209 ], [ %220, %218 ], [ %224, %222 ], [ %228, %226 ], [ %232, %230 ], [ %236, %234 ], [ %240, %238 ], [ %244, %242 ], [ %248, %246 ], [ %252, %250 ], [ %256, %254 ], [ %260, %258 ], [ %264, %262 ], [ %268, %266 ], [ %272, %270 ], [ %276, %274 ], [ %285, %283 ], [ %289, %287 ], [ %293, %291 ], [ %297, %295 ], [ %301, %299 ], [ %305, %303 ], [ %309, %307 ], [ %313, %311 ], [ %317, %315 ], [ %321, %319 ], [ %325, %323 ], [ %329, %327 ], [ %333, %331 ], [ %337, %335 ], [ %341, %339 ]
  %16 = extractvalue { i16, i1 } %.sink81, 0
  store i16 %16, ptr %5, align 2
  br label %17

17:                                               ; preds = %.sink.split, %339, %335, %331, %327, %323, %319, %315, %311, %307, %303, %299, %295, %291, %287, %283, %274, %270, %266, %262, %258, %254, %250, %246, %242, %238, %234, %230, %226, %222, %218, %209, %205, %201, %197, %193, %189, %185, %181, %177, %173, %169, %165, %161, %157, %153, %144, %140, %136, %132, %128, %124, %120, %116, %112, %108, %104, %100, %96, %92, %88, %79, %75, %71, %67, %63, %59, %55, %51, %47, %43, %39, %35, %31, %27, %23
  %.0.in = phi i1 [ true, %23 ], [ true, %27 ], [ true, %31 ], [ true, %35 ], [ true, %39 ], [ true, %43 ], [ true, %47 ], [ true, %51 ], [ true, %55 ], [ true, %59 ], [ true, %63 ], [ true, %67 ], [ true, %71 ], [ true, %75 ], [ true, %79 ], [ true, %88 ], [ true, %92 ], [ true, %96 ], [ true, %100 ], [ true, %104 ], [ true, %108 ], [ true, %112 ], [ true, %116 ], [ true, %120 ], [ true, %124 ], [ true, %128 ], [ true, %132 ], [ true, %136 ], [ true, %140 ], [ true, %144 ], [ true, %153 ], [ true, %157 ], [ true, %161 ], [ true, %165 ], [ true, %169 ], [ true, %173 ], [ true, %177 ], [ true, %181 ], [ true, %185 ], [ true, %189 ], [ true, %193 ], [ true, %197 ], [ true, %201 ], [ true, %205 ], [ true, %209 ], [ true, %218 ], [ true, %222 ], [ true, %226 ], [ true, %230 ], [ true, %234 ], [ true, %238 ], [ true, %242 ], [ true, %246 ], [ true, %250 ], [ true, %254 ], [ true, %258 ], [ true, %262 ], [ true, %266 ], [ true, %270 ], [ true, %274 ], [ true, %283 ], [ true, %287 ], [ true, %291 ], [ true, %295 ], [ true, %299 ], [ true, %303 ], [ true, %307 ], [ true, %311 ], [ true, %315 ], [ true, %319 ], [ true, %323 ], [ true, %327 ], [ true, %331 ], [ true, %335 ], [ true, %339 ], [ false, %.sink.split ]
  ret i1 %.0.in

18:                                               ; preds = %11
  switch i32 %10, label %23 [
    i32 1, label %27
    i32 2, label %27
    i32 5, label %31
  ]

19:                                               ; preds = %11
  switch i32 %10, label %35 [
    i32 1, label %39
    i32 2, label %39
    i32 5, label %43
  ]

20:                                               ; preds = %11
  switch i32 %10, label %47 [
    i32 1, label %51
    i32 2, label %51
    i32 5, label %55
  ]

21:                                               ; preds = %11
  switch i32 %10, label %59 [
    i32 1, label %63
    i32 2, label %63
    i32 5, label %67
  ]

22:                                               ; preds = %11
  switch i32 %10, label %71 [
    i32 1, label %75
    i32 2, label %75
    i32 5, label %79
  ]

23:                                               ; preds = %18
  %24 = load i16, ptr %5, align 2
  %25 = cmpxchg ptr %4, i16 %24, i16 %6 monotonic monotonic, align 2
  %26 = extractvalue { i16, i1 } %25, 1
  br i1 %26, label %17, label %.sink.split

27:                                               ; preds = %18, %18
  %28 = load i16, ptr %5, align 2
  %29 = cmpxchg ptr %4, i16 %28, i16 %6 monotonic acquire, align 2
  %30 = extractvalue { i16, i1 } %29, 1
  br i1 %30, label %17, label %.sink.split

31:                                               ; preds = %18
  %32 = load i16, ptr %5, align 2
  %33 = cmpxchg ptr %4, i16 %32, i16 %6 monotonic seq_cst, align 2
  %34 = extractvalue { i16, i1 } %33, 1
  br i1 %34, label %17, label %.sink.split

35:                                               ; preds = %19
  %36 = load i16, ptr %5, align 2
  %37 = cmpxchg ptr %4, i16 %36, i16 %6 monotonic monotonic, align 2
  %38 = extractvalue { i16, i1 } %37, 1
  br i1 %38, label %17, label %.sink.split

39:                                               ; preds = %19, %19
  %40 = load i16, ptr %5, align 2
  %41 = cmpxchg ptr %4, i16 %40, i16 %6 monotonic acquire, align 2
  %42 = extractvalue { i16, i1 } %41, 1
  br i1 %42, label %17, label %.sink.split

43:                                               ; preds = %19
  %44 = load i16, ptr %5, align 2
  %45 = cmpxchg ptr %4, i16 %44, i16 %6 monotonic seq_cst, align 2
  %46 = extractvalue { i16, i1 } %45, 1
  br i1 %46, label %17, label %.sink.split

47:                                               ; preds = %20
  %48 = load i16, ptr %5, align 2
  %49 = cmpxchg ptr %4, i16 %48, i16 %6 monotonic monotonic, align 2
  %50 = extractvalue { i16, i1 } %49, 1
  br i1 %50, label %17, label %.sink.split

51:                                               ; preds = %20, %20
  %52 = load i16, ptr %5, align 2
  %53 = cmpxchg ptr %4, i16 %52, i16 %6 monotonic acquire, align 2
  %54 = extractvalue { i16, i1 } %53, 1
  br i1 %54, label %17, label %.sink.split

55:                                               ; preds = %20
  %56 = load i16, ptr %5, align 2
  %57 = cmpxchg ptr %4, i16 %56, i16 %6 monotonic seq_cst, align 2
  %58 = extractvalue { i16, i1 } %57, 1
  br i1 %58, label %17, label %.sink.split

59:                                               ; preds = %21
  %60 = load i16, ptr %5, align 2
  %61 = cmpxchg ptr %4, i16 %60, i16 %6 monotonic monotonic, align 2
  %62 = extractvalue { i16, i1 } %61, 1
  br i1 %62, label %17, label %.sink.split

63:                                               ; preds = %21, %21
  %64 = load i16, ptr %5, align 2
  %65 = cmpxchg ptr %4, i16 %64, i16 %6 monotonic acquire, align 2
  %66 = extractvalue { i16, i1 } %65, 1
  br i1 %66, label %17, label %.sink.split

67:                                               ; preds = %21
  %68 = load i16, ptr %5, align 2
  %69 = cmpxchg ptr %4, i16 %68, i16 %6 monotonic seq_cst, align 2
  %70 = extractvalue { i16, i1 } %69, 1
  br i1 %70, label %17, label %.sink.split

71:                                               ; preds = %22
  %72 = load i16, ptr %5, align 2
  %73 = cmpxchg ptr %4, i16 %72, i16 %6 monotonic monotonic, align 2
  %74 = extractvalue { i16, i1 } %73, 1
  br i1 %74, label %17, label %.sink.split

75:                                               ; preds = %22, %22
  %76 = load i16, ptr %5, align 2
  %77 = cmpxchg ptr %4, i16 %76, i16 %6 monotonic acquire, align 2
  %78 = extractvalue { i16, i1 } %77, 1
  br i1 %78, label %17, label %.sink.split

79:                                               ; preds = %22
  %80 = load i16, ptr %5, align 2
  %81 = cmpxchg ptr %4, i16 %80, i16 %6 monotonic seq_cst, align 2
  %82 = extractvalue { i16, i1 } %81, 1
  br i1 %82, label %17, label %.sink.split

83:                                               ; preds = %12
  switch i32 %10, label %88 [
    i32 1, label %92
    i32 2, label %92
    i32 5, label %96
  ]

84:                                               ; preds = %12
  switch i32 %10, label %100 [
    i32 1, label %104
    i32 2, label %104
    i32 5, label %108
  ]

85:                                               ; preds = %12
  switch i32 %10, label %112 [
    i32 1, label %116
    i32 2, label %116
    i32 5, label %120
  ]

86:                                               ; preds = %12
  switch i32 %10, label %124 [
    i32 1, label %128
    i32 2, label %128
    i32 5, label %132
  ]

87:                                               ; preds = %12
  switch i32 %10, label %136 [
    i32 1, label %140
    i32 2, label %140
    i32 5, label %144
  ]

88:                                               ; preds = %83
  %89 = load i16, ptr %5, align 2
  %90 = cmpxchg ptr %4, i16 %89, i16 %6 acquire monotonic, align 2
  %91 = extractvalue { i16, i1 } %90, 1
  br i1 %91, label %17, label %.sink.split

92:                                               ; preds = %83, %83
  %93 = load i16, ptr %5, align 2
  %94 = cmpxchg ptr %4, i16 %93, i16 %6 acquire acquire, align 2
  %95 = extractvalue { i16, i1 } %94, 1
  br i1 %95, label %17, label %.sink.split

96:                                               ; preds = %83
  %97 = load i16, ptr %5, align 2
  %98 = cmpxchg ptr %4, i16 %97, i16 %6 acquire seq_cst, align 2
  %99 = extractvalue { i16, i1 } %98, 1
  br i1 %99, label %17, label %.sink.split

100:                                              ; preds = %84
  %101 = load i16, ptr %5, align 2
  %102 = cmpxchg ptr %4, i16 %101, i16 %6 acquire monotonic, align 2
  %103 = extractvalue { i16, i1 } %102, 1
  br i1 %103, label %17, label %.sink.split

104:                                              ; preds = %84, %84
  %105 = load i16, ptr %5, align 2
  %106 = cmpxchg ptr %4, i16 %105, i16 %6 acquire acquire, align 2
  %107 = extractvalue { i16, i1 } %106, 1
  br i1 %107, label %17, label %.sink.split

108:                                              ; preds = %84
  %109 = load i16, ptr %5, align 2
  %110 = cmpxchg ptr %4, i16 %109, i16 %6 acquire seq_cst, align 2
  %111 = extractvalue { i16, i1 } %110, 1
  br i1 %111, label %17, label %.sink.split

112:                                              ; preds = %85
  %113 = load i16, ptr %5, align 2
  %114 = cmpxchg ptr %4, i16 %113, i16 %6 acquire monotonic, align 2
  %115 = extractvalue { i16, i1 } %114, 1
  br i1 %115, label %17, label %.sink.split

116:                                              ; preds = %85, %85
  %117 = load i16, ptr %5, align 2
  %118 = cmpxchg ptr %4, i16 %117, i16 %6 acquire acquire, align 2
  %119 = extractvalue { i16, i1 } %118, 1
  br i1 %119, label %17, label %.sink.split

120:                                              ; preds = %85
  %121 = load i16, ptr %5, align 2
  %122 = cmpxchg ptr %4, i16 %121, i16 %6 acquire seq_cst, align 2
  %123 = extractvalue { i16, i1 } %122, 1
  br i1 %123, label %17, label %.sink.split

124:                                              ; preds = %86
  %125 = load i16, ptr %5, align 2
  %126 = cmpxchg ptr %4, i16 %125, i16 %6 acquire monotonic, align 2
  %127 = extractvalue { i16, i1 } %126, 1
  br i1 %127, label %17, label %.sink.split

128:                                              ; preds = %86, %86
  %129 = load i16, ptr %5, align 2
  %130 = cmpxchg ptr %4, i16 %129, i16 %6 acquire acquire, align 2
  %131 = extractvalue { i16, i1 } %130, 1
  br i1 %131, label %17, label %.sink.split

132:                                              ; preds = %86
  %133 = load i16, ptr %5, align 2
  %134 = cmpxchg ptr %4, i16 %133, i16 %6 acquire seq_cst, align 2
  %135 = extractvalue { i16, i1 } %134, 1
  br i1 %135, label %17, label %.sink.split

136:                                              ; preds = %87
  %137 = load i16, ptr %5, align 2
  %138 = cmpxchg ptr %4, i16 %137, i16 %6 acquire monotonic, align 2
  %139 = extractvalue { i16, i1 } %138, 1
  br i1 %139, label %17, label %.sink.split

140:                                              ; preds = %87, %87
  %141 = load i16, ptr %5, align 2
  %142 = cmpxchg ptr %4, i16 %141, i16 %6 acquire acquire, align 2
  %143 = extractvalue { i16, i1 } %142, 1
  br i1 %143, label %17, label %.sink.split

144:                                              ; preds = %87
  %145 = load i16, ptr %5, align 2
  %146 = cmpxchg ptr %4, i16 %145, i16 %6 acquire seq_cst, align 2
  %147 = extractvalue { i16, i1 } %146, 1
  br i1 %147, label %17, label %.sink.split

148:                                              ; preds = %13
  switch i32 %10, label %153 [
    i32 1, label %157
    i32 2, label %157
    i32 5, label %161
  ]

149:                                              ; preds = %13
  switch i32 %10, label %165 [
    i32 1, label %169
    i32 2, label %169
    i32 5, label %173
  ]

150:                                              ; preds = %13
  switch i32 %10, label %177 [
    i32 1, label %181
    i32 2, label %181
    i32 5, label %185
  ]

151:                                              ; preds = %13
  switch i32 %10, label %189 [
    i32 1, label %193
    i32 2, label %193
    i32 5, label %197
  ]

152:                                              ; preds = %13
  switch i32 %10, label %201 [
    i32 1, label %205
    i32 2, label %205
    i32 5, label %209
  ]

153:                                              ; preds = %148
  %154 = load i16, ptr %5, align 2
  %155 = cmpxchg ptr %4, i16 %154, i16 %6 release monotonic, align 2
  %156 = extractvalue { i16, i1 } %155, 1
  br i1 %156, label %17, label %.sink.split

157:                                              ; preds = %148, %148
  %158 = load i16, ptr %5, align 2
  %159 = cmpxchg ptr %4, i16 %158, i16 %6 release acquire, align 2
  %160 = extractvalue { i16, i1 } %159, 1
  br i1 %160, label %17, label %.sink.split

161:                                              ; preds = %148
  %162 = load i16, ptr %5, align 2
  %163 = cmpxchg ptr %4, i16 %162, i16 %6 release seq_cst, align 2
  %164 = extractvalue { i16, i1 } %163, 1
  br i1 %164, label %17, label %.sink.split

165:                                              ; preds = %149
  %166 = load i16, ptr %5, align 2
  %167 = cmpxchg ptr %4, i16 %166, i16 %6 release monotonic, align 2
  %168 = extractvalue { i16, i1 } %167, 1
  br i1 %168, label %17, label %.sink.split

169:                                              ; preds = %149, %149
  %170 = load i16, ptr %5, align 2
  %171 = cmpxchg ptr %4, i16 %170, i16 %6 release acquire, align 2
  %172 = extractvalue { i16, i1 } %171, 1
  br i1 %172, label %17, label %.sink.split

173:                                              ; preds = %149
  %174 = load i16, ptr %5, align 2
  %175 = cmpxchg ptr %4, i16 %174, i16 %6 release seq_cst, align 2
  %176 = extractvalue { i16, i1 } %175, 1
  br i1 %176, label %17, label %.sink.split

177:                                              ; preds = %150
  %178 = load i16, ptr %5, align 2
  %179 = cmpxchg ptr %4, i16 %178, i16 %6 release monotonic, align 2
  %180 = extractvalue { i16, i1 } %179, 1
  br i1 %180, label %17, label %.sink.split

181:                                              ; preds = %150, %150
  %182 = load i16, ptr %5, align 2
  %183 = cmpxchg ptr %4, i16 %182, i16 %6 release acquire, align 2
  %184 = extractvalue { i16, i1 } %183, 1
  br i1 %184, label %17, label %.sink.split

185:                                              ; preds = %150
  %186 = load i16, ptr %5, align 2
  %187 = cmpxchg ptr %4, i16 %186, i16 %6 release seq_cst, align 2
  %188 = extractvalue { i16, i1 } %187, 1
  br i1 %188, label %17, label %.sink.split

189:                                              ; preds = %151
  %190 = load i16, ptr %5, align 2
  %191 = cmpxchg ptr %4, i16 %190, i16 %6 release monotonic, align 2
  %192 = extractvalue { i16, i1 } %191, 1
  br i1 %192, label %17, label %.sink.split

193:                                              ; preds = %151, %151
  %194 = load i16, ptr %5, align 2
  %195 = cmpxchg ptr %4, i16 %194, i16 %6 release acquire, align 2
  %196 = extractvalue { i16, i1 } %195, 1
  br i1 %196, label %17, label %.sink.split

197:                                              ; preds = %151
  %198 = load i16, ptr %5, align 2
  %199 = cmpxchg ptr %4, i16 %198, i16 %6 release seq_cst, align 2
  %200 = extractvalue { i16, i1 } %199, 1
  br i1 %200, label %17, label %.sink.split

201:                                              ; preds = %152
  %202 = load i16, ptr %5, align 2
  %203 = cmpxchg ptr %4, i16 %202, i16 %6 release monotonic, align 2
  %204 = extractvalue { i16, i1 } %203, 1
  br i1 %204, label %17, label %.sink.split

205:                                              ; preds = %152, %152
  %206 = load i16, ptr %5, align 2
  %207 = cmpxchg ptr %4, i16 %206, i16 %6 release acquire, align 2
  %208 = extractvalue { i16, i1 } %207, 1
  br i1 %208, label %17, label %.sink.split

209:                                              ; preds = %152
  %210 = load i16, ptr %5, align 2
  %211 = cmpxchg ptr %4, i16 %210, i16 %6 release seq_cst, align 2
  %212 = extractvalue { i16, i1 } %211, 1
  br i1 %212, label %17, label %.sink.split

213:                                              ; preds = %14
  switch i32 %10, label %218 [
    i32 1, label %222
    i32 2, label %222
    i32 5, label %226
  ]

214:                                              ; preds = %14
  switch i32 %10, label %230 [
    i32 1, label %234
    i32 2, label %234
    i32 5, label %238
  ]

215:                                              ; preds = %14
  switch i32 %10, label %242 [
    i32 1, label %246
    i32 2, label %246
    i32 5, label %250
  ]

216:                                              ; preds = %14
  switch i32 %10, label %254 [
    i32 1, label %258
    i32 2, label %258
    i32 5, label %262
  ]

217:                                              ; preds = %14
  switch i32 %10, label %266 [
    i32 1, label %270
    i32 2, label %270
    i32 5, label %274
  ]

218:                                              ; preds = %213
  %219 = load i16, ptr %5, align 2
  %220 = cmpxchg ptr %4, i16 %219, i16 %6 acq_rel monotonic, align 2
  %221 = extractvalue { i16, i1 } %220, 1
  br i1 %221, label %17, label %.sink.split

222:                                              ; preds = %213, %213
  %223 = load i16, ptr %5, align 2
  %224 = cmpxchg ptr %4, i16 %223, i16 %6 acq_rel acquire, align 2
  %225 = extractvalue { i16, i1 } %224, 1
  br i1 %225, label %17, label %.sink.split

226:                                              ; preds = %213
  %227 = load i16, ptr %5, align 2
  %228 = cmpxchg ptr %4, i16 %227, i16 %6 acq_rel seq_cst, align 2
  %229 = extractvalue { i16, i1 } %228, 1
  br i1 %229, label %17, label %.sink.split

230:                                              ; preds = %214
  %231 = load i16, ptr %5, align 2
  %232 = cmpxchg ptr %4, i16 %231, i16 %6 acq_rel monotonic, align 2
  %233 = extractvalue { i16, i1 } %232, 1
  br i1 %233, label %17, label %.sink.split

234:                                              ; preds = %214, %214
  %235 = load i16, ptr %5, align 2
  %236 = cmpxchg ptr %4, i16 %235, i16 %6 acq_rel acquire, align 2
  %237 = extractvalue { i16, i1 } %236, 1
  br i1 %237, label %17, label %.sink.split

238:                                              ; preds = %214
  %239 = load i16, ptr %5, align 2
  %240 = cmpxchg ptr %4, i16 %239, i16 %6 acq_rel seq_cst, align 2
  %241 = extractvalue { i16, i1 } %240, 1
  br i1 %241, label %17, label %.sink.split

242:                                              ; preds = %215
  %243 = load i16, ptr %5, align 2
  %244 = cmpxchg ptr %4, i16 %243, i16 %6 acq_rel monotonic, align 2
  %245 = extractvalue { i16, i1 } %244, 1
  br i1 %245, label %17, label %.sink.split

246:                                              ; preds = %215, %215
  %247 = load i16, ptr %5, align 2
  %248 = cmpxchg ptr %4, i16 %247, i16 %6 acq_rel acquire, align 2
  %249 = extractvalue { i16, i1 } %248, 1
  br i1 %249, label %17, label %.sink.split

250:                                              ; preds = %215
  %251 = load i16, ptr %5, align 2
  %252 = cmpxchg ptr %4, i16 %251, i16 %6 acq_rel seq_cst, align 2
  %253 = extractvalue { i16, i1 } %252, 1
  br i1 %253, label %17, label %.sink.split

254:                                              ; preds = %216
  %255 = load i16, ptr %5, align 2
  %256 = cmpxchg ptr %4, i16 %255, i16 %6 acq_rel monotonic, align 2
  %257 = extractvalue { i16, i1 } %256, 1
  br i1 %257, label %17, label %.sink.split

258:                                              ; preds = %216, %216
  %259 = load i16, ptr %5, align 2
  %260 = cmpxchg ptr %4, i16 %259, i16 %6 acq_rel acquire, align 2
  %261 = extractvalue { i16, i1 } %260, 1
  br i1 %261, label %17, label %.sink.split

262:                                              ; preds = %216
  %263 = load i16, ptr %5, align 2
  %264 = cmpxchg ptr %4, i16 %263, i16 %6 acq_rel seq_cst, align 2
  %265 = extractvalue { i16, i1 } %264, 1
  br i1 %265, label %17, label %.sink.split

266:                                              ; preds = %217
  %267 = load i16, ptr %5, align 2
  %268 = cmpxchg ptr %4, i16 %267, i16 %6 acq_rel monotonic, align 2
  %269 = extractvalue { i16, i1 } %268, 1
  br i1 %269, label %17, label %.sink.split

270:                                              ; preds = %217, %217
  %271 = load i16, ptr %5, align 2
  %272 = cmpxchg ptr %4, i16 %271, i16 %6 acq_rel acquire, align 2
  %273 = extractvalue { i16, i1 } %272, 1
  br i1 %273, label %17, label %.sink.split

274:                                              ; preds = %217
  %275 = load i16, ptr %5, align 2
  %276 = cmpxchg ptr %4, i16 %275, i16 %6 acq_rel seq_cst, align 2
  %277 = extractvalue { i16, i1 } %276, 1
  br i1 %277, label %17, label %.sink.split

278:                                              ; preds = %15
  switch i32 %10, label %283 [
    i32 1, label %287
    i32 2, label %287
    i32 5, label %291
  ]

279:                                              ; preds = %15
  switch i32 %10, label %295 [
    i32 1, label %299
    i32 2, label %299
    i32 5, label %303
  ]

280:                                              ; preds = %15
  switch i32 %10, label %307 [
    i32 1, label %311
    i32 2, label %311
    i32 5, label %315
  ]

281:                                              ; preds = %15
  switch i32 %10, label %319 [
    i32 1, label %323
    i32 2, label %323
    i32 5, label %327
  ]

282:                                              ; preds = %15
  switch i32 %10, label %331 [
    i32 1, label %335
    i32 2, label %335
    i32 5, label %339
  ]

283:                                              ; preds = %278
  %284 = load i16, ptr %5, align 2
  %285 = cmpxchg ptr %4, i16 %284, i16 %6 seq_cst monotonic, align 2
  %286 = extractvalue { i16, i1 } %285, 1
  br i1 %286, label %17, label %.sink.split

287:                                              ; preds = %278, %278
  %288 = load i16, ptr %5, align 2
  %289 = cmpxchg ptr %4, i16 %288, i16 %6 seq_cst acquire, align 2
  %290 = extractvalue { i16, i1 } %289, 1
  br i1 %290, label %17, label %.sink.split

291:                                              ; preds = %278
  %292 = load i16, ptr %5, align 2
  %293 = cmpxchg ptr %4, i16 %292, i16 %6 seq_cst seq_cst, align 2
  %294 = extractvalue { i16, i1 } %293, 1
  br i1 %294, label %17, label %.sink.split

295:                                              ; preds = %279
  %296 = load i16, ptr %5, align 2
  %297 = cmpxchg ptr %4, i16 %296, i16 %6 seq_cst monotonic, align 2
  %298 = extractvalue { i16, i1 } %297, 1
  br i1 %298, label %17, label %.sink.split

299:                                              ; preds = %279, %279
  %300 = load i16, ptr %5, align 2
  %301 = cmpxchg ptr %4, i16 %300, i16 %6 seq_cst acquire, align 2
  %302 = extractvalue { i16, i1 } %301, 1
  br i1 %302, label %17, label %.sink.split

303:                                              ; preds = %279
  %304 = load i16, ptr %5, align 2
  %305 = cmpxchg ptr %4, i16 %304, i16 %6 seq_cst seq_cst, align 2
  %306 = extractvalue { i16, i1 } %305, 1
  br i1 %306, label %17, label %.sink.split

307:                                              ; preds = %280
  %308 = load i16, ptr %5, align 2
  %309 = cmpxchg ptr %4, i16 %308, i16 %6 seq_cst monotonic, align 2
  %310 = extractvalue { i16, i1 } %309, 1
  br i1 %310, label %17, label %.sink.split

311:                                              ; preds = %280, %280
  %312 = load i16, ptr %5, align 2
  %313 = cmpxchg ptr %4, i16 %312, i16 %6 seq_cst acquire, align 2
  %314 = extractvalue { i16, i1 } %313, 1
  br i1 %314, label %17, label %.sink.split

315:                                              ; preds = %280
  %316 = load i16, ptr %5, align 2
  %317 = cmpxchg ptr %4, i16 %316, i16 %6 seq_cst seq_cst, align 2
  %318 = extractvalue { i16, i1 } %317, 1
  br i1 %318, label %17, label %.sink.split

319:                                              ; preds = %281
  %320 = load i16, ptr %5, align 2
  %321 = cmpxchg ptr %4, i16 %320, i16 %6 seq_cst monotonic, align 2
  %322 = extractvalue { i16, i1 } %321, 1
  br i1 %322, label %17, label %.sink.split

323:                                              ; preds = %281, %281
  %324 = load i16, ptr %5, align 2
  %325 = cmpxchg ptr %4, i16 %324, i16 %6 seq_cst acquire, align 2
  %326 = extractvalue { i16, i1 } %325, 1
  br i1 %326, label %17, label %.sink.split

327:                                              ; preds = %281
  %328 = load i16, ptr %5, align 2
  %329 = cmpxchg ptr %4, i16 %328, i16 %6 seq_cst seq_cst, align 2
  %330 = extractvalue { i16, i1 } %329, 1
  br i1 %330, label %17, label %.sink.split

331:                                              ; preds = %282
  %332 = load i16, ptr %5, align 2
  %333 = cmpxchg ptr %4, i16 %332, i16 %6 seq_cst monotonic, align 2
  %334 = extractvalue { i16, i1 } %333, 1
  br i1 %334, label %17, label %.sink.split

335:                                              ; preds = %282, %282
  %336 = load i16, ptr %5, align 2
  %337 = cmpxchg ptr %4, i16 %336, i16 %6 seq_cst acquire, align 2
  %338 = extractvalue { i16, i1 } %337, 1
  br i1 %338, label %17, label %.sink.split

339:                                              ; preds = %282
  %340 = load i16, ptr %5, align 2
  %341 = cmpxchg ptr %4, i16 %340, i16 %6 seq_cst seq_cst, align 2
  %342 = extractvalue { i16, i1 } %341, 1
  br i1 %342, label %17, label %.sink.split
}

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


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,InstCombinePass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass