; LLVM IR from aap/pdp6 :: emu (apr)

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

%struct.Device = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.Task = type { ptr, ptr, ptr, i32, i32 }
%struct.Busdev = type { ptr, ptr, i8 }
%struct.Apr = type { %struct.Device, %struct.IOBus, %struct.Membus, i32, %struct.AprState, %struct.AprState, i32, i64, i64, i32, i32, i32, i8, i16, i16, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, ptr, ptr, i32, i8, [20 x %struct.TPulse], ptr, ptr }
%struct.IOBus = type { i64, i64, i64, i64, i64, i64, i32, [128 x %struct.Busdev] }
%struct.Membus = type { i64, i64, i64, i64, i64, i64, ptr, [16 x ptr] }
%struct.AprState = type { i64, i64, i64 }
%struct.TPulse = type { ptr, ptr, i32 }

@apr_ident = external dso_local global ptr, align 8
@aprproto = external hidden global %struct.Device, align 8

; Function Attrs: nounwind uwtable
define dso_local ptr @makeapr(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca %struct.Task, align 8
  %7 = alloca %struct.Busdev, align 8
  %8 = alloca %struct.Busdev, align 8
  %9 = alloca %struct.Task, align 8
  store i32 %0, ptr %3, align 4, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %6) #6
  %10 = call noalias ptr @malloc(i64 noundef 4184) #7
  store ptr %10, ptr %5, align 8, !tbaa !9
  %11 = load ptr, ptr %5, align 8, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 8 %11, i8 0, i64 4184, i1 false)
  %12 = load ptr, ptr %5, align 8, !tbaa !9
  %13 = getelementptr inbounds %struct.Apr, ptr %12, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %13, ptr align 8 @aprproto, i64 64, i1 false), !tbaa.struct !11
  %14 = load ptr, ptr @apr_ident, align 8, !tbaa !9
  %15 = load ptr, ptr %5, align 8, !tbaa !9
  %16 = getelementptr inbounds %struct.Apr, ptr %15, i32 0, i32 0
  %17 = getelementptr inbounds %struct.Device, ptr %16, i32 0, i32 1
  store ptr %14, ptr %17, align 8, !tbaa !12
  %18 = load ptr, ptr %5, align 8, !tbaa !9
  %19 = getelementptr inbounds %struct.Apr, ptr %18, i32 0, i32 1
  %20 = getelementptr inbounds %struct.IOBus, ptr %19, i32 0, i32 7
  %21 = getelementptr inbounds [128 x %struct.Busdev], ptr %20, i64 0, i64 0
  %22 = getelementptr inbounds %struct.Busdev, ptr %7, i32 0, i32 0
  %23 = load ptr, ptr %5, align 8, !tbaa !9
  store ptr %23, ptr %22, align 8, !tbaa !20
  %24 = getelementptr inbounds %struct.Busdev, ptr %7, i32 0, i32 1
  store ptr @wake_cpa, ptr %24, align 8, !tbaa !22
  %25 = getelementptr inbounds %struct.Busdev, ptr %7, i32 0, i32 2
  store i8 0, ptr %25, align 8, !tbaa !23
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %21, ptr align 8 %7, i64 24, i1 false), !tbaa.struct !24
  %26 = load ptr, ptr %5, align 8, !tbaa !9
  %27 = getelementptr inbounds %struct.Apr, ptr %26, i32 0, i32 1
  %28 = getelementptr inbounds %struct.IOBus, ptr %27, i32 0, i32 7
  %29 = getelementptr inbounds [128 x %struct.Busdev], ptr %28, i64 0, i64 1
  %30 = getelementptr inbounds %struct.Busdev, ptr %8, i32 0, i32 0
  %31 = load ptr, ptr %5, align 8, !tbaa !9
  store ptr %31, ptr %30, align 8, !tbaa !20
  %32 = getelementptr inbounds %struct.Busdev, ptr %8, i32 0, i32 1
  store ptr @wake_pi, ptr %32, align 8, !tbaa !22
  %33 = getelementptr inbounds %struct.Busdev, ptr %8, i32 0, i32 2
  store i8 0, ptr %33, align 8, !tbaa !23
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %29, ptr align 8 %8, i64 24, i1 false), !tbaa.struct !24
  %34 = getelementptr inbounds %struct.Task, ptr %9, i32 0, i32 0
  store ptr null, ptr %34, align 8, !tbaa !26
  %35 = getelementptr inbounds %struct.Task, ptr %9, i32 0, i32 1
  store ptr @aprcycle, ptr %35, align 8, !tbaa !28
  %36 = getelementptr inbounds %struct.Task, ptr %9, i32 0, i32 2
  %37 = load ptr, ptr %5, align 8, !tbaa !9
  store ptr %37, ptr %36, align 8, !tbaa !29
  %38 = getelementptr inbounds %struct.Task, ptr %9, i32 0, i32 3
  store i32 1, ptr %38, align 8, !tbaa !30
  %39 = getelementptr inbounds %struct.Task, ptr %9, i32 0, i32 4
  store i32 0, ptr %39, align 4, !tbaa !31
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6, ptr align 8 %9, i64 32, i1 false), !tbaa.struct !32
  call void @addtask(ptr noundef byval(%struct.Task) align 8 %6)
  %40 = call ptr @chancreate(i32 noundef 4, i32 noundef 1)
  %41 = load ptr, ptr %5, align 8, !tbaa !9
  %42 = getelementptr inbounds %struct.Apr, ptr %41, i32 0, i32 176
  store ptr %40, ptr %42, align 8, !tbaa !33
  %43 = call ptr @chancreate(i32 noundef 4, i32 noundef 1)
  %44 = load ptr, ptr %5, align 8, !tbaa !9
  %45 = getelementptr inbounds %struct.Apr, ptr %44, i32 0, i32 177
  store ptr %43, ptr %45, align 8, !tbaa !34
  %46 = load ptr, ptr %5, align 8, !tbaa !9
  %47 = getelementptr inbounds %struct.Apr, ptr %46, i32 0, i32 0
  call void @llvm.lifetime.end.p0(i64 32, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  ret ptr %47
}

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

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #2

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

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

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

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

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

