; LLVM IR from nickgildea/z3_codegen :: codegen.ll (Z22AddPerChainConstraintsR14CodeGenContext)

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

%"class.std::mersenne_twister_engine" = type { [624 x i64], i64 }
%"class.std::uniform_int_distribution" = type { %"struct.std::uniform_int_distribution<>::param_type" }
%"struct.std::uniform_int_distribution<>::param_type" = type { i32, i32 }
%"class.z3::expr" = type { %"class.z3::ast" }
%"class.z3::ast" = type { %"class.z3::object", ptr }
%"class.z3::object" = type { ptr }
%struct.Operands = type { ptr, %"class.z3::expr", %"class.z3::expr", %"class.z3::expr" }
%class.CodeGenContext = type { ptr, %"class.z3::solver", i32, i32, i32, %"class.z3::ast_vector_tpl", %"class.z3::ast_vector_tpl", %"class.z3::ast_vector_tpl", %"class.z3::ast_vector_tpl", %"class.std::vector", %class.ISASubset }
%"class.z3::solver" = type { %"class.z3::object", ptr }
%"class.z3::ast_vector_tpl" = type { %"class.z3::object", ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<z3::ast_vector_tpl<z3::expr>, std::allocator<z3::ast_vector_tpl<z3::expr>>>::_Vector_impl" }
%"struct.std::_Vector_base<z3::ast_vector_tpl<z3::expr>, std::allocator<z3::ast_vector_tpl<z3::expr>>>::_Vector_impl" = type { %"struct.std::_Vector_base<z3::ast_vector_tpl<z3::expr>, std::allocator<z3::ast_vector_tpl<z3::expr>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<z3::ast_vector_tpl<z3::expr>, std::allocator<z3::ast_vector_tpl<z3::expr>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.ISASubset = type { %"class.std::vector.0" }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@prng = external dso_local global %"class.std::mersenne_twister_engine", align 8
@rndDist = external dso_local global %"class.std::uniform_int_distribution", align 4
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN2z36solver3addERKNS_4exprE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK9ISASubset4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z37to_exprERNS_7contextEP7_Z3_ast(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z3eqERKNS_4exprEi(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK2z33astcvP7_Z3_astEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z13SelectOperandR14CodeGenContextRN2z314ast_vector_tplINS1_4exprEEERKS3_i(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z37context6bv_valEij(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), i32 noundef, i32 noundef) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z33iteERKNS_4exprES2_S2_(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN2z34expraSEOS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_Z22AddPerChainConstraintsR14CodeGenContext(ptr noundef nonnull align 8 dereferenceable(152) %0) #2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %"class.z3::expr", align 8
  %9 = alloca %"class.z3::expr", align 8
  %10 = alloca %"class.z3::expr", align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.z3::expr", align 8
  %14 = alloca %"class.z3::expr", align 8
  %15 = alloca %"class.z3::expr", align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca %"class.z3::expr", align 8
  %19 = alloca ptr, align 8
  %20 = alloca %"class.z3::expr", align 8
  %21 = alloca %"class.z3::expr", align 8
  %22 = alloca ptr, align 8
  %23 = alloca %"class.z3::expr", align 8
  %24 = alloca %"class.z3::expr", align 8
  %25 = alloca %"class.z3::expr", align 8
  %26 = alloca i1, align 1
  %27 = alloca i1, align 1
  %28 = alloca ptr, align 8
  %29 = alloca %"class.z3::expr", align 8
  %30 = alloca %struct.Operands, align 8
  %31 = alloca %"class.z3::expr", align 8
  %32 = alloca i32, align 4
  %33 = alloca %"class.z3::expr", align 8
  %34 = alloca %"class.z3::expr", align 8
  %35 = alloca %"class.z3::expr", align 8
  %36 = alloca %"class.z3::expr", align 8
  %37 = alloca %"class.z3::expr", align 8
  %38 = alloca %"class.z3::expr", align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #5
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %39

39:                                               ; preds = %303, %1
  %40 = load i32, ptr %3, align 4, !tbaa !9
  %41 = load ptr, ptr %2, align 8, !tbaa !5
  %42 = getelementptr inbounds %class.CodeGenContext, ptr %41, i32 0, i32 3
  %43 = load i32, ptr %42, align 4, !tbaa !11
  %44 = icmp slt i32 %40, %43
  br i1 %44, label %46, label %45

45:                                               ; preds = %39
  store i32 2, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #5
  br label %307

46:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  %47 = load ptr, ptr %2, align 8, !tbaa !5
  %48 = getelementptr inbounds %class.CodeGenContext, ptr %47, i32 0, i32 9
  %49 = load i32, ptr %3, align 4, !tbaa !9
  %50 = sext i32 %49 to i64
  %51 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN2z314ast_vector_tplINS0_4exprEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %48, i64 noundef %50) #5
  store ptr %51, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  %52 = call noundef i32 @_ZNSt24uniform_int_distributionIiEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEiRT_(ptr noundef nonnull align 4 dereferenceable(8) @rndDist, ptr noundef nonnull align 8 dereferenceable(5000) @prng)
  store i32 %52, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  %53 = load i32, ptr %6, align 4, !tbaa !9
  %54 = call noundef i32 @_Z10TargetFunci(i32 noundef %53)
  store i32 %54, ptr %7, align 4, !tbaa !9
  %55 = load ptr, ptr %2, align 8, !tbaa !5
  %56 = getelementptr inbounds %class.CodeGenContext, ptr %55, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #5
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %9, ptr noundef nonnull align 8 dereferenceable(16) %57, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #5
  %58 = load ptr, ptr %2, align 8, !tbaa !5
  %59 = getelementptr inbounds %class.CodeGenContext, ptr %58, i32 0, i32 0
  %60 = load ptr, ptr %59, align 8, !tbaa !25
  %61 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN2z37context6bv_valEij(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %10, ptr noundef nonnull align 8 dereferenceable(16) %60, i32 noundef %61, i32 noundef 32)
          to label %62 unwind label %89

62:                                               ; preds = %46
  invoke void @_ZN2z3eqERKNS_4exprES2_(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %8, ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %10)
          to label %63 unwind label %93

63:                                               ; preds = %62
  invoke void @_ZN2z36solver3addERKNS_4exprE(ptr noundef nonnull align 8 dereferenceable(16) %56, ptr noundef nonnull align 8 dereferenceable(16) %8)
          to label %64 unwind label %97

64:                                               ; preds = %63
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #5
  %65 = load ptr, ptr %2, align 8, !tbaa !5
  %66 = getelementptr inbounds %class.CodeGenContext, ptr %65, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #5
  %67 = load ptr, ptr %5, align 8, !tbaa !5
  %68 = load ptr, ptr %2, align 8, !tbaa !5
  %69 = getelementptr inbounds %class.CodeGenContext, ptr %68, i32 0, i32 4
  %70 = load i32, ptr %69, align 8, !tbaa !26
  %71 = sub nsw i32 %70, 1
  call void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %14, ptr noundef nonnull align 8 dereferenceable(16) %67, i32 noundef %71)
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #5
  %72 = load ptr, ptr %2, align 8, !tbaa !5
  %73 = getelementptr inbounds %class.CodeGenContext, ptr %72, i32 0, i32 0
  %74 = load ptr, ptr %73, align 8, !tbaa !25
  %75 = load i32, ptr %7, align 4, !tbaa !9
  invoke void @_ZN2z37context6bv_valEij(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %15, ptr noundef nonnull align 8 dereferenceable(16) %74, i32 noundef %75, i32 noundef 32)
          to label %76 unwind label %103

76:                                               ; preds = %64
  invoke void @_ZN2z3eqERKNS_4exprES2_(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %13, ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull align 8 dereferenceable(16) %15)
          to label %77 unwind label %107

77:                                               ; preds = %76
  invoke void @_ZN2z36solver3addERKNS_4exprE(ptr noundef nonnull align 8 dereferenceable(16) %66, ptr noundef nonnull align 8 dereferenceable(16) %13)
          to label %78 unwind label %111

78:                                               ; preds = %77
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  %79 = load ptr, ptr %2, align 8, !tbaa !5
  %80 = getelementptr inbounds %class.CodeGenContext, ptr %79, i32 0, i32 2
  %81 = load i32, ptr %80, align 8, !tbaa !27
  store i32 %81, ptr %16, align 4, !tbaa !9
  br label %82

82:                                               ; preds = %279, %78
  %83 = load i32, ptr %16, align 4, !tbaa !9
  %84 = load ptr, ptr %2, align 8, !tbaa !5
  %85 = getelementptr inbounds %class.CodeGenContext, ptr %84, i32 0, i32 4
  %86 = load i32, ptr %85, align 8, !tbaa !26
  %87 = icmp slt i32 %83, %86
  br i1 %87, label %117, label %88

88:                                               ; preds = %82
  store i32 5, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  br label %302

89:                                               ; preds = %46
  %90 = landingpad { ptr, i32 }
          cleanup
  %91 = extractvalue { ptr, i32 } %90, 0
  store ptr %91, ptr %11, align 8
  %92 = extractvalue { ptr, i32 } %90, 1
  store i32 %92, ptr %12, align 4
  br label %102

93:                                               ; preds = %62
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %11, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %12, align 4
  br label %101

97:                                               ; preds = %63
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %11, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %12, align 4
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #5
  br label %101

101:                                              ; preds = %97, %93
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #5
  br label %102

102:                                              ; preds = %101, %89
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #5
  br label %306

103:                                              ; preds = %64
  %104 = landingpad { ptr, i32 }
          cleanup
  %105 = extractvalue { ptr, i32 } %104, 0
  store ptr %105, ptr %11, align 8
  %106 = extractvalue { ptr, i32 } %104, 1
  store i32 %106, ptr %12, align 4
  br label %116

107:                                              ; preds = %76
  %108 = landingpad { ptr, i32 }
          cleanup
  %109 = extractvalue { ptr, i32 } %108, 0
  store ptr %109, ptr %11, align 8
  %110 = extractvalue { ptr, i32 } %108, 1
  store i32 %110, ptr %12, align 4
  br label %115

111:                                              ; preds = %77
  %112 = landingpad { ptr, i32 }
          cleanup
  %113 = extractvalue { ptr, i32 } %112, 0
  store ptr %113, ptr %11, align 8
  %114 = extractvalue { ptr, i32 } %112, 1
  store i32 %114, ptr %12, align 4
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #5
  br label %115

115:                                              ; preds = %111, %107
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #5
  br label %116

116:                                              ; preds = %115, %103
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #5
  br label %306

117:                                              ; preds = %82
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #5
  %118 = load ptr, ptr %2, align 8, !tbaa !5
  %119 = getelementptr inbounds %class.CodeGenContext, ptr %118, i32 0, i32 5
  %120 = load i32, ptr %16, align 4, !tbaa !9
  call void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %18, ptr noundef nonnull align 8 dereferenceable(16) %119, i32 noundef %120)
  store ptr %18, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #5
  %121 = load ptr, ptr %2, align 8, !tbaa !5
  %122 = load ptr, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #5
  %123 = load ptr, ptr %2, align 8, !tbaa !5
  %124 = getelementptr inbounds %class.CodeGenContext, ptr %123, i32 0, i32 6
  %125 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %21, ptr noundef nonnull align 8 dereferenceable(16) %124, i32 noundef %125)
          to label %126 unwind label %182

126:                                              ; preds = %117
  %127 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_Z13SelectOperandR14CodeGenContextRN2z314ast_vector_tplINS1_4exprEEERKS3_i(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %20, ptr noundef nonnull align 8 dereferenceable(152) %121, ptr noundef nonnull align 8 dereferenceable(16) %122, ptr noundef nonnull align 8 dereferenceable(16) %21, i32 noundef %127)
          to label %128 unwind label %186

128:                                              ; preds = %126
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #5
  store ptr %20, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #5
  %129 = load ptr, ptr %17, align 8, !tbaa !5
  %130 = load ptr, ptr %2, align 8, !tbaa !5
  %131 = getelementptr inbounds %class.CodeGenContext, ptr %130, i32 0, i32 10
  store i1 false, ptr %26, align 1
  store i1 false, ptr %27, align 1
  %132 = invoke noundef i32 @_ZN9ISASubset13opCodeForNameEPKc(ptr noundef nonnull align 8 dereferenceable(24) %131, ptr noundef @.str.7)
          to label %133 unwind label %191

133:                                              ; preds = %128
  invoke void @_ZN2z3neERKNS_4exprEi(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %24, ptr noundef nonnull align 8 dereferenceable(16) %129, i32 noundef %132)
          to label %134 unwind label %191

134:                                              ; preds = %133
  %135 = invoke noundef zeroext i1 @_ZNK2z33astcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %24)
          to label %136 unwind label %195

