; LLVM IR from aap/pdp6 :: newemu (pdp6)

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

@codetab = external dso_local global [512 x i32], align 16
@iotcodetab = external dso_local global [8 x i32], align 16

; 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 uwtable
define dso_local void @predecode() #1 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %1) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #2
  store i32 0, ptr %3, align 4, !tbaa !5
  br label %4

4:                                                ; preds = %218, %0
  %5 = load i32, ptr %3, align 4, !tbaa !5
  %6 = icmp slt i32 %5, 512
  br i1 %6, label %7, label %221

7:                                                ; preds = %4
  store i32 0, ptr %1, align 4, !tbaa !5
  %8 = load i32, ptr %3, align 4, !tbaa !5
  %9 = and i32 %8, 448
  switch i32 %9, label %213 [
    i32 0, label %10
    i32 64, label %13
    i32 128, label %38
    i32 192, label %146
    i32 256, label %168
    i32 320, label %182
    i32 384, label %195
    i32 448, label %210
  ]

10:                                               ; preds = %7
  %11 = load i32, ptr %1, align 4, !tbaa !5
  %12 = or i32 %11, 16401
  store i32 %12, ptr %1, align 4, !tbaa !5
  br label %213

13:                                               ; preds = %7
  %14 = load i32, ptr %3, align 4, !tbaa !5
  %15 = and i32 %14, 504
  switch i32 %15, label %37 [
    i32 88, label %16
    i32 96, label %22
    i32 104, label %22
    i32 112, label %22
    i32 120, label %22
  ]

16:                                               ; preds = %13
  %17 = load i32, ptr %3, align 4, !tbaa !5
  switch i32 %17, label %21 [
    i32 90, label %21
    i32 91, label %18
    i32 92, label %18
    i32 93, label %18
    i32 94, label %18
    i32 95, label %18
  ]

18:                                               ; preds = %16, %16, %16, %16, %16
  %19 = load i32, ptr %1, align 4, !tbaa !5
  %20 = or i32 %19, 8
  store i32 %20, ptr %1, align 4, !tbaa !5
  br label %21

21:                                               ; preds = %18, %16, %16
  br label %37

22:                                               ; preds = %13, %13, %13, %13
  %23 = load i32, ptr %1, align 4, !tbaa !5
  %24 = or i32 %23, 256
  store i32 %24, ptr %1, align 4, !tbaa !5
  %25 = load i32, ptr %3, align 4, !tbaa !5
  %26 = and i32 %25, 3
  switch i32 %26, label %36 [
    i32 0, label %36
    i32 1, label %27
    i32 2, label %30
    i32 3, label %33
  ]

27:                                               ; preds = %22
  %28 = load i32, ptr %1, align 4, !tbaa !5
  %29 = or i32 %28, 4096
  store i32 %29, ptr %1, align 4, !tbaa !5
  br label %36

30:                                               ; preds = %22
  %31 = load i32, ptr %1, align 4, !tbaa !5
  %32 = or i32 %31, 9216
  store i32 %32, ptr %1, align 4, !tbaa !5
  br label %36

33:                                               ; preds = %22
  %34 = load i32, ptr %1, align 4, !tbaa !5
  %35 = or i32 %34, 8192
  store i32 %35, ptr %1, align 4, !tbaa !5
  br label %36

36:                                               ; preds = %33, %30, %27, %22, %22
  br label %37

37:                                               ; preds = %36, %21, %13
  br label %213

38:                                               ; preds = %7
  %39 = load i32, ptr %3, align 4, !tbaa !5
  %40 = and i32 %39, 504
  switch i32 %40, label %145 [
    i32 128, label %41
    i32 136, label %41
    i32 144, label %57
    i32 152, label %63
    i32 160, label %92
    i32 168, label %98
    i32 176, label %98
    i32 184, label %144
  ]

41:                                               ; preds = %38, %38
  %42 = load i32, ptr %3, align 4, !tbaa !5
  %43 = and i32 %42, 3
  switch i32 %43, label %56 [
    i32 0, label %44
    i32 1, label %47
    i32 2, label %50
    i32 3, label %53
  ]