declare void @addtask(ptr noundef byval(%struct.Task) align 8) #5

declare ptr @chancreate(i32 noundef, i32 noundef) #5

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{i64 0, i64 8, !9, i64 8, i64 8, !9, i64 16, i64 8, !9, i64 24, i64 8, !9, i64 32, i64 8, !9, i64 40, i64 8, !9, i64 48, i64 8, !9, i64 56, i64 8, !9}
!12 = !{!13, !10, i64 8}
!13 = !{!"Apr", !14, i64 0, !15, i64 64, !17, i64 3192, !6, i64 3376, !18, i64 3384, !18, i64 3408, !6, i64 3432, !16, i64 3440, !16, i64 3448, !6, i64 3456, !6, i64 3460, !6, i64 3464, !7, i64 3468, !19, i64 3470, !19, i64 3472, !7, i64 3474, !7, i64 3475, !7, i64 3476, !7, i64 3477, !7, i64 3478, !7, i64 3479, !7, i64 3480, !7, i64 3481, !7, i64 3482, !7, i64 3483, !7, i64 3484, !7, i64 3485, !7, i64 3486, !7, i64 3487, !7, i64 3488, !7, i64 3489, !7, i64 3490, !7, i64 3491, !7, i64 3492, !7, i64 3493, !7, i64 3494, !7, i64 3495, !7, i64 3496, !7, i64 3497, !7, i64 3498, !7, i64 3499, !7, i64 3500, !7, i64 3501, !7, i64 3502, !6, i64 3504, !6, i64 3508, !7, i64 3512, !7, i64 3513, !7, i64 3514, !7, i64 3515, !7, i64 3516, !7, i64 3517, !7, i64 3518, !7, i64 3519, !7, i64 3520, !7, i64 3521, !7, i64 3522, !7, i64 3523, !7, i64 3524, !7, i64 3525, !7, i64 3526, !7, i64 3527, !7, i64 3528, !7, i64 3529, !7, i64 3530, !7, i64 3531, !7, i64 3532, !7, i64 3533, !7, i64 3534, !7, i64 3535, !7, i64 3536, !7, i64 3537, !7, i64 3538, !7, i64 3539, !7, i64 3540, !7, i64 3541, !7, i64 3542, !7, i64 3543, !7, i64 3544, !7, i64 3545, !7, i64 3546, !7, i64 3547, !7, i64 3548, !7, i64 3549, !7, i64 3550, !7, i64 3551, !6, i64 3552, !7, i64 3556, !7, i64 3557, !7, i64 3558, !7, i64 3559, !7, i64 3560, !7, i64 3561, !7, i64 3562, !7, i64 3563, !7, i64 3564, !7, i64 3565, !7, i64 3566, !7, i64 3567, !7, i64 3568, !7, i64 3569, !7, i64 3570, !7, i64 3571, !7, i64 3572, !7, i64 3573, !7, i64 3574, !7, i64 3575, !7, i64 3576, !7, i64 3577, !7, i64 3578, !7, i64 3579, !7, i64 3580, !7, i64 3581, !7, i64 3582, !7, i64 3583, !7, i64 3584, !7, i64 3585, !7, i64 3586, !7, i64 3587, !7, i64 3588, !7, i64 3589, !7, i64 3590, !7, i64 3591, !7, i64 3592, !7, i64 3593, !7, i64 3594, !7, i64 3595, !7, i64 3596, !7, i64 3597, !7, i64 3598, !7, i64 3599, !7, i64 3600, !7, i64 3601, !7, i64 3602, !7, i64 3603, !7, i64 3604, !7, i64 3605, !7, i64 3606, !7, i64 3607, !7, i64 3608, !7, i64 3609, !7, i64 3610, !7, i64 3611, !7, i64 3612, !7, i64 3613, !7, i64 3614, !6, i64 3616, !6, i64 3620, !6, i64 3624, !7, i64 3628, !7, i64 3629, !7, i64 3630, !7, i64 3631, !7, i64 3632, !7, i64 3633, !7, i64 3634, !7, i64 3635, !7, i64 3636, !7, i64 3637, !7, i64 3638, !7, i64 3639, !7, i64 3640, !7, i64 3641, !7, i64 3642, !6, i64 3644, !7, i64 3648, !7, i64 3649, !7, i64 3650, !7, i64 3651, !7, i64 3652, !7, i64 3653, !7, i64 3654, !7, i64 3655, !7, i64 3656, !7, i64 3657, !7, i64 3658, !10, i64 3664, !10, i64 3672, !6, i64 3680, !7, i64 3684, !7, i64 3688, !10, i64 4168, !10, i64 4176}
!14 = !{!"Device", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56}
!15 = !{!"IOBus", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40, !6, i64 48, !7, i64 56}
!16 = !{!"long", !7, i64 0}
!17 = !{!"Membus", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40, !10, i64 48, !7, i64 56}
!18 = !{!"AprState", !16, i64 0, !16, i64 8, !16, i64 16}
!19 = !{!"short", !7, i64 0}
!20 = !{!21, !10, i64 0}
!21 = !{!"Busdev", !10, i64 0, !10, i64 8, !7, i64 16}
!22 = !{!21, !10, i64 8}
!23 = !{!21, !7, i64 16}
!24 = !{i64 0, i64 8, !9, i64 8, i64 8, !9, i64 16, i64 1, !25}
!25 = !{!7, !7, i64 0}
!26 = !{!27, !10, i64 0}
!27 = !{!"Task", !10, i64 0, !10, i64 8, !10, i64 16, !6, i64 24, !6, i64 28}
!28 = !{!27, !10, i64 8}
!29 = !{!27, !10, i64 16}
!30 = !{!27, !6, i64 24}
!31 = !{!27, !6, i64 28}
!32 = !{i64 0, i64 8, !9, i64 8, i64 8, !9, i64 16, i64 8, !9, i64 24, i64 4, !5, i64 28, i64 4, !5}
!33 = !{!13, !10, i64 3664}
!34 = !{!13, !10, i64 3672}


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