136:                                              ; preds = %134
  br i1 %135, label %137, label %146

137:                                              ; preds = %136
  %138 = load ptr, ptr %2, align 8, !tbaa !5
  %139 = load ptr, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #5
  store i1 true, ptr %26, align 1
  %140 = load ptr, ptr %2, align 8, !tbaa !5
  %141 = getelementptr inbounds %class.CodeGenContext, ptr %140, i32 0, i32 7
  %142 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %25, ptr noundef nonnull align 8 dereferenceable(16) %141, i32 noundef %142)
          to label %143 unwind label %199

143:                                              ; preds = %137
  store i1 true, ptr %27, align 1
  %144 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_Z13SelectOperandR14CodeGenContextRN2z314ast_vector_tplINS1_4exprEEERKS3_i(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %23, ptr noundef nonnull align 8 dereferenceable(152) %138, ptr noundef nonnull align 8 dereferenceable(16) %139, ptr noundef nonnull align 8 dereferenceable(16) %25, i32 noundef %144)
          to label %145 unwind label %203

145:                                              ; preds = %143
  br label %151

146:                                              ; preds = %136
  %147 = load ptr, ptr %2, align 8, !tbaa !5
  %148 = getelementptr inbounds %class.CodeGenContext, ptr %147, i32 0, i32 0
  %149 = load ptr, ptr %148, align 8, !tbaa !25
  invoke void @_ZN2z37context6bv_valEij(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %23, ptr noundef nonnull align 8 dereferenceable(16) %149, i32 noundef 0, i32 noundef 32)
          to label %150 unwind label %203