44:                                               ; preds = %41
  %45 = load i32, ptr %1, align 4, !tbaa !5
  %46 = or i32 %45, 272
  store i32 %46, ptr %1, align 4, !tbaa !5
  br label %56

47:                                               ; preds = %41
  %48 = load i32, ptr %1, align 4, !tbaa !5
  %49 = or i32 %48, 16
  store i32 %49, ptr %1, align 4, !tbaa !5
  br label %56

50:                                               ; preds = %41
  %51 = load i32, ptr %1, align 4, !tbaa !5
  %52 = or i32 %51, 9216
  store i32 %52, ptr %1, align 4, !tbaa !5
  br label %56

53:                                               ; preds = %41
  %54 = load i32, ptr %1, align 4, !tbaa !5
  %55 = or i32 %54, 2576
  store i32 %55, ptr %1, align 4, !tbaa !5
  br label %56

56:                                               ; preds = %53, %50, %47, %44, %41
  br label %145

57:                                               ; preds = %38
  %58 = load i32, ptr %3, align 4, !tbaa !5
  %59 = and i32 %58, 4
  %60 = icmp ne i32 %59, 0
  %61 = zext i1 %60 to i64
  %62 = select i1 %60, i32 4096, i32 0
  store i32 %62, ptr %2, align 4, !tbaa !5
  br label %71

63:                                               ; preds = %38
  %64 = load i32, ptr %3, align 4, !tbaa !5
  %65 = and i32 %64, 4
  %66 = icmp ne i32 %65, 0
  br i1 %66, label %67, label %70

67:                                               ; preds = %63
  %68 = load i32, ptr %1, align 4, !tbaa !5
  %69 = or i32 %68, 32
  store i32 %69, ptr %1, align 4, !tbaa !5
  br label %70

70:                                               ; preds = %67, %63
  store i32 4096, ptr %2, align 4, !tbaa !5
  br label %71

71:                                               ; preds = %70, %57
  %72 = load i32, ptr %3, align 4, !tbaa !5
  %73 = and i32 %72, 3
  switch i32 %73, label %91 [
    i32 0, label %74
    i32 1, label %79
    i32 2, label %83
    i32 3, label %86
  ]

74:                                               ; preds = %71
  %75 = load i32, ptr %2, align 4, !tbaa !5
  %76 = or i32 256, %75
  %77 = load i32, ptr %1, align 4, !tbaa !5
  %78 = or i32 %77, %76
  store i32 %78, ptr %1, align 4, !tbaa !5
  br label %91

79:                                               ; preds = %71
  %80 = load i32, ptr %2, align 4, !tbaa !5
  %81 = load i32, ptr %1, align 4, !tbaa !5
  %82 = or i32 %81, %80
  store i32 %82, ptr %1, align 4, !tbaa !5
  br label %91

83:                                               ; preds = %71
  %84 = load i32, ptr %1, align 4, !tbaa !5
  %85 = or i32 %84, 9472
  store i32 %85, ptr %1, align 4, !tbaa !5
  br label %91

86:                                               ; preds = %71
  %87 = load i32, ptr %2, align 4, !tbaa !5
  %88 = or i32 8448, %87
  %89 = load i32, ptr %1, align 4, !tbaa !5
  %90 = or i32 %89, %88
  store i32 %90, ptr %1, align 4, !tbaa !5
  br label %91

91:                                               ; preds = %86, %83, %79, %74, %71
  br label %145

92:                                               ; preds = %38
  %93 = load i32, ptr %3, align 4, !tbaa !5
  switch i32 %93, label %97 [
    i32 164, label %94
    i32 165, label %94
    i32 166, label %94
  ]

94:                                               ; preds = %92, %92, %92
  %95 = load i32, ptr %1, align 4, !tbaa !5
  %96 = or i32 %95, 4128
  store i32 %96, ptr %1, align 4, !tbaa !5
  br label %97

97:                                               ; preds = %94, %92
  br label %145

98:                                               ; preds = %38, %38
  %99 = load i32, ptr %3, align 4, !tbaa !5
  switch i32 %99, label %143 [
    i32 168, label %100
    i32 169, label %103
    i32 170, label %106
    i32 171, label %106
    i32 172, label %107
    i32 173, label %110
    i32 174, label %113
    i32 175, label %116
    i32 176, label %119
    i32 177, label %122
    i32 178, label %125
    i32 179, label %128
    i32 180, label %131
    i32 181, label %134
    i32 182, label %137
    i32 183, label %140
  ]

