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"}

Leave a Reply

Your email address will not be published. Required fields are marked *