150:                                              ; preds = %146
  br label %151

151:                                              ; preds = %150, %145
  %152 = load i1, ptr %27, align 1
  br i1 %152, label %153, label %154

153:                                              ; preds = %151
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %25) #5
  br label %154

154:                                              ; preds = %153, %151
  %155 = load i1, ptr %26, align 1
  br i1 %155, label %156, label %157

156:                                              ; preds = %154
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #5
  br label %157

157:                                              ; preds = %156, %154
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %24) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  store ptr %23, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #5
  %158 = load ptr, ptr %2, align 8, !tbaa !5
  %159 = getelementptr inbounds %class.CodeGenContext, ptr %158, i32 0, i32 8
  %160 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %29, ptr noundef nonnull align 8 dereferenceable(16) %159, i32 noundef %160)
          to label %161 unwind label %216

161:                                              ; preds = %157
  store ptr %29, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 56, ptr %30) #5
  %162 = load ptr, ptr %2, align 8, !tbaa !5
  %163 = getelementptr inbounds %class.CodeGenContext, ptr %162, i32 0, i32 0
  %164 = load ptr, ptr %163, align 8, !tbaa !25
  %165 = load ptr, ptr %19, align 8, !tbaa !5
  %166 = load ptr, ptr %22, align 8, !tbaa !5
  %167 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN8OperandsIN2z34exprEEC2ERNS0_7contextERKS1_S6_S6_(ptr noundef nonnull align 8 dereferenceable(56) %30, ptr noundef nonnull align 8 dereferenceable(16) %164, ptr noundef nonnull align 8 dereferenceable(16) %165, ptr noundef nonnull align 8 dereferenceable(16) %166, ptr noundef nonnull align 8 dereferenceable(16) %167)
          to label %168 unwind label %220

168:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #5
  %169 = load ptr, ptr %2, align 8, !tbaa !5
  %170 = getelementptr inbounds %class.CodeGenContext, ptr %169, i32 0, i32 0
  %171 = load ptr, ptr %170, align 8, !tbaa !25
  invoke void @_ZN2z37context6bv_valEij(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %31, ptr noundef nonnull align 8 dereferenceable(16) %171, i32 noundef 0, i32 noundef 32)
          to label %172 unwind label %224

172:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  %173 = load ptr, ptr %2, align 8, !tbaa !5
  %174 = getelementptr inbounds %class.CodeGenContext, ptr %173, i32 0, i32 10
  %175 = invoke noundef i32 @_ZNK9ISASubset4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %174)
          to label %176 unwind label %228

176:                                              ; preds = %172
  %177 = sub nsw i32 %175, 1
  store i32 %177, ptr %32, align 4, !tbaa !9
  br label %178

178:                                              ; preds = %248, %176
  %179 = load i32, ptr %32, align 4, !tbaa !9
  %180 = icmp sge i32 %179, 0
  br i1 %180, label %232, label %181

181:                                              ; preds = %178
  store i32 8, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  br label %271

182:                                              ; preds = %117
  %183 = landingpad { ptr, i32 }
          cleanup
  %184 = extractvalue { ptr, i32 } %183, 0
  store ptr %184, ptr %11, align 8
  %185 = extractvalue { ptr, i32 } %183, 1
  store i32 %185, ptr %12, align 4
  br label %190

186:                                              ; preds = %126
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %11, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %12, align 4
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #5
  br label %190