100:                                              ; preds = %98
  %101 = load i32, ptr %1, align 4, !tbaa !5
  %102 = or i32 %101, 512
  store i32 %102, ptr %1, align 4, !tbaa !5
  br label %143

103:                                              ; preds = %98
  %104 = load i32, ptr %1, align 4, !tbaa !5
  %105 = or i32 %104, 16448
  store i32 %105, ptr %1, align 4, !tbaa !5
  br label %143

106:                                              ; preds = %98, %98
  br label %143

107:                                              ; preds = %98
  %108 = load i32, ptr %1, align 4, !tbaa !5
  %109 = or i32 %108, 1044
  store i32 %109, ptr %1, align 4, !tbaa !5
  br label %143

110:                                              ; preds = %98
  %111 = load i32, ptr %1, align 4, !tbaa !5
  %112 = or i32 %111, 1040
  store i32 %112, ptr %1, align 4, !tbaa !5
  br label %143

113:                                              ; preds = %98
  %114 = load i32, ptr %1, align 4, !tbaa !5
  %115 = or i32 %114, 17680
  store i32 %115, ptr %1, align 4, !tbaa !5
  br label %143

116:                                              ; preds = %98
  %117 = load i32, ptr %1, align 4, !tbaa !5
  %118 = or i32 %117, 1040
  store i32 %118, ptr %1, align 4, !tbaa !5
  br label %143

119:                                              ; preds = %98
  %120 = load i32, ptr %1, align 4, !tbaa !5
  %121 = or i32 %120, 8192
  store i32 %121, ptr %1, align 4, !tbaa !5
  br label %143

122:                                              ; preds = %98
  %123 = load i32, ptr %1, align 4, !tbaa !5
  %124 = or i32 %123, 8448
  store i32 %124, ptr %1, align 4, !tbaa !5
  br label %143

125:                                              ; preds = %98
  %126 = load i32, ptr %1, align 4, !tbaa !5
  %127 = or i32 %126, 8320
  store i32 %127, ptr %1, align 4, !tbaa !5
  br label %143

128:                                              ; preds = %98
  %129 = load i32, ptr %1, align 4, !tbaa !5
  %130 = or i32 %129, 128
  store i32 %130, ptr %1, align 4, !tbaa !5
  br label %143

131:                                              ; preds = %98
  %132 = load i32, ptr %1, align 4, !tbaa !5
  %133 = or i32 %132, 9232
  store i32 %133, ptr %1, align 4, !tbaa !5
  br label %143

134:                                              ; preds = %98
  %135 = load i32, ptr %1, align 4, !tbaa !5
  %136 = or i32 %135, 16
  store i32 %136, ptr %1, align 4, !tbaa !5
  br label %143

137:                                              ; preds = %98
  %138 = load i32, ptr %1, align 4, !tbaa !5
  %139 = or i32 %138, 8192
  store i32 %139, ptr %1, align 4, !tbaa !5
  br label %143

140:                                              ; preds = %98
  %141 = load i32, ptr %1, align 4, !tbaa !5
  %142 = or i32 %141, 64
  store i32 %142, ptr %1, align 4, !tbaa !5
  br label %143

143:                                              ; preds = %140, %137, %134, %131, %128, %125, %122, %119, %116, %113, %110, %107, %106, %103, %100, %98
  br label %145

144:                                              ; preds = %38
  br label %169

145:                                              ; preds = %143, %97, %91, %56, %38
  br label %213

146:                                              ; preds = %7
  %147 = load i32, ptr %3, align 4, !tbaa !5
  %148 = and i32 %147, 496
  switch i32 %148, label %167 [
    i32 192, label %149
    i32 208, label %159
    i32 224, label %159
    i32 240, label %159
  ]

149:                                              ; preds = %146
  %150 = load i32, ptr %3, align 4, !tbaa !5
  %151 = and i32 %150, 8
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %153, label %156

153:                                              ; preds = %149
  %154 = load i32, ptr %1, align 4, !tbaa !5
  %155 = or i32 %154, 256
  store i32 %155, ptr %1, align 4, !tbaa !5
  br label %156