%struct.Device = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.Task = type { ptr, ptr, ptr, i32, i32 }

@apr_ident = external dso_local local_unnamed_addr global ptr, align 8
@aprproto = external hidden local_unnamed_addr global %struct.Device, align 8

; Function Attrs: nounwind uwtable
define dso_local noundef ptr @makeapr(i32 noundef %0, ptr nocapture noundef readnone %1) local_unnamed_addr #0 {
  %3 = alloca %struct.Task, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #6
  %4 = tail call noalias dereferenceable_or_null(4184) ptr @malloc(i64 noundef 4184) #7
  %5 = getelementptr i8, ptr %4, i64 64
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(4120) %5, i8 0, i64 4120, i1 false)
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %4, ptr noundef nonnull align 8 dereferenceable(64) @aprproto, i64 64, i1 false), !tbaa.struct !5
  %6 = load ptr, ptr @apr_ident, align 8, !tbaa !6
  %7 = getelementptr inbounds i8, ptr %4, i64 8
  store ptr %6, ptr %7, align 8, !tbaa !10
  %8 = getelementptr inbounds i8, ptr %4, i64 120
  store ptr %4, ptr %8, align 8, !tbaa !6
  %.sroa.26.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 128
  store ptr @wake_cpa, ptr %.sroa.26.0..sroa_idx, align 8, !tbaa !6
  %9 = getelementptr inbounds i8, ptr %4, i64 144
  store ptr %4, ptr %9, align 8, !tbaa !6
  %.sroa.22.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 152
  store ptr @wake_pi, ptr %.sroa.22.0..sroa_idx, align 8, !tbaa !6
  store ptr null, ptr %3, align 8, !tbaa !6
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 8
  store ptr @aprcycle, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !6
  %.sroa.3.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 16
  store ptr %4, ptr %.sroa.3.0..sroa_idx, align 8, !tbaa !6
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 24
  store i32 1, ptr %.sroa.4.0..sroa_idx, align 8, !tbaa !19
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 28
  store i32 0, ptr %.sroa.5.0..sroa_idx, align 4, !tbaa !19
  tail call void @addtask(ptr noundef nonnull byval(%struct.Task) align 8 %3) #6
  %10 = tail call ptr @chancreate(i32 noundef 4, i32 noundef 1) #6
  %11 = getelementptr inbounds i8, ptr %4, i64 3664
  store ptr %10, ptr %11, align 8, !tbaa !20
  %12 = tail call ptr @chancreate(i32 noundef 4, i32 noundef 1) #6
  %13 = getelementptr inbounds i8, ptr %4, i64 3672
  store ptr %12, ptr %13, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #6
  ret ptr %4
}

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

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #2

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

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

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

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

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