190:                                              ; preds = %186, %182
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #5
  br label %301

191:                                              ; preds = %133, %128
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %11, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %12, align 4
  br label %215

195:                                              ; preds = %134
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %11, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %12, align 4
  br label %214

199:                                              ; preds = %137
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %11, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %12, align 4
  br label %210

203:                                              ; preds = %146, %143
  %204 = landingpad { ptr, i32 }
          cleanup
  %205 = extractvalue { ptr, i32 } %204, 0
  store ptr %205, ptr %11, align 8
  %206 = extractvalue { ptr, i32 } %204, 1
  store i32 %206, ptr %12, align 4
  %207 = load i1, ptr %27, align 1
  br i1 %207, label %208, label %209

208:                                              ; preds = %203
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %25) #5
  br label %209

209:                                              ; preds = %208, %203
  br label %210

210:                                              ; preds = %209, %199
  %211 = load i1, ptr %26, align 1
  br i1 %211, label %212, label %213

212:                                              ; preds = %210
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #5
  br label %213

213:                                              ; preds = %212, %210
  br label %214

214:                                              ; preds = %213, %195
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %24) #5
  br label %215

215:                                              ; preds = %214, %191
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  br label %300

216:                                              ; preds = %157
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %11, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %12, align 4
  br label %299

220:                                              ; preds = %161
  %221 = landingpad { ptr, i32 }
          cleanup
  %222 = extractvalue { ptr, i32 } %221, 0
  store ptr %222, ptr %11, align 8
  %223 = extractvalue { ptr, i32 } %221, 1
  store i32 %223, ptr %12, align 4
  br label %298

224:                                              ; preds = %168
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %11, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %12, align 4
  br label %297

228:                                              ; preds = %172
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %11, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %12, align 4
  br label %270

232:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #5
  %233 = load ptr, ptr %2, align 8, !tbaa !5
  %234 = getelementptr inbounds %class.CodeGenContext, ptr %233, i32 0, i32 0
  %235 = load ptr, ptr %234, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #5
  %236 = load ptr, ptr %17, align 8, !tbaa !5
  %237 = load i32, ptr %32, align 4, !tbaa !9
  invoke void @_ZN2z3eqERKNS_4exprEi(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %35, ptr noundef nonnull align 8 dereferenceable(16) %236, i32 noundef %237)
          to label %238 unwind label %251

238:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #5
  %239 = load ptr, ptr %2, align 8, !tbaa !5
  %240 = getelementptr inbounds %class.CodeGenContext, ptr %239, i32 0, i32 10
  %241 = load i32, ptr %32, align 4, !tbaa !9
  invoke void @_ZN9ISASubset10simulateOpEiR8OperandsIN2z34exprEE(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %36, ptr noundef nonnull align 8 dereferenceable(24) %240, i32 noundef %241, ptr noundef nonnull align 8 dereferenceable(56) %30)
          to label %242 unwind label %255

242:                                              ; preds = %238
  invoke void @_ZN2z33iteERKNS_4exprES2_S2_(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %34, ptr noundef nonnull align 8 dereferenceable(16) %35, ptr noundef nonnull align 8 dereferenceable(16) %36, ptr noundef nonnull align 8 dereferenceable(16) %31)
          to label %243 unwind label %259

243:                                              ; preds = %242
  %244 = invoke noundef ptr @_ZNK2z33astcvP7_Z3_astEv(ptr noundef nonnull align 8 dereferenceable(16) %34)
          to label %245 unwind label %263

245:                                              ; preds = %243
  invoke void @_ZN2z37to_exprERNS_7contextEP7_Z3_ast(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %33, ptr noundef nonnull align 8 dereferenceable(16) %235, ptr noundef %244)
          to label %246 unwind label %263

246:                                              ; preds = %245
  %247 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN2z34expraSEOS0_(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef nonnull align 8 dereferenceable(16) %33) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %36) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #5
  br label %248

248:                                              ; preds = %246
  %249 = load i32, ptr %32, align 4, !tbaa !9
  %250 = add nsw i32 %249, -1
  store i32 %250, ptr %32, align 4, !tbaa !9
  br label %178, !llvm.loop !28

251:                                              ; preds = %232
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %11, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %12, align 4
  br label %269

255:                                              ; preds = %238
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %11, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %12, align 4
  br label %268

259:                                              ; preds = %242
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %11, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, ptr %12, align 4
  br label %267

263:                                              ; preds = %245, %243
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %11, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %12, align 4
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #5
  br label %267

267:                                              ; preds = %263, %259
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %36) #5
  br label %268

268:                                              ; preds = %267, %255
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #5
  br label %269

269:                                              ; preds = %268, %251
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #5
  br label %270

270:                                              ; preds = %269, %228
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  br label %296

271:                                              ; preds = %181
  %272 = load ptr, ptr %2, align 8, !tbaa !5
  %273 = getelementptr inbounds %class.CodeGenContext, ptr %272, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #5
  %274 = load ptr, ptr %5, align 8, !tbaa !5
  %275 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %38, ptr noundef nonnull align 8 dereferenceable(16) %274, i32 noundef %275)
          to label %276 unwind label %282

276:                                              ; preds = %271
  invoke void @_ZN2z3eqERKNS_4exprES2_(ptr dead_on_unwind writable sret(%"class.z3::expr") align 8 %37, ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 8 dereferenceable(16) %31)
          to label %277 unwind label %286

277:                                              ; preds = %276
  invoke void @_ZN2z36solver3addERKNS_4exprE(ptr noundef nonnull align 8 dereferenceable(16) %273, ptr noundef nonnull align 8 dereferenceable(16) %37)
          to label %278 unwind label %290

278:                                              ; preds = %277
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %37) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #5
  call void @_ZN8OperandsIN2z34exprEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %30) #5
  call void @llvm.lifetime.end.p0(i64 56, ptr %30) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  br label %279