156:                                              ; preds = %153, %149
  %157 = load i32, ptr %1, align 4, !tbaa !5
  %158 = or i32 %157, 1024
  store i32 %158, ptr %1, align 4, !tbaa !5
  br label %167

159:                                              ; preds = %146, %146, %146
  %160 = load i32, ptr %3, align 4, !tbaa !5
  %161 = and i32 %160, 8
  %162 = icmp ne i32 %161, 0
  br i1 %162, label %163, label %166

163:                                              ; preds = %159
  %164 = load i32, ptr %1, align 4, !tbaa !5
  %165 = or i32 %164, 2576
  store i32 %165, ptr %1, align 4, !tbaa !5
  br label %166

166:                                              ; preds = %163, %159
  br label %167

167:                                              ; preds = %166, %156, %146
  br label %213

168:                                              ; preds = %7
  br label %169

169:                                              ; preds = %168, %144
  %170 = load i32, ptr %3, align 4, !tbaa !5
  %171 = and i32 %170, 3
  switch i32 %171, label %181 [
    i32 0, label %172
    i32 1, label %181
    i32 2, label %175
    i32 3, label %178
  ]

172:                                              ; preds = %169
  %173 = load i32, ptr %1, align 4, !tbaa !5
  %174 = or i32 %173, 256
  store i32 %174, ptr %1, align 4, !tbaa !5
  br label %181

175:                                              ; preds = %169
  %176 = load i32, ptr %1, align 4, !tbaa !5
  %177 = or i32 %176, 1536
  store i32 %177, ptr %1, align 4, !tbaa !5
  br label %181

178:                                              ; preds = %169
  %179 = load i32, ptr %1, align 4, !tbaa !5
  %180 = or i32 %179, 512
  store i32 %180, ptr %1, align 4, !tbaa !5
  br label %181

181:                                              ; preds = %178, %175, %172, %169, %169
  br label %213

182:                                              ; preds = %7
  %183 = load i32, ptr %3, align 4, !tbaa !5
  %184 = and i32 %183, 3
  switch i32 %184, label %194 [
    i32 0, label %185
    i32 1, label %194
    i32 2, label %188
    i32 3, label %191
  ]

185:                                              ; preds = %182
  %186 = load i32, ptr %1, align 4, !tbaa !5
  %187 = or i32 %186, 256
  store i32 %187, ptr %1, align 4, !tbaa !5
  br label %194

188:                                              ; preds = %182
  %189 = load i32, ptr %1, align 4, !tbaa !5
  %190 = or i32 %189, 1536
  store i32 %190, ptr %1, align 4, !tbaa !5
  br label %194

191:                                              ; preds = %182
  %192 = load i32, ptr %1, align 4, !tbaa !5
  %193 = or i32 %192, 2576
  store i32 %193, ptr %1, align 4, !tbaa !5
  br label %194

194:                                              ; preds = %191, %188, %185, %182, %182
  br label %213

195:                                              ; preds = %7
  %196 = load i32, ptr %3, align 4, !tbaa !5
  %197 = and i32 %196, 8
  %198 = icmp ne i32 %197, 0
  br i1 %198, label %199, label %202

199:                                              ; preds = %195
  %200 = load i32, ptr %1, align 4, !tbaa !5
  %201 = or i32 %200, 256
  store i32 %201, ptr %1, align 4, !tbaa !5
  br label %202

202:                                              ; preds = %199, %195
  %203 = load i32, ptr %3, align 4, !tbaa !5
  %204 = and i32 %203, 48
  %205 = icmp eq i32 %204, 0
  br i1 %205, label %206, label %209

206:                                              ; preds = %202
  %207 = load i32, ptr %1, align 4, !tbaa !5
  %208 = or i32 %207, 1024
  store i32 %208, ptr %1, align 4, !tbaa !5
  br label %209

209:                                              ; preds = %206, %202
  br label %213

210:                                              ; preds = %7
  %211 = load i32, ptr %1, align 4, !tbaa !5
  %212 = or i32 %211, 2
  store i32 %212, ptr %1, align 4, !tbaa !5
  br label %213

