Modified hw3 to newer version

Signed-off-by: jmug <u.g.a.mariano@gmail.com>
This commit is contained in:
Mariano Uvalle 2025-01-24 20:53:24 -08:00
parent 8437a82fbf
commit 07d34c0cd8
40 changed files with 856 additions and 271 deletions

View file

@ -0,0 +1,15 @@
#include <inttypes.h>
int64_t ll_weighted_sum(int64_t a1, int64_t a2, int64_t a3, int64_t a4,
int64_t a5, int64_t a6, int64_t a7, int64_t a8) {
int64_t sum = 0;
sum += a1 * 1;
sum += a2 * 2;
sum += a3 * 3;
sum += a4 * 4;
sum += a5 * 5;
sum += a6 * 6;
sum += a7 * 7;
sum += a8 * 8;
return sum;
}

37
hw3/llprograms/example.ll Normal file
View file

@ -0,0 +1,37 @@
declare i8* @ll_ltoa(i64)
declare void @ll_puts(i8*)
%arr = type [10 x i64]
@nums = global %arr [ i64 5, i64 1, i64 4, i64 2, i64 3, i64 6, i64 10, i64 9, i64 7, i64 8 ]
define void @iter(void(i64)* %f, %arr* %l) {
%1 = alloca i64
store i64 0, i64* %1
br label %loop
loop:
%i = load i64, i64* %1
%valid = icmp slt i64 %i, 10
br i1 %valid, label %body, label %post
body:
%idx = load i64, i64* %1
%p = getelementptr %arr, %arr* %l, i64 0, i64 %idx
%n = load i64, i64* %p
call void %f(i64 %n)
%newidx = add i64 %idx, 1
store i64 %newidx, i64* %1
br label %loop
post:
ret void
}
define void @print(i64 %x) {
%1 = call i8* @ll_ltoa(i64 %x)
call void @ll_puts(i8* %1)
ret void
}
define void @main(i64 %argc, i8** %arcv) {
call void @iter(void(i64)* @print, %arr* @nums)
ret void
}

14
hw3/llprograms/funptr.ll Normal file
View file

@ -0,0 +1,14 @@
define i64 @m(i64 %x) {
%ans = add i64 %x, 1
ret i64 %ans
}
define i64 @apply(i64(i64)* %f) {
%ans = call i64 %f(i64 34)
ret i64 %ans
}
define i64 @main(i64 %argc, i8** %argv) {
%ans = call i64 @apply(i64(i64)* @m)
ret %ans
}

View file

@ -0,0 +1,9 @@
declare void @printf(i8*)
@format = global [15 x i8] c"test alignment\00"
define i64 @main(i64 %argc, i8** %argv) {
%1 = getelementptr [15 x i8], [15 x i8]* @format, i32 0, i32 0
call void @printf(i8* %1)
ret i64 0
}

10
hw3/llprograms/printf2.ll Normal file
View file

@ -0,0 +1,10 @@
declare void @printf(i8*)
@format = global [15 x i8] c"test alignment\00"
define i64 @main(i64 %argc, i8** %argv) {
%1 = getelementptr [15 x i8], [15 x i8]* @format, i32 0, i32 0
%2 = add i64 0, 0
call void @printf(i8* %1)
ret i64 %2
}