279:                                              ; preds = %278
  %280 = load i32, ptr %16, align 4, !tbaa !9
  %281 = add nsw i32 %280, 1
  store i32 %281, ptr %16, align 4, !tbaa !9
  br label %82, !llvm.loop !30

282:                                              ; preds = %271
  %283 = landingpad { ptr, i32 }
          cleanup
  %284 = extractvalue { ptr, i32 } %283, 0
  store ptr %284, ptr %11, align 8
  %285 = extractvalue { ptr, i32 } %283, 1
  store i32 %285, ptr %12, align 4
  br label %295

286:                                              ; preds = %276
  %287 = landingpad { ptr, i32 }
          cleanup
  %288 = extractvalue { ptr, i32 } %287, 0
  store ptr %288, ptr %11, align 8
  %289 = extractvalue { ptr, i32 } %287, 1
  store i32 %289, ptr %12, align 4
  br label %294

290:                                              ; preds = %277
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %11, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %12, align 4
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %37) #5
  br label %294

294:                                              ; preds = %290, %286
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #5
  br label %295

295:                                              ; preds = %294, %282
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #5
  br label %296

296:                                              ; preds = %295, %270
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #5
  br label %297

297:                                              ; preds = %296, %224
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #5
  call void @_ZN8OperandsIN2z34exprEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %30) #5
  br label %298

298:                                              ; preds = %297, %220
  call void @llvm.lifetime.end.p0(i64 56, ptr %30) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #5
  br label %299

299:                                              ; preds = %298, %216
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  br label %300

300:                                              ; preds = %299, %215
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  br label %301

301:                                              ; preds = %300, %190
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  br label %306

302:                                              ; preds = %88
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  br label %303

303:                                              ; preds = %302
  %304 = load i32, ptr %3, align 4, !tbaa !9
  %305 = add nsw i32 %304, 1
  store i32 %305, ptr %3, align 4, !tbaa !9
  br label %39, !llvm.loop !31

306:                                              ; preds = %301, %116, %102
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #5
  br label %308

307:                                              ; preds = %45
  ret void