213:                                              ; preds = %210, %209, %194, %181, %167, %145, %37, %10, %7
  %214 = load i32, ptr %1, align 4, !tbaa !5
  %215 = load i32, ptr %3, align 4, !tbaa !5
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds [512 x i32], ptr @codetab, i64 0, i64 %216
  store i32 %214, ptr %217, align 4, !tbaa !5
  br label %218

218:                                              ; preds = %213
  %219 = load i32, ptr %3, align 4, !tbaa !5
  %220 = add nsw i32 %219, 1
  store i32 %220, ptr %3, align 4, !tbaa !5
  br label %4, !llvm.loop !9

221:                                              ; preds = %4
  store i32 0, ptr %3, align 4, !tbaa !5
  br label %222

222:                                              ; preds = %247, %221
  %223 = load i32, ptr %3, align 4, !tbaa !5
  %224 = icmp slt i32 %223, 8
  br i1 %224, label %225, label %250

225:                                              ; preds = %222
  store i32 1042, ptr %1, align 4, !tbaa !5
  %226 = load i32, ptr %3, align 4, !tbaa !5
  switch i32 %226, label %242 [
    i32 0, label %227
    i32 1, label %230
    i32 2, label %233
    i32 3, label %236
    i32 4, label %242
    i32 5, label %239
    i32 6, label %242
    i32 7, label %242
  ]

227:                                              ; preds = %225
  %228 = load i32, ptr %1, align 4, !tbaa !5
  %229 = or i32 %228, 16896
  store i32 %229, ptr %1, align 4, !tbaa !5
  br label %242

230:                                              ; preds = %225
  %231 = load i32, ptr %1, align 4, !tbaa !5
  %232 = or i32 %231, 40960
  store i32 %232, ptr %1, align 4, !tbaa !5
  br label %242

233:                                              ; preds = %225
  %234 = load i32, ptr %1, align 4, !tbaa !5
  %235 = or i32 %234, 16896
  store i32 %235, ptr %1, align 4, !tbaa !5
  br label %242

236:                                              ; preds = %225
  %237 = load i32, ptr %1, align 4, !tbaa !5
  %238 = or i32 %237, 33024
  store i32 %238, ptr %1, align 4, !tbaa !5
  br label %242

239:                                              ; preds = %225
  %240 = load i32, ptr %1, align 4, !tbaa !5
  %241 = or i32 %240, 8192
  store i32 %241, ptr %1, align 4, !tbaa !5
  br label %242

242:                                              ; preds = %239, %236, %233, %230, %227, %225, %225, %225, %225
  %243 = load i32, ptr %1, align 4, !tbaa !5
  %244 = load i32, ptr %3, align 4, !tbaa !5
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds [8 x i32], ptr @iotcodetab, i64 0, i64 %245
  store i32 %243, ptr %246, align 4, !tbaa !5
  br label %247

247:                                              ; preds = %242
  %248 = load i32, ptr %3, align 4, !tbaa !5
  %249 = add nsw i32 %248, 1
  store i32 %249, ptr %3, align 4, !tbaa !5
  br label %222, !llvm.loop !11

250:                                              ; preds = %222
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %1) #2
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}


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

@codetab = external dso_local local_unnamed_addr global [512 x i32], align 16
@iotcodetab = external dso_local local_unnamed_addr global [8 x i32], align 16
@switch.table.predecode = private unnamed_addr constant [4 x i32] [i32 256, i32 4352, i32 9472, i32 8448], align 4
@switch.table.predecode.1 = private unnamed_addr constant [4 x i32] [i32 272, i32 16, i32 9216, i32 2576], align 4
@switch.table.predecode.2 = private unnamed_addr constant [16 x i32] [i32 512, i32 16448, i32 0, i32 0, i32 1044, i32 1040, i32 17680, i32 1040, i32 8192, i32 8448, i32 8320, i32 128, i32 9232, i32 16, i32 8192, i32 64], align 4
@switch.table.predecode.3 = private unnamed_addr constant [4 x i32] [i32 256, i32 0, i32 1536, i32 512], align 4
@switch.table.predecode.4 = private unnamed_addr constant [4 x i32] [i32 256, i32 0, i32 1536, i32 2576], align 4