declare void @addtask(ptr noundef byval(%struct.Task) align 8) local_unnamed_addr #5

declare ptr @chancreate(i32 noundef, i32 noundef) local_unnamed_addr #5

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

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

!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 = !{i64 0, i64 8, !6, i64 8, i64 8, !6, i64 16, i64 8, !6, i64 24, i64 8, !6, i64 32, i64 8, !6, i64 40, i64 8, !6, i64 48, i64 8, !6, i64 56, i64 8, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !7, i64 8}
!11 = !{!"Apr", !12, i64 0, !13, i64 64, !16, i64 3192, !15, i64 3376, !17, i64 3384, !17, i64 3408, !15, i64 3432, !14, i64 3440, !14, i64 3448, !15, i64 3456, !15, i64 3460, !15, i64 3464, !8, i64 3468, !18, i64 3470, !18, i64 3472, !8, i64 3474, !8, i64 3475, !8, i64 3476, !8, i64 3477, !8, i64 3478, !8, i64 3479, !8, i64 3480, !8, i64 3481, !8, i64 3482, !8, i64 3483, !8, i64 3484, !8, i64 3485, !8, i64 3486, !8, i64 3487, !8, i64 3488, !8, i64 3489, !8, i64 3490, !8, i64 3491, !8, i64 3492, !8, i64 3493, !8, i64 3494, !8, i64 3495, !8, i64 3496, !8, i64 3497, !8, i64 3498, !8, i64 3499, !8, i64 3500, !8, i64 3501, !8, i64 3502, !15, i64 3504, !15, i64 3508, !8, i64 3512, !8, i64 3513, !8, i64 3514, !8, i64 3515, !8, i64 3516, !8, i64 3517, !8, i64 3518, !8, i64 3519, !8, i64 3520, !8, i64 3521, !8, i64 3522, !8, i64 3523, !8, i64 3524, !8, i64 3525, !8, i64 3526, !8, i64 3527, !8, i64 3528, !8, i64 3529, !8, i64 3530, !8, i64 3531, !8, i64 3532, !8, i64 3533, !8, i64 3534, !8, i64 3535, !8, i64 3536, !8, i64 3537, !8, i64 3538, !8, i64 3539, !8, i64 3540, !8, i64 3541, !8, i64 3542, !8, i64 3543, !8, i64 3544, !8, i64 3545, !8, i64 3546, !8, i64 3547, !8, i64 3548, !8, i64 3549, !8, i64 3550, !8, i64 3551, !15, i64 3552, !8, i64 3556, !8, i64 3557, !8, i64 3558, !8, i64 3559, !8, i64 3560, !8, i64 3561, !8, i64 3562, !8, i64 3563, !8, i64 3564, !8, i64 3565, !8, i64 3566, !8, i64 3567, !8, i64 3568, !8, i64 3569, !8, i64 3570, !8, i64 3571, !8, i64 3572, !8, i64 3573, !8, i64 3574, !8, i64 3575, !8, i64 3576, !8, i64 3577, !8, i64 3578, !8, i64 3579, !8, i64 3580, !8, i64 3581, !8, i64 3582, !8, i64 3583, !8, i64 3584, !8, i64 3585, !8, i64 3586, !8, i64 3587, !8, i64 3588, !8, i64 3589, !8, i64 3590, !8, i64 3591, !8, i64 3592, !8, i64 3593, !8, i64 3594, !8, i64 3595, !8, i64 3596, !8, i64 3597, !8, i64 3598, !8, i64 3599, !8, i64 3600, !8, i64 3601, !8, i64 3602, !8, i64 3603, !8, i64 3604, !8, i64 3605, !8, i64 3606, !8, i64 3607, !8, i64 3608, !8, i64 3609, !8, i64 3610, !8, i64 3611, !8, i64 3612, !8, i64 3613, !8, i64 3614, !15, i64 3616, !15, i64 3620, !15, i64 3624, !8, i64 3628, !8, i64 3629, !8, i64 3630, !8, i64 3631, !8, i64 3632, !8, i64 3633, !8, i64 3634, !8, i64 3635, !8, i64 3636, !8, i64 3637, !8, i64 3638, !8, i64 3639, !8, i64 3640, !8, i64 3641, !8, i64 3642, !15, i64 3644, !8, i64 3648, !8, i64 3649, !8, i64 3650, !8, i64 3651, !8, i64 3652, !8, i64 3653, !8, i64 3654, !8, i64 3655, !8, i64 3656, !8, i64 3657, !8, i64 3658, !7, i64 3664, !7, i64 3672, !15, i64 3680, !8, i64 3684, !8, i64 3688, !7, i64 4168, !7, i64 4176}
!12 = !{!"Device", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56}
!13 = !{!"IOBus", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !15, i64 48, !8, i64 56}
!14 = !{!"long", !8, i64 0}
!15 = !{!"int", !8, i64 0}
!16 = !{!"Membus", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !7, i64 48, !8, i64 56}
!17 = !{!"AprState", !14, i64 0, !14, i64 8, !14, i64 16}
!18 = !{!"short", !8, i64 0}
!19 = !{!15, !15, i64 0}
!20 = !{!11, !7, i64 3664}
!21 = !{!11, !7, i64 3672}


; Effective O3 passes: DSEPass,EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,MemCpyOptPass,PostOrderFunctionAttrsPass,SROAPass,TailCallElimPass