308:                                              ; preds = %306
  %309 = load ptr, ptr %11, align 8
  %310 = load i32, ptr %12, align 4
  %311 = insertvalue { ptr, i32 } poison, ptr %309, 0
  %312 = insertvalue { ptr, i32 } %311, i32 %310, 1
  resume { ptr, i32 } %312
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN2z314ast_vector_tplINS0_4exprEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNSt24uniform_int_distributionIiEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEiRT_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(5000)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z3eqERKNS_4exprES2_(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z3neERKNS_4exprEi(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9ISASubset13opCodeForNameEPKc(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK2z33astcvbEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8OperandsIN2z34exprEEC2ERNS0_7contextERKS1_S6_S6_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9ISASubset10simulateOpEiR8OperandsIN2z34exprEE(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, ptr noundef nonnull align 8 dereferenceable(56)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN8OperandsIN2z34exprEED2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #4 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 28}
!12 = !{!"_ZTS14CodeGenContext", !6, i64 0, !13, i64 8, !10, i64 24, !10, i64 28, !10, i64 32, !15, i64 40, !15, i64 56, !15, i64 72, !15, i64 88, !16, i64 104, !20, i64 128}
!13 = !{!"_ZTSN2z36solverE", !14, i64 0, !6, i64 8}
!14 = !{!"_ZTSN2z36objectE", !6, i64 0}
!15 = !{!"_ZTSN2z314ast_vector_tplINS_4exprEEE", !14, i64 0, !6, i64 8}
!16 = !{!"_ZTSSt6vectorIN2z314ast_vector_tplINS0_4exprEEESaIS3_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIN2z314ast_vector_tplINS0_4exprEEESaIS3_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIN2z314ast_vector_tplINS0_4exprEEESaIS3_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIN2z314ast_vector_tplINS0_4exprEEESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!"_ZTS9ISASubset", !21, i64 0}
!21 = !{!"_ZTSSt6vectorIiSaIiEE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!12, !6, i64 0}
!26 = !{!12, !10, i64 32}
!27 = !{!12, !10, i64 24}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}
!31 = distinct !{!31, !29}


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

%"class.std::mersenne_twister_engine" = type { [624 x i64], i64 }
%"class.std::uniform_int_distribution" = type { %"struct.std::uniform_int_distribution<>::param_type" }
%"struct.std::uniform_int_distribution<>::param_type" = type { i32, i32 }
%"class.z3::expr" = type { %"class.z3::ast" }
%"class.z3::ast" = type { %"class.z3::object", ptr }
%"class.z3::object" = type { ptr }
%struct.Operands = type { ptr, %"class.z3::expr", %"class.z3::expr", %"class.z3::expr" }

@prng = external dso_local global %"class.std::mersenne_twister_engine", align 8
@rndDist = external dso_local global %"class.std::uniform_int_distribution", align 4
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN2z36solver3addERKNS_4exprE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK9ISASubset4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z37to_exprERNS_7contextEP7_Z3_ast(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z3eqERKNS_4exprEi(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK2z33astcvP7_Z3_astEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z13SelectOperandR14CodeGenContextRN2z314ast_vector_tplINS1_4exprEEERKS3_i(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z37context6bv_valEij(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), i32 noundef, i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z33iteERKNS_4exprES2_S2_(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN2z34expraSEOS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_Z22AddPerChainConstraintsR14CodeGenContext(ptr noundef nonnull align 8 dereferenceable(152) %0) local_unnamed_addr #2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.z3::expr", align 8
  %3 = alloca %"class.z3::expr", align 8
  %4 = alloca %"class.z3::expr", align 8
  %5 = alloca %"class.z3::expr", align 8
  %6 = alloca %"class.z3::expr", align 8
  %7 = alloca %"class.z3::expr", align 8
  %8 = alloca %"class.z3::expr", align 8
  %9 = alloca %"class.z3::expr", align 8
  %10 = alloca %"class.z3::expr", align 8
  %11 = alloca %"class.z3::expr", align 8
  %12 = alloca %"class.z3::expr", align 8
  %13 = alloca %"class.z3::expr", align 8
  %14 = alloca %"class.z3::expr", align 8
  %15 = alloca %struct.Operands, align 8
  %16 = alloca %"class.z3::expr", align 8
  %17 = alloca %"class.z3::expr", align 8
  %18 = alloca %"class.z3::expr", align 8
  %19 = alloca %"class.z3::expr", align 8
  %20 = alloca %"class.z3::expr", align 8
  %21 = alloca %"class.z3::expr", align 8
  %22 = alloca %"class.z3::expr", align 8
  %23 = getelementptr inbounds i8, ptr %0, i64 28
  %24 = load i32, ptr %23, align 4, !tbaa !5
  %25 = icmp sgt i32 %24, 0
  br i1 %25, label %.lr.ph122, label %._crit_edge123

.lr.ph122:                                        ; preds = %1
  %26 = getelementptr inbounds i8, ptr %0, i64 104
  %27 = getelementptr inbounds i8, ptr %0, i64 8
  %28 = getelementptr inbounds i8, ptr %0, i64 32
  %29 = getelementptr inbounds i8, ptr %0, i64 24
  %30 = getelementptr inbounds i8, ptr %0, i64 40
  %31 = getelementptr inbounds i8, ptr %0, i64 56
  %32 = getelementptr inbounds i8, ptr %0, i64 128
  %33 = getelementptr inbounds i8, ptr %0, i64 72
  %34 = getelementptr inbounds i8, ptr %0, i64 88
  br label %35

._crit_edge123:                                   ; preds = %._crit_edge119, %1
  ret void

35:                                               ; preds = %.lr.ph122, %._crit_edge119
  %indvars.iv = phi i64 [ 0, %.lr.ph122 ], [ %indvars.iv.next, %._crit_edge119 ]
  %36 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN2z314ast_vector_tplINS0_4exprEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %indvars.iv) #5
  %37 = call noundef i32 @_ZNSt24uniform_int_distributionIiEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEiRT_(ptr noundef nonnull align 4 dereferenceable(8) @rndDist, ptr noundef nonnull align 8 dereferenceable(5000) @prng)
  %38 = call noundef i32 @_Z10TargetFunci(i32 noundef %37)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #5
  call void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %3, ptr noundef nonnull align 8 dereferenceable(16) %36, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #5
  %39 = load ptr, ptr %0, align 8, !tbaa !23
  invoke void @_ZN2z37context6bv_valEij(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %4, ptr noundef nonnull align 8 dereferenceable(16) %39, i32 noundef %37, i32 noundef 32)
          to label %40 unwind label %55

40:                                               ; preds = %35
  invoke void @_ZN2z3eqERKNS_4exprES2_(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %2, ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %41 unwind label %57

41:                                               ; preds = %40
  invoke void @_ZN2z36solver3addERKNS_4exprE(ptr noundef nonnull align 8 dereferenceable(16) %27, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %42 unwind label %59

42:                                               ; preds = %41
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %2) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #5
  %43 = load i32, ptr %28, align 8, !tbaa !24
  %44 = add nsw i32 %43, -1
  call void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %6, ptr noundef nonnull align 8 dereferenceable(16) %36, i32 noundef %44)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #5
  %45 = load ptr, ptr %0, align 8, !tbaa !23
  invoke void @_ZN2z37context6bv_valEij(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %7, ptr noundef nonnull align 8 dereferenceable(16) %45, i32 noundef %38, i32 noundef 32)
          to label %46 unwind label %63

46:                                               ; preds = %42
  invoke void @_ZN2z3eqERKNS_4exprES2_(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %5, ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %7)
          to label %47 unwind label %65

47:                                               ; preds = %46
  invoke void @_ZN2z36solver3addERKNS_4exprE(ptr noundef nonnull align 8 dereferenceable(16) %27, ptr noundef nonnull align 8 dereferenceable(16) %5)
          to label %48 unwind label %67

48:                                               ; preds = %47
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #5
  %49 = load i32, ptr %29, align 8, !tbaa !25
  %50 = load i32, ptr %28, align 8, !tbaa !24
  %51 = icmp slt i32 %49, %50
  br i1 %51, label %.lr.ph118, label %._crit_edge119

._crit_edge119:                                   ; preds = %132, %48
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %52 = load i32, ptr %23, align 4, !tbaa !5
  %53 = sext i32 %52 to i64
  %54 = icmp slt i64 %indvars.iv.next, %53
  br i1 %54, label %35, label %._crit_edge123, !llvm.loop !26

55:                                               ; preds = %35
  %56 = landingpad { ptr, i32 }
          cleanup
  br label %62

57:                                               ; preds = %40
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %61

59:                                               ; preds = %41
  %60 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %2) #5
  br label %61

61:                                               ; preds = %59, %57
  %.pn = phi { ptr, i32 } [ %60, %59 ], [ %58, %57 ]
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #5
  br label %62

62:                                               ; preds = %61, %55
  %.pn.pn = phi { ptr, i32 } [ %.pn, %61 ], [ %56, %55 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #5
  br label %150

63:                                               ; preds = %42
  %64 = landingpad { ptr, i32 }
          cleanup
  br label %70

65:                                               ; preds = %46
  %66 = landingpad { ptr, i32 }
          cleanup
  br label %69

67:                                               ; preds = %47
  %68 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #5
  br label %69

69:                                               ; preds = %67, %65
  %.pn86 = phi { ptr, i32 } [ %68, %67 ], [ %66, %65 ]
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #5
  br label %70

70:                                               ; preds = %69, %63
  %.pn86.pn = phi { ptr, i32 } [ %.pn86, %69 ], [ %64, %63 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #5
  br label %150

.lr.ph118:                                        ; preds = %48, %132
  %.083116 = phi i32 [ %133, %132 ], [ %49, %48 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #5
  call void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %8, ptr noundef nonnull align 8 dereferenceable(16) %30, i32 noundef %.083116)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #5
  invoke void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %10, ptr noundef nonnull align 8 dereferenceable(16) %31, i32 noundef %.083116)
          to label %71 unwind label %89

71:                                               ; preds = %.lr.ph118
  invoke void @_Z13SelectOperandR14CodeGenContextRN2z314ast_vector_tplINS1_4exprEEERKS3_i(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %9, ptr noundef nonnull align 8 dereferenceable(152) %0, ptr noundef nonnull align 8 dereferenceable(16) %36, ptr noundef nonnull align 8 dereferenceable(16) %10, i32 noundef %.083116)
          to label %72 unwind label %91

72:                                               ; preds = %71
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #5
  %73 = invoke noundef i32 @_ZN9ISASubset13opCodeForNameEPKc(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull @.str.7)
          to label %74 unwind label %94

74:                                               ; preds = %72
  invoke void @_ZN2z3neERKNS_4exprEi(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %12, ptr noundef nonnull align 8 dereferenceable(16) %8, i32 noundef %73)
          to label %75 unwind label %94

75:                                               ; preds = %74
  %76 = call noundef zeroext i1 @_ZNK2z33astcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %12)
  br i1 %76, label %77, label %79

77:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #5
  invoke void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %13, ptr noundef nonnull align 8 dereferenceable(16) %33, i32 noundef %.083116)
          to label %78 unwind label %96

78:                                               ; preds = %77
  invoke void @_Z13SelectOperandR14CodeGenContextRN2z314ast_vector_tplINS1_4exprEEERKS3_i(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %11, ptr noundef nonnull align 8 dereferenceable(152) %0, ptr noundef nonnull align 8 dereferenceable(16) %36, ptr noundef nonnull align 8 dereferenceable(16) %13, i32 noundef %.083116)
          to label %81 unwind label %98

79:                                               ; preds = %75
  %80 = load ptr, ptr %0, align 8, !tbaa !23
  invoke void @_ZN2z37context6bv_valEij(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %11, ptr noundef nonnull align 8 dereferenceable(16) %80, i32 noundef 0, i32 noundef 32)
          to label %.critedge unwind label %100

81:                                               ; preds = %78
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #5
  br label %.critedge

.critedge:                                        ; preds = %79, %81
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #5
  invoke void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %14, ptr noundef nonnull align 8 dereferenceable(16) %34, i32 noundef %.083116)
          to label %82 unwind label %105

82:                                               ; preds = %.critedge
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %15) #5
  %83 = load ptr, ptr %0, align 8, !tbaa !23
  invoke void @_ZN8OperandsIN2z34exprEEC2ERNS0_7contextERKS1_S6_S6_(ptr noundef nonnull align 8 dereferenceable(56) %15, ptr noundef nonnull align 8 dereferenceable(16) %83, ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(16) %14)
          to label %84 unwind label %107

84:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #5
  %85 = load ptr, ptr %0, align 8, !tbaa !23
  invoke void @_ZN2z37context6bv_valEij(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %16, ptr noundef nonnull align 8 dereferenceable(16) %85, i32 noundef 0, i32 noundef 32)
          to label %86 unwind label %109

86:                                               ; preds = %84
  %87 = call noundef i32 @_ZNK9ISASubset4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %32)
  %88 = icmp sgt i32 %87, 0
  br i1 %88, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %116, %86
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #5
  invoke void @_ZNK2z314ast_vector_tplINS_4exprEEixEi(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %22, ptr noundef nonnull align 8 dereferenceable(16) %36, i32 noundef %.083116)
          to label %130 unwind label %136

89:                                               ; preds = %.lr.ph118
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %93

91:                                               ; preds = %71
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #5
  br label %93

93:                                               ; preds = %91, %89
  %.pn89 = phi { ptr, i32 } [ %92, %91 ], [ %90, %89 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #5
  br label %149

94:                                               ; preds = %74, %72
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %104

96:                                               ; preds = %77
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %102

98:                                               ; preds = %78
  %99 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #5
  br label %102

100:                                              ; preds = %79
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %103

102:                                              ; preds = %98, %96
  %.pn91.ph = phi { ptr, i32 } [ %97, %96 ], [ %99, %98 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #5
  br label %103

103:                                              ; preds = %100, %102
  %.pn91112 = phi { ptr, i32 } [ %101, %100 ], [ %.pn91.ph, %102 ]
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #5
  br label %104

104:                                              ; preds = %103, %94
  %.pn91.pn = phi { ptr, i32 } [ %.pn91112, %103 ], [ %95, %94 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #5
  br label %148

105:                                              ; preds = %.critedge
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %147

107:                                              ; preds = %82
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %146

109:                                              ; preds = %84
  %110 = landingpad { ptr, i32 }
          cleanup
  br label %145

.lr.ph:                                           ; preds = %86, %116
  %.0115.in = phi i32 [ %.0115, %116 ], [ %87, %86 ]
  %.0115 = add nsw i32 %.0115.in, -1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #5
  %111 = load ptr, ptr %0, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #5
  invoke void @_ZN2z3eqERKNS_4exprEi(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %19, ptr noundef nonnull align 8 dereferenceable(16) %8, i32 noundef %.0115)
          to label %112 unwind label %119

112:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #5
  invoke void @_ZN9ISASubset10simulateOpEiR8OperandsIN2z34exprEE(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %20, ptr noundef nonnull align 8 dereferenceable(24) %32, i32 noundef %.0115, ptr noundef nonnull align 8 dereferenceable(56) %15)
          to label %113 unwind label %121

113:                                              ; preds = %112
  invoke void @_ZN2z33iteERKNS_4exprES2_S2_(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %18, ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(16) %20, ptr noundef nonnull align 8 dereferenceable(16) %16)
          to label %114 unwind label %123

114:                                              ; preds = %113
  %115 = call noundef ptr @_ZNK2z33astcvP7_Z3_astEv(ptr noundef nonnull align 8 dereferenceable(16) %18)
  invoke void @_ZN2z37to_exprERNS_7contextEP7_Z3_ast(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %17, ptr noundef nonnull align 8 dereferenceable(16) %111, ptr noundef %115)
          to label %116 unwind label %125

116:                                              ; preds = %114
  %117 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN2z34expraSEOS0_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %17) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #5
  %118 = icmp ugt i32 %.0115.in, 1
  br i1 %118, label %.lr.ph, label %._crit_edge, !llvm.loop !28

119:                                              ; preds = %.lr.ph
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %129

121:                                              ; preds = %112
  %122 = landingpad { ptr, i32 }
          cleanup
  br label %128

123:                                              ; preds = %113
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %127

125:                                              ; preds = %114
  %126 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #5
  br label %127

127:                                              ; preds = %125, %123
  %.pn97 = phi { ptr, i32 } [ %126, %125 ], [ %124, %123 ]
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #5
  br label %128

128:                                              ; preds = %127, %121
  %.pn97.pn = phi { ptr, i32 } [ %.pn97, %127 ], [ %122, %121 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #5
  br label %129

129:                                              ; preds = %128, %119
  %.pn97.pn.pn = phi { ptr, i32 } [ %.pn97.pn, %128 ], [ %120, %119 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #5
  br label %144

130:                                              ; preds = %._crit_edge
  invoke void @_ZN2z3eqERKNS_4exprES2_(ptr dead_on_unwind nonnull writable sret(%"class.z3::expr") align 8 %21, ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef nonnull align 8 dereferenceable(16) %16)
          to label %131 unwind label %138

131:                                              ; preds = %130
  invoke void @_ZN2z36solver3addERKNS_4exprE(ptr noundef nonnull align 8 dereferenceable(16) %27, ptr noundef nonnull align 8 dereferenceable(16) %21)
          to label %132 unwind label %140

132:                                              ; preds = %131
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #5
  call void @_ZN8OperandsIN2z34exprEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %15) #5
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %15) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #5
  %133 = add nsw i32 %.083116, 1
  %134 = load i32, ptr %28, align 8, !tbaa !24
  %135 = icmp slt i32 %133, %134
  br i1 %135, label %.lr.ph118, label %._crit_edge119, !llvm.loop !29

136:                                              ; preds = %._crit_edge
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %143

138:                                              ; preds = %130
  %139 = landingpad { ptr, i32 }
          cleanup
  br label %142

140:                                              ; preds = %131
  %141 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #5
  br label %142

142:                                              ; preds = %140, %138
  %.pn94 = phi { ptr, i32 } [ %141, %140 ], [ %139, %138 ]
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #5
  br label %143

143:                                              ; preds = %142, %136
  %.pn94.pn = phi { ptr, i32 } [ %.pn94, %142 ], [ %137, %136 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #5
  br label %144

144:                                              ; preds = %143, %129
  %.pn97.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn, %129 ], [ %.pn94.pn, %143 ]
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #5
  br label %145

145:                                              ; preds = %144, %109
  %.pn97.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn.pn, %144 ], [ %110, %109 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #5
  call void @_ZN8OperandsIN2z34exprEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %15) #5
  br label %146

146:                                              ; preds = %145, %107
  %.pn97.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn.pn.pn, %145 ], [ %108, %107 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %15) #5
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #5
  br label %147

147:                                              ; preds = %146, %105
  %.pn97.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn.pn.pn.pn, %146 ], [ %106, %105 ]
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #5
  br label %148

148:                                              ; preds = %147, %104
  %.pn97.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn.pn.pn.pn.pn, %147 ], [ %.pn91.pn, %104 ]
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  br label %149

149:                                              ; preds = %148, %93
  %.pn97.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn.pn.pn.pn.pn.pn, %148 ], [ %.pn89, %93 ]
  call void @_ZN2z33astD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #5
  br label %150