; Function Attrs: nofree norecurse nosync nounwind memory(write, argmem: none, inaccessiblemem: none) uwtable
define dso_local void @predecode() local_unnamed_addr #0 {
  br label %1

1:                                                ; preds = %0, %56
  %indvars.iv = phi i64 [ 0, %0 ], [ %indvars.iv.next, %56 ]
  %2 = trunc nuw nsw i64 %indvars.iv to i32
  %3 = lshr i32 %2, 6
  switch i32 %3, label %.unreachabledefault [
    i32 0, label %56
    i32 1, label %4
    i32 2, label %12
    i32 3, label %39
    i32 4, label %switch.lookup115
    i32 5, label %switch.lookup118
    i32 6, label %49
    i32 7, label %54
  ]

4:                                                ; preds = %1
  %5 = trunc i64 %indvars.iv to i32
  %6 = add i32 %5, -88
  %7 = lshr i32 %6, 3
  switch i32 %7, label %56 [
    i32 0, label %8
    i32 1, label %switch.lookup
    i32 2, label %switch.lookup
    i32 3, label %switch.lookup
    i32 4, label %switch.lookup
  ]

8:                                                ; preds = %4
  %9 = trunc i64 %indvars.iv to i32
  %10 = add i32 %9, -91
  %switch = icmp ult i32 %10, 5
  %spec.select = select i1 %switch, i32 8, i32 0
  br label %56

switch.lookup:                                    ; preds = %4, %4, %4, %4
  %11 = and i64 %indvars.iv, 3
  %switch.gep = getelementptr inbounds [4 x i32], ptr @switch.table.predecode, i64 0, i64 %11
  %switch.load = load i32, ptr %switch.gep, align 4
  br label %56

default.unreachable106:                           ; preds = %22
  unreachable

12:                                               ; preds = %1
  %13 = trunc i64 %indvars.iv to i32
  %14 = add i32 %13, -128
  %15 = lshr i32 %14, 3
  switch i32 %15, label %56 [
    i32 0, label %switch.lookup109
    i32 1, label %switch.lookup109
    i32 2, label %17
    i32 3, label %20
    i32 4, label %34
    i32 5, label %37
    i32 6, label %37
    i32 7, label %switch.lookup115
  ]

switch.lookup109:                                 ; preds = %12, %12
  %16 = and i64 %indvars.iv, 3
  %switch.gep110 = getelementptr inbounds [4 x i32], ptr @switch.table.predecode.1, i64 0, i64 %16
  %switch.load111 = load i32, ptr %switch.gep110, align 4
  br label %56

17:                                               ; preds = %12
  %indvars.iv.tr108 = trunc i64 %indvars.iv to i32
  %18 = shl i32 %indvars.iv.tr108, 10
  %19 = and i32 %18, 4096
  br label %22

20:                                               ; preds = %12
  %indvars.iv.tr107 = trunc i64 %indvars.iv to i32
  %21 = shl i32 %indvars.iv.tr107, 3
  %spec.select89 = and i32 %21, 32
  br label %22

22:                                               ; preds = %20, %17
  %.184 = phi i32 [ %spec.select89, %20 ], [ 0, %17 ]
  %.082 = phi i32 [ 4096, %20 ], [ %19, %17 ]
  %23 = and i32 %2, 3
  switch i32 %23, label %default.unreachable106 [
    i32 0, label %24
    i32 1, label %27
    i32 2, label %29
    i32 3, label %31
  ]

24:                                               ; preds = %22
  %25 = or disjoint i32 %.082, %.184
  %26 = or disjoint i32 %25, 256
  br label %56

27:                                               ; preds = %22
  %28 = or disjoint i32 %.082, %.184
  br label %56

29:                                               ; preds = %22
  %30 = or disjoint i32 %.184, 9472
  br label %56

31:                                               ; preds = %22
  %32 = or disjoint i32 %.082, %.184
  %33 = or disjoint i32 %32, 8448
  br label %56

34:                                               ; preds = %12
  %35 = trunc i64 %indvars.iv to i32
  %36 = add i32 %35, -164
  %switch91 = icmp ult i32 %36, 3
  %spec.select92 = select i1 %switch91, i32 4128, i32 0
  br label %56

