; ModuleID = '/tmp/2.ll' source_filename = "/tmp/2.ll" target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" target triple = "aarch64-grtev4-linux-gnu" %struct.snork = type { %struct.barney } %struct.barney = type { %struct.zot, %struct.spam } %struct.zot = type { %struct.barney.0 } %struct.barney.0 = type { i64 } %struct.spam = type { %struct.ham } %struct.ham = type { %struct.eggs } %struct.eggs = type { %struct.hoge } %struct.hoge = type { ptr } %struct.hoge.1 = type { ptr, i64 } %struct.hoge.2 = type { ptr, ptr, ptr, ptr, ptr } %struct.spam.3 = type { ptr, ptr, ptr } %struct.wibble = type { ptr, ptr, ptr } ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0 ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0 ; Function Attrs: nobuiltin allocsize(0) declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #1 ; Function Attrs: mustprogress nounwind uwtable define weak_odr void @wombat(ptr dead_on_unwind noalias writable sret(%struct.snork) align 8 %arg, ptr noundef nonnull align 8 dereferenceable(24) %arg1, [2 x i64] %arg2, i32 noundef %arg3, i1 noundef %arg4, ptr noundef nonnull align 8 dereferenceable(96) %arg5) local_unnamed_addr #2 align 32 { bb: %alloca = alloca %struct.hoge.1, align 8 %alloca6 = alloca i32, align 4 %alloca7 = alloca i8, align 1 %alloca8 = alloca %struct.ham, align 8 %alloca9 = alloca %struct.hoge.2, align 8 %alloca10 = alloca i32, align 4 %alloca11 = alloca %struct.spam.3, align 8 %alloca12 = alloca %struct.wibble, align 8 %extractvalue = extractvalue [2 x i64] %arg2, 0 store i64 %extractvalue, ptr %alloca, align 8 %extractvalue13 = extractvalue [2 x i64] %arg2, 1 %getelementptr = getelementptr inbounds i8, ptr %alloca, i64 8 store i64 %extractvalue13, ptr %getelementptr, align 8 store i32 %arg3, ptr %alloca6, align 4 %zext = zext i1 %arg4 to i8 store i8 %zext, ptr %alloca7, align 1 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %alloca8) #5 %call = tail call noalias noundef nonnull dereferenceable(64) ptr @_Znwm(i64 noundef 64) #6 tail call void @foo(ptr noundef nonnull align 8 dereferenceable(64) %call, ptr noundef null) #5 store ptr %call, ptr %alloca8, align 8 call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %alloca9) #5 store ptr %alloca8, ptr %alloca9, align 8 %getelementptr14 = getelementptr inbounds i8, ptr %alloca9, i64 8 store ptr %alloca, ptr %getelementptr14, align 8 %getelementptr15 = getelementptr inbounds i8, ptr %alloca9, i64 16 store ptr %arg1, ptr %getelementptr15, align 8 %getelementptr16 = getelementptr inbounds i8, ptr %alloca9, i64 24 store ptr %alloca6, ptr %getelementptr16, align 8 %getelementptr17 = getelementptr inbounds i8, ptr %alloca9, i64 32 store ptr %alloca7, ptr %getelementptr17, align 8 call void @bar(ptr noundef nonnull align 8 dereferenceable(40) %alloca9) #7 call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %alloca9) #5 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %alloca10) #5 store i32 0, ptr %alloca10, align 4 %load = load ptr, ptr %arg1, align 8 %getelementptr18 = getelementptr inbounds i8, ptr %arg1, i64 8 %load19 = load ptr, ptr %getelementptr18, align 8 %icmp = icmp eq ptr %load, %load19 br i1 %icmp, label %bb34, label %bb20 bb20: ; preds = %bb %getelementptr21 = getelementptr inbounds i8, ptr %load, i64 8 %load22 = load i64, ptr %getelementptr21, align 8 br label %bb23 bb23: ; preds = %bb23, %bb20 %phi = phi i32 [ %add, %bb23 ], [ 0, %bb20 ] %phi24 = phi i1 [ %select, %bb23 ], [ true, %bb20 ] %phi25 = phi ptr [ %getelementptr29, %bb23 ], [ %load, %bb20 ] %getelementptr26 = getelementptr inbounds i8, ptr %phi25, i64 8 %load27 = load i64, ptr %getelementptr26, align 8 %icmp28 = icmp eq i64 %load27, %load22 %select = select i1 %icmp28, i1 %phi24, i1 false %trunc = trunc i64 %load27 to i32 %add = add i32 %phi, %trunc %getelementptr29 = getelementptr inbounds i8, ptr %phi25, i64 16 %icmp30 = icmp eq ptr %getelementptr29, %load19 br i1 %icmp30, label %bb31, label %bb23 bb31: ; preds = %bb23 %phi32 = phi i1 [ %select, %bb23 ] %phi33 = phi i32 [ %add, %bb23 ] store i32 %phi33, ptr %alloca10, align 4 br i1 %phi32, label %bb34, label %bb39 bb34: ; preds = %bb31, %bb call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %alloca11) #5 store ptr %alloca8, ptr %alloca11, align 8 %getelementptr35 = getelementptr inbounds i8, ptr %alloca11, i64 8 store ptr %arg1, ptr %getelementptr35, align 8 %getelementptr36 = getelementptr inbounds i8, ptr %alloca11, i64 16 store ptr %alloca10, ptr %getelementptr36, align 8 call void @spam(ptr noundef nonnull align 8 dereferenceable(24) %alloca11) #7 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %alloca11) #5 %getelementptr37 = getelementptr inbounds i8, ptr %arg, i64 8 %load38 = load ptr, ptr %alloca8, align 8 store ptr %load38, ptr %getelementptr37, align 8 br label %bb44 bb39: ; preds = %bb31 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %alloca12) #5 store ptr %arg1, ptr %alloca12, align 8 %getelementptr40 = getelementptr inbounds i8, ptr %alloca12, i64 8 store ptr %alloca10, ptr %getelementptr40, align 8 %getelementptr41 = getelementptr inbounds i8, ptr %alloca12, i64 16 store ptr %alloca8, ptr %getelementptr41, align 8 call void @eggs(ptr noundef nonnull align 8 dereferenceable(24) %alloca12) #7 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %alloca12) #5 %getelementptr42 = getelementptr inbounds i8, ptr %arg, i64 8 %load43 = load ptr, ptr %alloca8, align 8 store ptr %load43, ptr %getelementptr42, align 8 br label %bb44 bb44: ; preds = %bb39, %bb34 store i64 1, ptr %arg, align 8 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %alloca10) #5 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %alloca8) #5 ret void } declare void @foo(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef) unnamed_addr #3 ; Function Attrs: inlinehint mustprogress nounwind uwtable declare void @bar(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #4 align 32 ; Function Attrs: inlinehint mustprogress nounwind uwtable declare void @spam(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 32 ; Function Attrs: inlinehint mustprogress nounwind uwtable declare void @eggs(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 32 attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } attributes #1 = { nobuiltin allocsize(0) "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="neoverse-n1" "target-features"="+aes,+crc,+dotprod,+fp-armv8,+fullfp16,+lse,+neon,+outline-atomics,+ras,+rcpc,+rdm,+sha2,+spe,+ssbs,+v8.1a,+v8.2a,+v8a" "tune-cpu"="generic" } attributes #2 = { mustprogress nounwind uwtable "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="neoverse-n1" "target-features"="+aes,+crc,+dotprod,+fp-armv8,+fullfp16,+lse,+neon,+outline-atomics,+ras,+rcpc,+rdm,+sha2,+spe,+ssbs,+v8.1a,+v8.2a,+v8a" "tune-cpu"="generic" } attributes #3 = { "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="neoverse-n1" "target-features"="+aes,+crc,+dotprod,+fp-armv8,+fullfp16,+lse,+neon,+outline-atomics,+ras,+rcpc,+rdm,+sha2,+spe,+ssbs,+v8.1a,+v8.2a,+v8a" "tune-cpu"="generic" } attributes #4 = { inlinehint mustprogress nounwind uwtable "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="neoverse-n1" "target-features"="+aes,+crc,+dotprod,+fp-armv8,+fullfp16,+lse,+neon,+outline-atomics,+ras,+rcpc,+rdm,+sha2,+spe,+ssbs,+v8.1a,+v8.2a,+v8a" "tune-cpu"="generic" } attributes #5 = { nounwind } attributes #6 = { builtin nounwind allocsize(0) } attributes #7 = { noinline }