150:                                              ; preds = %149, %70, %62
  %.pn97.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn.pn.pn.pn.pn.pn.pn, %149 ], [ %.pn86.pn, %70 ], [ %.pn.pn, %62 ]
  resume { ptr, i32 } %.pn97.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN2z314ast_vector_tplINS0_4exprEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNSt24uniform_int_distributionIiEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEiRT_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(5000)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z3eqERKNS_4exprES2_(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2z3neERKNS_4exprEi(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9ISASubset13opCodeForNameEPKc(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK2z33astcvbEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8OperandsIN2z34exprEEC2ERNS0_7contextERKS1_S6_S6_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9ISASubset10simulateOpEiR8OperandsIN2z34exprEE(ptr dead_on_unwind noalias writable sret(%"class.z3::expr") align 8, ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN8OperandsIN2z34exprEED2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #4 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !12, i64 28}
!6 = !{!"_ZTS14CodeGenContext", !7, i64 0, !10, i64 8, !12, i64 24, !12, i64 28, !12, i64 32, !13, i64 40, !13, i64 56, !13, i64 72, !13, i64 88, !14, i64 104, !18, i64 128}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN2z36solverE", !11, i64 0, !7, i64 8}
!11 = !{!"_ZTSN2z36objectE", !7, i64 0}
!12 = !{!"int", !8, i64 0}
!13 = !{!"_ZTSN2z314ast_vector_tplINS_4exprEEE", !11, i64 0, !7, i64 8}
!14 = !{!"_ZTSSt6vectorIN2z314ast_vector_tplINS0_4exprEEESaIS3_EE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseIN2z314ast_vector_tplINS0_4exprEEESaIS3_EE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIN2z314ast_vector_tplINS0_4exprEEESaIS3_EE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIN2z314ast_vector_tplINS0_4exprEEESaIS3_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!18 = !{!"_ZTS9ISASubset", !19, i64 0}
!19 = !{!"_ZTSSt6vectorIiSaIiEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!23 = !{!6, !7, i64 0}
!24 = !{!6, !12, i64 32}
!25 = !{!6, !12, i64 24}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = distinct !{!28, !27}
!29 = distinct !{!29, !27}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass