# main.ll

Home   »   main.ll

``````/usr/bin/env python3
N = 10
def p(x): print(x, end="")

# forward decl
p("int even(")
for i in range(N):
if i > 0: p(", ")
p("int")
p(");\n");

p("int odd(")

for i in range(N):
if i > 0: p(", ")
p(f"n{i}")
p(") {\n")
p("  return n0 == 0 ? 0 : ")
p("5*even(");

for i in range(N):
if i > 0: p(", ")
p(f"n{i} - n{(i+1)%N}")
p (");");

p("\n}")
p("\n\n");

p("int even(")

for i in range(N):
if i > 0: p(", ")
p(f"n{i}")
p(") {\n")
p("  return n0 == 2 ? 0 : ")
p("3*odd(");

for i in range(N):
if i > 0: p(", ")
p(f"n{i} - n{(i+1)%N}")
p (");");

p("\n}")
``````
``````int even(int, int, int, int, int, int, int, int, int, int);
int odd(n0, n1, n2, n3, n4, n5, n6, n7, n8, n9) {
return n0 == 3 ? 0 : 5*even(n0 - n1, n1 - n2, n2 - n3, n3 - n4, n4 - n5, n5 - n6, n6 - n7, n7 - n8, n8 - n9, n9 - n0);
}

int even(n0, n1, n2, n3, n4, n5, n6, n7, n8, n9) {
return n0 == 5 ? 0 : 3*odd(n0 - n1, n1 - n2, n2 - n3, n3 - n4, n4 - n5, n5 - n6, n6 - n7, n7 - n8, n8 - n9, n9 - n0);
}
``````
``````; ModuleID = 'main.c'
source_filename = "main.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"

; Function Attrs: noinline nounwind optnone sspstrong uwtable
define dso_local i32 @odd(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9) #0 {
%11 = alloca i32, align 4
%12 = alloca i32, align 4
%13 = alloca i32, align 4
%14 = alloca i32, align 4
%15 = alloca i32, align 4
%16 = alloca i32, align 4
%17 = alloca i32, align 4
%18 = alloca i32, align 4
%19 = alloca i32, align 4
%20 = alloca i32, align 4
store i32 %0, i32* %11, align 4
store i32 %1, i32* %12, align 4
store i32 %2, i32* %13, align 4
store i32 %3, i32* %14, align 4
store i32 %4, i32* %15, align 4
store i32 %5, i32* %16, align 4
store i32 %6, i32* %17, align 4
store i32 %7, i32* %18, align 4
store i32 %8, i32* %19, align 4
store i32 %9, i32* %20, align 4
%21 = load i32, i32* %11, align 4
%22 = icmp eq i32 %21, 3
br i1 %22, label %23, label %24

23:                                               ; preds = %10
br label %57

24:                                               ; preds = %10
%25 = load i32, i32* %11, align 4
%26 = load i32, i32* %12, align 4
%27 = sub nsw i32 %25, %26
%28 = load i32, i32* %12, align 4
%29 = load i32, i32* %13, align 4
%30 = sub nsw i32 %28, %29
%31 = load i32, i32* %13, align 4
%32 = load i32, i32* %14, align 4
%33 = sub nsw i32 %31, %32
%34 = load i32, i32* %14, align 4
%35 = load i32, i32* %15, align 4
%36 = sub nsw i32 %34, %35
%37 = load i32, i32* %15, align 4
%38 = load i32, i32* %16, align 4
%39 = sub nsw i32 %37, %38
%40 = load i32, i32* %16, align 4
%41 = load i32, i32* %17, align 4
%42 = sub nsw i32 %40, %41
%43 = load i32, i32* %17, align 4
%44 = load i32, i32* %18, align 4
%45 = sub nsw i32 %43, %44
%46 = load i32, i32* %18, align 4
%47 = load i32, i32* %19, align 4
%48 = sub nsw i32 %46, %47
%49 = load i32, i32* %19, align 4
%50 = load i32, i32* %20, align 4
%51 = sub nsw i32 %49, %50
%52 = load i32, i32* %20, align 4
%53 = load i32, i32* %11, align 4
%54 = sub nsw i32 %52, %53
%55 = call i32 @even(i32 %27, i32 %30, i32 %33, i32 %36, i32 %39, i32 %42, i32 %45, i32 %48, i32 %51, i32 %54)
%56 = mul nsw i32 5, %55
br label %57

57:                                               ; preds = %24, %23
%58 = phi i32 [ 0, %23 ], [ %56, %24 ]
ret i32 %58
}

; Function Attrs: noinline nounwind optnone sspstrong uwtable
define dso_local i32 @even(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9) #0 {
%11 = alloca i32, align 4
%12 = alloca i32, align 4
%13 = alloca i32, align 4
%14 = alloca i32, align 4
%15 = alloca i32, align 4
%16 = alloca i32, align 4
%17 = alloca i32, align 4
%18 = alloca i32, align 4
%19 = alloca i32, align 4
%20 = alloca i32, align 4
store i32 %0, i32* %11, align 4
store i32 %1, i32* %12, align 4
store i32 %2, i32* %13, align 4
store i32 %3, i32* %14, align 4
store i32 %4, i32* %15, align 4
store i32 %5, i32* %16, align 4
store i32 %6, i32* %17, align 4
store i32 %7, i32* %18, align 4
store i32 %8, i32* %19, align 4
store i32 %9, i32* %20, align 4
%21 = load i32, i32* %11, align 4
%22 = icmp eq i32 %21, 5
br i1 %22, label %23, label %24

23:                                               ; preds = %10
br label %57

24:                                               ; preds = %10
%25 = load i32, i32* %11, align 4
%26 = load i32, i32* %12, align 4
%27 = sub nsw i32 %25, %26
%28 = load i32, i32* %12, align 4
%29 = load i32, i32* %13, align 4
%30 = sub nsw i32 %28, %29
%31 = load i32, i32* %13, align 4
%32 = load i32, i32* %14, align 4
%33 = sub nsw i32 %31, %32
%34 = load i32, i32* %14, align 4
%35 = load i32, i32* %15, align 4
%36 = sub nsw i32 %34, %35
%37 = load i32, i32* %15, align 4
%38 = load i32, i32* %16, align 4
%39 = sub nsw i32 %37, %38
%40 = load i32, i32* %16, align 4
%41 = load i32, i32* %17, align 4
%42 = sub nsw i32 %40, %41
%43 = load i32, i32* %17, align 4
%44 = load i32, i32* %18, align 4
%45 = sub nsw i32 %43, %44
%46 = load i32, i32* %18, align 4
%47 = load i32, i32* %19, align 4
%48 = sub nsw i32 %46, %47
%49 = load i32, i32* %19, align 4
%50 = load i32, i32* %20, align 4
%51 = sub nsw i32 %49, %50
%52 = load i32, i32* %20, align 4
%53 = load i32, i32* %11, align 4
%54 = sub nsw i32 %52, %53
%55 = call i32 @odd(i32 %27, i32 %30, i32 %33, i32 %36, i32 %39, i32 %42, i32 %45, i32 %48, i32 %51, i32 %54)
%56 = mul nsw i32 3, %55
br label %57

57:                                               ; preds = %24, %23
%58 = phi i32 [ 0, %23 ], [ %56, %24 ]
ret i32 %58
}

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 7, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{!"clang version 11.1.0"}
``````