37:                                               ; preds = %12, %12
  %switch.tableidx = add i32 %2, -168
  %38 = icmp ult i32 %switch.tableidx, 16
  br i1 %38, label %switch.lookup112, label %56

39:                                               ; preds = %1
  %40 = trunc i64 %indvars.iv to i32
  %41 = add i32 %40, -192
  %42 = lshr i32 %41, 4
  switch i32 %42, label %56 [
    i32 0, label %43
    i32 1, label %45
    i32 2, label %45
    i32 3, label %45
  ]

43:                                               ; preds = %39
  %44 = and i32 %2, 8
  %.not86 = icmp eq i32 %44, 0
  %spec.select93 = select i1 %.not86, i32 1024, i32 1280
  br label %56

45:                                               ; preds = %39, %39, %39
  %46 = and i32 %2, 8
  %.not85 = icmp eq i32 %46, 0
  %spec.select94 = select i1 %.not85, i32 0, i32 2576
  br label %56

switch.lookup115:                                 ; preds = %1, %12
  %47 = and i64 %indvars.iv, 3
  %switch.gep116 = getelementptr inbounds [4 x i32], ptr @switch.table.predecode.3, i64 0, i64 %47
  %switch.load117 = load i32, ptr %switch.gep116, align 4
  br label %56

switch.lookup118:                                 ; preds = %1
  %48 = and i64 %indvars.iv, 3
  %switch.gep119 = getelementptr inbounds [4 x i32], ptr @switch.table.predecode.4, i64 0, i64 %48
  %switch.load120 = load i32, ptr %switch.gep119, align 4
  br label %56

49:                                               ; preds = %1
  %indvars.iv.tr = trunc i64 %indvars.iv to i32
  %50 = shl i32 %indvars.iv.tr, 5
  %spec.select95 = and i32 %50, 256
  %51 = and i32 %2, 48
  %52 = icmp eq i32 %51, 0
  %53 = or disjoint i32 %spec.select95, 1024
  %spec.select96 = select i1 %52, i32 %53, i32 %spec.select95
  br label %56

54:                                               ; preds = %1
  br label %56

.unreachabledefault:                              ; preds = %1
  unreachable

switch.lookup112:                                 ; preds = %37
  %55 = zext nneg i32 %switch.tableidx to i64
  %switch.gep113 = getelementptr inbounds [16 x i32], ptr @switch.table.predecode.2, i64 0, i64 %55
  %switch.load114 = load i32, ptr %switch.gep113, align 4
  br label %56

56:                                               ; preds = %switch.lookup118, %switch.lookup115, %switch.lookup112, %37, %switch.lookup109, %switch.lookup, %49, %45, %34, %8, %1, %39, %43, %12, %31, %29, %27, %24, %4, %54
  %.4 = phi i32 [ 2, %54 ], [ 0, %39 ], [ %spec.select93, %43 ], [ 0, %12 ], [ 0, %37 ], [ %33, %31 ], [ %30, %29 ], [ %28, %27 ], [ %26, %24 ], [ 0, %4 ], [ 16401, %1 ], [ %spec.select, %8 ], [ %spec.select92, %34 ], [ %spec.select94, %45 ], [ %spec.select96, %49 ], [ %switch.load, %switch.lookup ], [ %switch.load111, %switch.lookup109 ], [ %switch.load114, %switch.lookup112 ], [ %switch.load117, %switch.lookup115 ], [ %switch.load120, %switch.lookup118 ]
  %57 = getelementptr inbounds [512 x i32], ptr @codetab, i64 0, i64 %indvars.iv
  store i32 %.4, ptr %57, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 512
  br i1 %exitcond.not, label %58, label %1, !llvm.loop !9

58:                                               ; preds = %56
  store <4 x i32> <i32 17938, i32 42002, i32 17938, i32 34066>, ptr @iotcodetab, align 16, !tbaa !5
  store <4 x i32> <i32 1042, i32 9234, i32 1042, i32 1042>, ptr getelementptr inbounds (i8, ptr @iotcodetab, i64 16), align 16, !tbaa !5
  ret void
}

attributes #0 = { nofree norecurse nosync nounwind memory(write, argmem: none, 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" }

!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 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass