; ModuleID = 'data/projectB.c' source_filename = "data/projectB.c" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-linux-gnu" @cache = internal global [100 x i32] zeroinitializer, align 16 @__const.projectB_main.str = private unnamed_addr constant [14 x i8] c"Hello, World!\00", align 1 @__const.projectB_main.arr = private unnamed_addr constant [8 x i32] [i32 10, i32 22, i32 9, i32 33, i32 21, i32 50, i32 41, i32 60], align 16 @__const.projectB_main.matrix = private unnamed_addr constant <{ <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, [97 x <{ i32, i32, i32, [97 x i32] }>] }> <{ <{ i32, i32, i32, [97 x i32] }> <{ i32 1, i32 2, i32 3, [97 x i32] zeroinitializer }>, <{ i32, i32, i32, [97 x i32] }> <{ i32 4, i32 5, i32 6, [97 x i32] zeroinitializer }>, <{ i32, i32, i32, [97 x i32] }> <{ i32 7, i32 8, i32 9, [97 x i32] zeroinitializer }>, [97 x <{ i32, i32, i32, [97 x i32] }>] zeroinitializer }>, align 16 ; Function Attrs: noinline nounwind optnone uwtable define dso_local void @reverseString(i8* %0) #0 { %2 = alloca i8*, align 8 %3 = alloca i32, align 4 %4 = alloca i32, align 4 %5 = alloca i8, align 1 store i8* %0, i8** %2, align 8 %6 = load i8*, i8** %2, align 8 %7 = call i64 @strlen(i8* %6) #3 %8 = trunc i64 %7 to i32 store i32 %8, i32* %3, align 4 store i32 0, i32* %4, align 4 br label %9 9: ; preds = %40, %1 %10 = load i32, i32* %4, align 4 %11 = load i32, i32* %3, align 4 %12 = sdiv i32 %11, 2 %13 = icmp slt i32 %10, %12 br i1 %13, label %14, label %43 14: ; preds = %9 %15 = load i8*, i8** %2, align 8 %16 = load i32, i32* %4, align 4 %17 = sext i32 %16 to i64 %18 = getelementptr inbounds i8, i8* %15, i64 %17 %19 = load i8, i8* %18, align 1 store i8 %19, i8* %5, align 1 %20 = load i8*, i8** %2, align 8 %21 = load i32, i32* %3, align 4 %22 = sub nsw i32 %21, 1 %23 = load i32, i32* %4, align 4 %24 = sub nsw i32 %22, %23 %25 = sext i32 %24 to i64 %26 = getelementptr inbounds i8, i8* %20, i64 %25 %27 = load i8, i8* %26, align 1 %28 = load i8*, i8** %2, align 8 %29 = load i32, i32* %4, align 4 %30 = sext i32 %29 to i64 %31 = getelementptr inbounds i8, i8* %28, i64 %30 store i8 %27, i8* %31, align 1 %32 = load i8, i8* %5, align 1 %33 = load i8*, i8** %2, align 8 %34 = load i32, i32* %3, align 4 %35 = sub nsw i32 %34, 1 %36 = load i32, i32* %4, align 4 %37 = sub nsw i32 %35, %36 %38 = sext i32 %37 to i64 %39 = getelementptr inbounds i8, i8* %33, i64 %38 store i8 %32, i8* %39, align 1 br label %40 40: ; preds = %14 %41 = load i32, i32* %4, align 4 %42 = add nsw i32 %41, 1 store i32 %42, i32* %4, align 4 br label %9 43: ; preds = %9 ret void } ; Function Attrs: nounwind readonly declare dso_local i64 @strlen(i8*) #1 ; Function Attrs: noinline nounwind optnone uwtable define dso_local i32 @longestIncreasingSubsequence(i32* %0, i32 %1) #0 { %3 = alloca i32*, align 8 %4 = alloca i32, align 4 %5 = alloca [100 x i32], align 16 %6 = alloca i32, align 4 %7 = alloca i32, align 4 %8 = alloca i32, align 4 %9 = alloca i32, align 4 %10 = alloca i32, align 4 store i32* %0, i32** %3, align 8 store i32 %1, i32* %4, align 4 store i32 0, i32* %6, align 4 br label %11 11: ; preds = %19, %2 %12 = load i32, i32* %6, align 4 %13 = load i32, i32* %4, align 4 %14 = icmp slt i32 %12, %13 br i1 %14, label %15, label %22 15: ; preds = %11 %16 = load i32, i32* %6, align 4 %17 = sext i32 %16 to i64 %18 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %17 store i32 1, i32* %18, align 4 br label %19 19: ; preds = %15 %20 = load i32, i32* %6, align 4 %21 = add nsw i32 %20, 1 store i32 %21, i32* %6, align 4 br label %11 22: ; preds = %11 store i32 1, i32* %7, align 4 br label %23 23: ; preds = %69, %22 %24 = load i32, i32* %7, align 4 %25 = load i32, i32* %4, align 4 %26 = icmp slt i32 %24, %25 br i1 %26, label %27, label %72 27: ; preds = %23 store i32 0, i32* %8, align 4 br label %28 28: ; preds = %65, %27 %29 = load i32, i32* %8, align 4 %30 = load i32, i32* %7, align 4 %31 = icmp slt i32 %29, %30 br i1 %31, label %32, label %68 32: ; preds = %28 %33 = load i32*, i32** %3, align 8 %34 = load i32, i32* %7, align 4 %35 = sext i32 %34 to i64 %36 = getelementptr inbounds i32, i32* %33, i64 %35 %37 = load i32, i32* %36, align 4 %38 = load i32*, i32** %3, align 8 %39 = load i32, i32* %8, align 4 %40 = sext i32 %39 to i64 %41 = getelementptr inbounds i32, i32* %38, i64 %40 %42 = load i32, i32* %41, align 4 %43 = icmp sgt i32 %37, %42 br i1 %43, label %44, label %64 44: ; preds = %32 %45 = load i32, i32* %7, align 4 %46 = sext i32 %45 to i64 %47 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %46 %48 = load i32, i32* %47, align 4 %49 = load i32, i32* %8, align 4 %50 = sext i32 %49 to i64 %51 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %50 %52 = load i32, i32* %51, align 4 %53 = add nsw i32 %52, 1 %54 = icmp slt i32 %48, %53 br i1 %54, label %55, label %64 55: ; preds = %44 %56 = load i32, i32* %8, align 4 %57 = sext i32 %56 to i64 %58 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %57 %59 = load i32, i32* %58, align 4 %60 = add nsw i32 %59, 1 %61 = load i32, i32* %7, align 4 %62 = sext i32 %61 to i64 %63 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %62 store i32 %60, i32* %63, align 4 br label %64 64: ; preds = %55, %44, %32 br label %65 65: ; preds = %64 %66 = load i32, i32* %8, align 4 %67 = add nsw i32 %66, 1 store i32 %67, i32* %8, align 4 br label %28 68: ; preds = %28 br label %69 69: ; preds = %68 %70 = load i32, i32* %7, align 4 %71 = add nsw i32 %70, 1 store i32 %71, i32* %7, align 4 br label %23 72: ; preds = %23 store i32 0, i32* %9, align 4 store i32 0, i32* %10, align 4 br label %73 73: ; preds = %90, %72 %74 = load i32, i32* %10, align 4 %75 = load i32, i32* %4, align 4 %76 = icmp slt i32 %74, %75 br i1 %76, label %77, label %93 77: ; preds = %73 %78 = load i32, i32* %9, align 4 %79 = load i32, i32* %10, align 4 %80 = sext i32 %79 to i64 %81 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %80 %82 = load i32, i32* %81, align 4 %83 = icmp slt i32 %78, %82 br i1 %83, label %84, label %89 84: ; preds = %77 %85 = load i32, i32* %10, align 4 %86 = sext i32 %85 to i64 %87 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %86 %88 = load i32, i32* %87, align 4 store i32 %88, i32* %9, align 4 br label %89 89: ; preds = %84, %77 br label %90 90: ; preds = %89 %91 = load i32, i32* %10, align 4 %92 = add nsw i32 %91, 1 store i32 %92, i32* %10, align 4 br label %73 93: ; preds = %73 %94 = load i32, i32* %9, align 4 ret i32 %94 } ; Function Attrs: noinline nounwind optnone uwtable define dso_local i32 @testPoints(i32 %0) #0 { %2 = alloca i32, align 4 %3 = alloca i32, align 4 %4 = alloca i32, align 4 %5 = alloca i32, align 4 store i32 %0, i32* %3, align 4 store i32 0, i32* %4, align 4 store i32 1, i32* %5, align 4 br label %6 6: ; preds = %16, %1 %7 = load i32, i32* %5, align 4 %8 = icmp slt i32 %7, 5 br i1 %8, label %9, label %19 9: ; preds = %6 %10 = load i32, i32* %4, align 4 %11 = add nsw i32 %10, 1 store i32 %11, i32* %4, align 4 %12 = load i32, i32* %3, align 4 %13 = icmp sgt i32 %12, 2 br i1 %13, label %14, label %15 14: ; preds = %9 store i32 23, i32* %2, align 4 br label %21 15: ; preds = %9 br label %16 16: ; preds = %15 %17 = load i32, i32* %5, align 4 %18 = add nsw i32 %17, 1 store i32 %18, i32* %5, align 4 br label %6 19: ; preds = %6 %20 = load i32, i32* %4, align 4 store i32 %20, i32* %2, align 4 br label %21 21: ; preds = %19, %14 %22 = load i32, i32* %2, align 4 ret i32 %22 } ; Function Attrs: noinline nounwind optnone uwtable define dso_local i32 @countSetBits(i32 %0) #0 { %2 = alloca i32, align 4 %3 = alloca i32, align 4 store i32 %0, i32* %2, align 4 store i32 0, i32* %3, align 4 br label %4 4: ; preds = %7, %1 %5 = load i32, i32* %2, align 4 %6 = icmp ne i32 %5, 0 br i1 %6, label %7, label %14 7: ; preds = %4 %8 = load i32, i32* %2, align 4 %9 = and i32 %8, 1 %10 = load i32, i32* %3, align 4 %11 = add nsw i32 %10, %9 store i32 %11, i32* %3, align 4 %12 = load i32, i32* %2, align 4 %13 = ashr i32 %12, 1 store i32 %13, i32* %2, align 4 br label %4 14: ; preds = %4 %15 = load i32, i32* %3, align 4 ret i32 %15 } ; Function Attrs: noinline nounwind optnone uwtable define dso_local i32 @memoizedFib(i32 %0) #0 { %2 = alloca i32, align 4 %3 = alloca i32, align 4 store i32 %0, i32* %3, align 4 %4 = load i32, i32* %3, align 4 %5 = sext i32 %4 to i64 %6 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %5 %7 = load i32, i32* %6, align 4 %8 = icmp ne i32 %7, -1 br i1 %8, label %9, label %14 9: ; preds = %1 %10 = load i32, i32* %3, align 4 %11 = sext i32 %10 to i64 %12 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %11 %13 = load i32, i32* %12, align 4 store i32 %13, i32* %2, align 4 br label %34 14: ; preds = %1 %15 = load i32, i32* %3, align 4 %16 = icmp sle i32 %15, 1 br i1 %16, label %17, label %19 17: ; preds = %14 %18 = load i32, i32* %3, align 4 store i32 %18, i32* %2, align 4 br label %34 19: ; preds = %14 %20 = load i32, i32* %3, align 4 %21 = sub nsw i32 %20, 1 %22 = call i32 @memoizedFib(i32 %21) %23 = load i32, i32* %3, align 4 %24 = sub nsw i32 %23, 2 %25 = call i32 @memoizedFib(i32 %24) %26 = add nsw i32 %22, %25 %27 = load i32, i32* %3, align 4 %28 = sext i32 %27 to i64 %29 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %28 store i32 %26, i32* %29, align 4 %30 = load i32, i32* %3, align 4 %31 = sext i32 %30 to i64 %32 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %31 %33 = load i32, i32* %32, align 4 store i32 %33, i32* %2, align 4 br label %34 34: ; preds = %19, %17, %9 %35 = load i32, i32* %2, align 4 ret i32 %35 } ; Function Attrs: noinline nounwind optnone uwtable define dso_local i32 @processMatrix([100 x i32]* %0, i32 %1) #0 { %3 = alloca [100 x i32]*, align 8 %4 = alloca i32, align 4 %5 = alloca i32, align 4 %6 = alloca i32, align 4 %7 = alloca i32, align 4 store [100 x i32]* %0, [100 x i32]** %3, align 8 store i32 %1, i32* %4, align 4 store i32 0, i32* %5, align 4 store i32 0, i32* %6, align 4 br label %8 8: ; preds = %77, %2 %9 = load i32, i32* %6, align 4 %10 = load i32, i32* %4, align 4 %11 = icmp slt i32 %9, %10 br i1 %11, label %12, label %80 12: ; preds = %8 store i32 0, i32* %7, align 4 br label %13 13: ; preds = %73, %12 %14 = load i32, i32* %7, align 4 %15 = load i32, i32* %4, align 4 %16 = icmp slt i32 %14, %15 br i1 %16, label %17, label %76 17: ; preds = %13 %18 = load i32, i32* %6, align 4 %19 = load i32, i32* %7, align 4 %20 = icmp eq i32 %18, %19 br i1 %20, label %21, label %55 21: ; preds = %17 %22 = load [100 x i32]*, [100 x i32]** %3, align 8 %23 = load i32, i32* %6, align 4 %24 = sext i32 %23 to i64 %25 = getelementptr inbounds [100 x i32], [100 x i32]* %22, i64 %24 %26 = load i32, i32* %7, align 4 %27 = sext i32 %26 to i64 %28 = getelementptr inbounds [100 x i32], [100 x i32]* %25, i64 0, i64 %27 %29 = load i32, i32* %28, align 4 %30 = srem i32 %29, 2 %31 = icmp eq i32 %30, 0 br i1 %31, label %32, label %43 32: ; preds = %21 %33 = load [100 x i32]*, [100 x i32]** %3, align 8 %34 = load i32, i32* %6, align 4 %35 = sext i32 %34 to i64 %36 = getelementptr inbounds [100 x i32], [100 x i32]* %33, i64 %35 %37 = load i32, i32* %7, align 4 %38 = sext i32 %37 to i64 %39 = getelementptr inbounds [100 x i32], [100 x i32]* %36, i64 0, i64 %38 %40 = load i32, i32* %39, align 4 %41 = load i32, i32* %5, align 4 %42 = add nsw i32 %41, %40 store i32 %42, i32* %5, align 4 br label %54 43: ; preds = %21 %44 = load [100 x i32]*, [100 x i32]** %3, align 8 %45 = load i32, i32* %6, align 4 %46 = sext i32 %45 to i64 %47 = getelementptr inbounds [100 x i32], [100 x i32]* %44, i64 %46 %48 = load i32, i32* %7, align 4 %49 = sext i32 %48 to i64 %50 = getelementptr inbounds [100 x i32], [100 x i32]* %47, i64 0, i64 %49 %51 = load i32, i32* %50, align 4 %52 = load i32, i32* %5, align 4 %53 = sub nsw i32 %52, %51 store i32 %53, i32* %5, align 4 br label %54 54: ; preds = %43, %32 br label %72 55: ; preds = %17 %56 = load i32, i32* %6, align 4 %57 = load i32, i32* %7, align 4 %58 = icmp slt i32 %56, %57 br i1 %58, label %59, label %71 59: ; preds = %55 %60 = load [100 x i32]*, [100 x i32]** %3, align 8 %61 = load i32, i32* %6, align 4 %62 = sext i32 %61 to i64 %63 = getelementptr inbounds [100 x i32], [100 x i32]* %60, i64 %62 %64 = load i32, i32* %7, align 4 %65 = sext i32 %64 to i64 %66 = getelementptr inbounds [100 x i32], [100 x i32]* %63, i64 0, i64 %65 %67 = load i32, i32* %66, align 4 %68 = call i32 @countSetBits(i32 %67) %69 = load i32, i32* %5, align 4 %70 = add nsw i32 %69, %68 store i32 %70, i32* %5, align 4 br label %71 71: ; preds = %59, %55 br label %72 72: ; preds = %71, %54 br label %73 73: ; preds = %72 %74 = load i32, i32* %7, align 4 %75 = add nsw i32 %74, 1 store i32 %75, i32* %7, align 4 br label %13 76: ; preds = %13 br label %77 77: ; preds = %76 %78 = load i32, i32* %6, align 4 %79 = add nsw i32 %78, 1 store i32 %79, i32* %6, align 4 br label %8 80: ; preds = %8 %81 = load i32, i32* %5, align 4 ret i32 %81 } ; Function Attrs: noinline nounwind optnone uwtable define dso_local i32 @projectB_main() #0 { %1 = alloca [14 x i8], align 1 %2 = alloca [8 x i32], align 16 %3 = alloca i32, align 4 %4 = alloca i32, align 4 %5 = alloca [100 x [100 x i32]], align 16 %6 = alloca i32, align 4 %7 = alloca i32, align 4 %8 = alloca i32, align 4 %9 = call i32 @testPoints(i32 5) call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([100 x i32]* @cache to i8*), i8 -1, i64 400, i1 false) %10 = bitcast [14 x i8]* %1 to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %10, i8* align 1 getelementptr inbounds ([14 x i8], [14 x i8]* @__const.projectB_main.str, i32 0, i32 0), i64 14, i1 false) %11 = getelementptr inbounds [14 x i8], [14 x i8]* %1, i64 0, i64 0 call void @reverseString(i8* %11) %12 = bitcast [8 x i32]* %2 to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %12, i8* align 16 bitcast ([8 x i32]* @__const.projectB_main.arr to i8*), i64 32, i1 false) store i32 8, i32* %3, align 4 %13 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 0 %14 = load i32, i32* %3, align 4 %15 = call i32 @longestIncreasingSubsequence(i32* %13, i32 %14) store i32 %15, i32* %4, align 4 %16 = bitcast [100 x [100 x i32]]* %5 to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %16, i8* align 16 bitcast (<{ <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, [97 x <{ i32, i32, i32, [97 x i32] }>] }>* @__const.projectB_main.matrix to i8*), i64 40000, i1 false) %17 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %5, i64 0, i64 0 %18 = call i32 @processMatrix([100 x i32]* %17, i32 3) store i32 %18, i32* %6, align 4 store i32 0, i32* %7, align 4 br label %19 19: ; preds = %24, %0 %20 = load i32, i32* %7, align 4 %21 = call i32 @memoizedFib(i32 %20) %22 = load i32, i32* %7, align 4 %23 = add nsw i32 %22, 1 store i32 %23, i32* %7, align 4 br label %24 24: ; preds = %19 %25 = load i32, i32* %7, align 4 %26 = icmp slt i32 %25, 10 br i1 %26, label %19, label %27 27: ; preds = %24 %28 = load i32, i32* %4, align 4 %29 = icmp sgt i32 %28, 5 br i1 %29, label %30, label %40 30: ; preds = %27 %31 = load i32, i32* %6, align 4 %32 = icmp sgt i32 %31, 0 br i1 %32, label %33, label %36 33: ; preds = %30 %34 = load i32, i32* %4, align 4 %35 = call i32 @memoizedFib(i32 %34) store i32 %35, i32* %8, align 4 br label %39 36: ; preds = %30 %37 = load i32, i32* %6, align 4 %38 = call i32 @countSetBits(i32 %37) store i32 %38, i32* %8, align 4 br label %39 39: ; preds = %36, %33 br label %47 40: ; preds = %27 %41 = getelementptr inbounds [14 x i8], [14 x i8]* %1, i64 0, i64 0 %42 = call i64 @strlen(i8* %41) #3 %43 = load i32, i32* %6, align 4 %44 = sext i32 %43 to i64 %45 = add i64 %42, %44 %46 = trunc i64 %45 to i32 store i32 %46, i32* %8, align 4 br label %47 47: ; preds = %40, %39 %48 = load i32, i32* %8, align 4 ret i32 %48 } ; Function Attrs: argmemonly nounwind willreturn declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #2 ; Function Attrs: argmemonly nounwind willreturn declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #2 attributes #0 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } attributes #1 = { nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } attributes #2 = { argmemonly nounwind willreturn } attributes #3 = { nounwind readonly } !llvm.module.flags = !{!0} !llvm.ident = !{!1} !0 = !{i32 1, !"wchar_size", i32 4} !1 = !{!"clang version 10.0.0-4ubuntu1 "}