; ModuleID = './tmp.c' source_filename = "./tmp.c" target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128-ni:1:10:20" target triple = "wasm32" ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn define hidden i32 @__nac3_internal_slice_index_bound(i32 %0, i32 %1) local_unnamed_addr #0 { %3 = icmp slt i32 %0, 0 %4 = select i1 %3, i32 %1, i32 0 %5 = add nsw i32 %4, %0 %6 = icmp slt i32 %5, 0 %7 = icmp sgt i32 %5, %1 %8 = select i1 %7, i32 %1, i32 %5 %9 = select i1 %6, i32 0, i32 %8 ret i32 %9 } ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn define hidden i32 @__nac3_internal_range_slice_len(i32 %0, i32 %1, i32 %2) local_unnamed_addr #0 { %4 = sub nsw i32 %1, %0 %5 = icmp sgt i32 %4, 0 %6 = icmp sgt i32 %2, 0 %7 = select i1 %5, i1 %6, i1 false br i1 %7, label %8, label %12 8: ; preds = %3 %9 = add nsw i32 %4, -1 %10 = udiv i32 %9, %2 %11 = add nuw nsw i32 %10, 1 br label %21 12: ; preds = %3 %13 = icmp slt i32 %4, 0 %14 = icmp slt i32 %2, 0 %15 = select i1 %13, i1 %14, i1 false br i1 %15, label %16, label %21 16: ; preds = %12 %17 = xor i32 %4, -1 %18 = sub i32 0, %2 %19 = udiv i32 %17, %18 %20 = add nuw nsw i32 %19, 1 br label %21 21: ; preds = %12, %16, %8 %22 = phi i32 [ %11, %8 ], [ %20, %16 ], [ 0, %12 ] ret i32 %22 } ; Function Attrs: nofree nosync nounwind define hidden void @__nac3_internal_list_slice_assign_char(i32 %0, i32 %1, i32 %2, i8* %3, i32* nocapture %4, i32 %5, i32 %6, i32 %7, i8* readonly %8, i32 %9) local_unnamed_addr #1 { %11 = icmp eq i32 %2, 1 %12 = icmp eq i32 %7, 1 %13 = and i1 %11, %12 br i1 %13, label %14, label %33 14: ; preds = %10 %15 = icmp slt i32 %6, %5 %16 = sub i32 1, %5 %17 = add i32 %16, %6 %18 = select i1 %15, i32 0, i32 %17 %19 = icmp slt i32 %1, %0 %20 = xor i32 %1, -1 %21 = add i32 %20, %0 %22 = select i1 %19, i32 0, i32 %21 %23 = getelementptr inbounds i8, i8* %3, i32 %0 %24 = getelementptr inbounds i8, i8* %8, i32 %5 tail call void @llvm.memmove.p0i8.p0i8.i32(i8* align 1 %23, i8* align 1 %24, i32 %18, i1 false) %25 = getelementptr inbounds i8, i8* %23, i32 %18 %26 = add nsw i32 %1, 1 %27 = getelementptr inbounds i8, i8* %3, i32 %26 %28 = load i32, i32* %4, align 4, !tbaa !2 %29 = add i32 %28, %20 tail call void @llvm.memmove.p0i8.p0i8.i32(i8* align 1 %25, i8* align 1 %27, i32 %29, i1 false) %30 = load i32, i32* %4, align 4, !tbaa !2 %31 = add i32 %18, %22 %32 = add i32 %31, %30 br label %76 33: ; preds = %10 %34 = icmp eq i8* %3, %8 br i1 %34, label %35, label %47 35: ; preds = %33 %36 = icmp slt i32 %1, %0 %37 = select i1 %36, i32 %0, i32 %1 %38 = icmp slt i32 %6, %5 %39 = select i1 %38, i32 %6, i32 %5 %40 = icmp sge i32 %37, %39 %41 = select i1 %38, i32 %5, i32 %6 %42 = select i1 %36, i32 %1, i32 %0 %43 = icmp sge i32 %41, %42 %44 = select i1 %40, i1 %43, i1 false br i1 %44, label %45, label %47 45: ; preds = %35 %46 = alloca i8, i32 %9, align 16 call void @llvm.memcpy.p0i8.p0i8.i32(i8* nonnull align 16 %46, i8* align 1 %3, i32 %9, i1 false) br label %47 47: ; preds = %33, %45, %35 %48 = phi i8* [ %46, %45 ], [ %3, %35 ], [ %8, %33 ] %49 = icmp sgt i32 %7, 0 %50 = icmp sle i32 %5, %6 %51 = icmp sge i32 %5, %6 %52 = select i1 %49, i1 %50, i1 %51 br i1 %52, label %53, label %64 53: ; preds = %47, %53 %54 = phi i32 [ %60, %53 ], [ %0, %47 ] %55 = phi i32 [ %59, %53 ], [ %5, %47 ] %56 = getelementptr inbounds i8, i8* %48, i32 %55 %57 = load i8, i8* %56, align 1, !tbaa !6 %58 = getelementptr inbounds i8, i8* %3, i32 %54 store i8 %57, i8* %58, align 1, !tbaa !6 %59 = add nsw i32 %55, %7 %60 = add nsw i32 %54, %2 %61 = icmp sle i32 %59, %6 %62 = icmp sge i32 %59, %6 %63 = select i1 %49, i1 %61, i1 %62 br i1 %63, label %53, label %64, !llvm.loop !7 64: ; preds = %53, %47 %65 = phi i32 [ %0, %47 ], [ %60, %53 ] br i1 %11, label %66, label %78 66: ; preds = %64 %67 = getelementptr inbounds i8, i8* %3, i32 %65 %68 = add nsw i32 %1, 1 %69 = getelementptr inbounds i8, i8* %3, i32 %68 %70 = load i32, i32* %4, align 4, !tbaa !2 %71 = xor i32 %1, -1 %72 = add i32 %70, %71 tail call void @llvm.memmove.p0i8.p0i8.i32(i8* align 1 %67, i8* align 1 %69, i32 %72, i1 false) %73 = load i32, i32* %4, align 4, !tbaa !2 %74 = add i32 %65, %71 %75 = add i32 %74, %73 br label %76 76: ; preds = %14, %66 %77 = phi i32 [ %75, %66 ], [ %32, %14 ] store i32 %77, i32* %4, align 4, !tbaa !2 br label %78 78: ; preds = %76, %64 ret void } ; Function Attrs: argmemonly mustprogress nofree nounwind willreturn declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1 immarg) #2 ; Function Attrs: nofree nosync nounwind define hidden void @__nac3_internal_list_slice_assign_int(i32 %0, i32 %1, i32 %2, i32* %3, i32* nocapture %4, i32 %5, i32 %6, i32 %7, i32* readonly %8, i32 %9) local_unnamed_addr #1 { %11 = icmp eq i32 %2, 1 %12 = icmp eq i32 %7, 1 %13 = and i1 %11, %12 br i1 %13, label %14, label %39 14: ; preds = %10 %15 = icmp slt i32 %6, %5 %16 = sub i32 1, %5 %17 = add i32 %16, %6 %18 = select i1 %15, i32 0, i32 %17 %19 = icmp slt i32 %1, %0 %20 = xor i32 %1, -1 %21 = add i32 %20, %0 %22 = select i1 %19, i32 0, i32 %21 %23 = getelementptr inbounds i32, i32* %3, i32 %0 %24 = bitcast i32* %23 to i8* %25 = getelementptr inbounds i32, i32* %8, i32 %5 %26 = bitcast i32* %25 to i8* %27 = shl i32 %18, 2 tail call void @llvm.memmove.p0i8.p0i8.i32(i8* align 4 %24, i8* align 4 %26, i32 %27, i1 false) %28 = getelementptr inbounds i32, i32* %23, i32 %18 %29 = bitcast i32* %28 to i8* %30 = add nsw i32 %1, 1 %31 = getelementptr inbounds i32, i32* %3, i32 %30 %32 = bitcast i32* %31 to i8* %33 = load i32, i32* %4, align 4, !tbaa !2 %34 = add i32 %33, %20 %35 = shl i32 %34, 2 tail call void @llvm.memmove.p0i8.p0i8.i32(i8* align 4 %29, i8* align 4 %32, i32 %35, i1 false) %36 = load i32, i32* %4, align 4, !tbaa !2 %37 = add i32 %18, %22 %38 = add i32 %37, %36 br label %88 39: ; preds = %10 %40 = icmp eq i32* %3, %8 br i1 %40, label %41, label %56 41: ; preds = %39 %42 = icmp slt i32 %1, %0 %43 = select i1 %42, i32 %0, i32 %1 %44 = icmp slt i32 %6, %5 %45 = select i1 %44, i32 %6, i32 %5 %46 = icmp sge i32 %43, %45 %47 = select i1 %44, i32 %5, i32 %6 %48 = select i1 %42, i32 %1, i32 %0 %49 = icmp sge i32 %47, %48 %50 = select i1 %46, i1 %49, i1 false br i1 %50, label %51, label %56 51: ; preds = %41 %52 = shl i32 %9, 2 %53 = alloca i8, i32 %52, align 16 %54 = bitcast i8* %53 to i32* %55 = bitcast i32* %3 to i8* call void @llvm.memcpy.p0i8.p0i8.i32(i8* nonnull align 16 %53, i8* align 4 %55, i32 %52, i1 false) br label %56 56: ; preds = %39, %51, %41 %57 = phi i32* [ %54, %51 ], [ %3, %41 ], [ %8, %39 ] %58 = icmp sgt i32 %7, 0 %59 = icmp sle i32 %5, %6 %60 = icmp sge i32 %5, %6 %61 = select i1 %58, i1 %59, i1 %60 br i1 %61, label %62, label %73 62: ; preds = %56, %62 %63 = phi i32 [ %69, %62 ], [ %0, %56 ] %64 = phi i32 [ %68, %62 ], [ %5, %56 ] %65 = getelementptr inbounds i32, i32* %57, i32 %64 %66 = load i32, i32* %65, align 4, !tbaa !2 %67 = getelementptr inbounds i32, i32* %3, i32 %63 store i32 %66, i32* %67, align 4, !tbaa !2 %68 = add nsw i32 %64, %7 %69 = add nsw i32 %63, %2 %70 = icmp sle i32 %68, %6 %71 = icmp sge i32 %68, %6 %72 = select i1 %58, i1 %70, i1 %71 br i1 %72, label %62, label %73, !llvm.loop !9 73: ; preds = %62, %56 %74 = phi i32 [ %0, %56 ], [ %69, %62 ] br i1 %11, label %75, label %90 75: ; preds = %73 %76 = getelementptr inbounds i32, i32* %3, i32 %74 %77 = bitcast i32* %76 to i8* %78 = add nsw i32 %1, 1 %79 = getelementptr inbounds i32, i32* %3, i32 %78 %80 = bitcast i32* %79 to i8* %81 = load i32, i32* %4, align 4, !tbaa !2 %82 = xor i32 %1, -1 %83 = add i32 %81, %82 %84 = shl i32 %83, 2 tail call void @llvm.memmove.p0i8.p0i8.i32(i8* align 4 %77, i8* align 4 %80, i32 %84, i1 false) %85 = load i32, i32* %4, align 4, !tbaa !2 %86 = add i32 %74, %82 %87 = add i32 %86, %85 br label %88 88: ; preds = %14, %75 %89 = phi i32 [ %87, %75 ], [ %38, %14 ] store i32 %89, i32* %4, align 4, !tbaa !2 br label %90 90: ; preds = %88, %73 ret void } ; Function Attrs: nofree nosync nounwind define hidden void @__nac3_internal_list_slice_assign_long(i32 %0, i32 %1, i32 %2, i32* %3, i32* nocapture %4, i32 %5, i32 %6, i32 %7, i32* readonly %8, i32 %9) local_unnamed_addr #1 { %11 = icmp eq i32 %2, 1 %12 = icmp eq i32 %7, 1 %13 = and i1 %11, %12 br i1 %13, label %14, label %39 14: ; preds = %10 %15 = icmp slt i32 %6, %5 %16 = sub i32 1, %5 %17 = add i32 %16, %6 %18 = select i1 %15, i32 0, i32 %17 %19 = icmp slt i32 %1, %0 %20 = xor i32 %1, -1 %21 = add i32 %20, %0 %22 = select i1 %19, i32 0, i32 %21 %23 = getelementptr inbounds i32, i32* %3, i32 %0 %24 = bitcast i32* %23 to i8* %25 = getelementptr inbounds i32, i32* %8, i32 %5 %26 = bitcast i32* %25 to i8* %27 = shl i32 %18, 2 tail call void @llvm.memmove.p0i8.p0i8.i32(i8* align 4 %24, i8* align 4 %26, i32 %27, i1 false) %28 = getelementptr inbounds i32, i32* %23, i32 %18 %29 = bitcast i32* %28 to i8* %30 = add nsw i32 %1, 1 %31 = getelementptr inbounds i32, i32* %3, i32 %30 %32 = bitcast i32* %31 to i8* %33 = load i32, i32* %4, align 4, !tbaa !2 %34 = add i32 %33, %20 %35 = shl i32 %34, 2 tail call void @llvm.memmove.p0i8.p0i8.i32(i8* align 4 %29, i8* align 4 %32, i32 %35, i1 false) %36 = load i32, i32* %4, align 4, !tbaa !2 %37 = add i32 %18, %22 %38 = add i32 %37, %36 br label %88 39: ; preds = %10 %40 = icmp eq i32* %3, %8 br i1 %40, label %41, label %56 41: ; preds = %39 %42 = icmp slt i32 %1, %0 %43 = select i1 %42, i32 %0, i32 %1 %44 = icmp slt i32 %6, %5 %45 = select i1 %44, i32 %6, i32 %5 %46 = icmp sge i32 %43, %45 %47 = select i1 %44, i32 %5, i32 %6 %48 = select i1 %42, i32 %1, i32 %0 %49 = icmp sge i32 %47, %48 %50 = select i1 %46, i1 %49, i1 false br i1 %50, label %51, label %56 51: ; preds = %41 %52 = shl i32 %9, 2 %53 = alloca i8, i32 %52, align 16 %54 = bitcast i8* %53 to i32* %55 = bitcast i32* %3 to i8* call void @llvm.memcpy.p0i8.p0i8.i32(i8* nonnull align 16 %53, i8* align 4 %55, i32 %52, i1 false) br label %56 56: ; preds = %39, %51, %41 %57 = phi i32* [ %54, %51 ], [ %3, %41 ], [ %8, %39 ] %58 = icmp sgt i32 %7, 0 %59 = icmp sle i32 %5, %6 %60 = icmp sge i32 %5, %6 %61 = select i1 %58, i1 %59, i1 %60 br i1 %61, label %62, label %73 62: ; preds = %56, %62 %63 = phi i32 [ %69, %62 ], [ %0, %56 ] %64 = phi i32 [ %68, %62 ], [ %5, %56 ] %65 = getelementptr inbounds i32, i32* %57, i32 %64 %66 = load i32, i32* %65, align 4, !tbaa !10 %67 = getelementptr inbounds i32, i32* %3, i32 %63 store i32 %66, i32* %67, align 4, !tbaa !10 %68 = add nsw i32 %64, %7 %69 = add nsw i32 %63, %2 %70 = icmp sle i32 %68, %6 %71 = icmp sge i32 %68, %6 %72 = select i1 %58, i1 %70, i1 %71 br i1 %72, label %62, label %73, !llvm.loop !12 73: ; preds = %62, %56 %74 = phi i32 [ %0, %56 ], [ %69, %62 ] br i1 %11, label %75, label %90 75: ; preds = %73 %76 = getelementptr inbounds i32, i32* %3, i32 %74 %77 = bitcast i32* %76 to i8* %78 = add nsw i32 %1, 1 %79 = getelementptr inbounds i32, i32* %3, i32 %78 %80 = bitcast i32* %79 to i8* %81 = load i32, i32* %4, align 4, !tbaa !2 %82 = xor i32 %1, -1 %83 = add i32 %81, %82 %84 = shl i32 %83, 2 tail call void @llvm.memmove.p0i8.p0i8.i32(i8* align 4 %77, i8* align 4 %80, i32 %84, i1 false) %85 = load i32, i32* %4, align 4, !tbaa !2 %86 = add i32 %74, %82 %87 = add i32 %86, %85 br label %88 88: ; preds = %14, %75 %89 = phi i32 [ %87, %75 ], [ %38, %14 ] store i32 %89, i32* %4, align 4, !tbaa !2 br label %90 90: ; preds = %88, %73 ret void } ; Function Attrs: argmemonly nofree nounwind willreturn declare void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i32, i1 immarg) #3 attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } attributes #1 = { nofree nosync nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } attributes #2 = { argmemonly mustprogress nofree nounwind willreturn } attributes #3 = { argmemonly nofree nounwind willreturn } !llvm.module.flags = !{!0} !llvm.ident = !{!1} !0 = !{i32 1, !"wchar_size", i32 4} !1 = !{!"clang version 13.0.0"} !2 = !{!3, !3, i64 0} !3 = !{!"int", !4, i64 0} !4 = !{!"omnipotent char", !5, i64 0} !5 = !{!"Simple C/C++ TBAA"} !6 = !{!4, !4, i64 0} !7 = distinct !{!7, !8} !8 = !{!"llvm.loop.mustprogress"} !9 = distinct !{!9, !8} !10 = !{!11, !11, i64 0} !11 = !{!"long", !4, i64 0} !12 = distinct !{!12, !8}