CS153/hw6/llprograms/sp22_hw3/heap.ll
jmug 0c04936ccf Updated hw6 to a newer version
Signed-off-by: jmug <u.g.a.mariano@gmail.com>
2025-01-24 21:23:08 -08:00

175 lines
No EOL
6.3 KiB
LLVM

%Node = type { %Node*, %Node*, i64 }
@n6 = global %Node { %Node* null, %Node* null, i64 67 }
@n5 = global %Node { %Node* null, %Node* null, i64 -42 }
@n4 = global %Node { %Node* null, %Node* null, i64 12 }
@n3 = global %Node { %Node* null, %Node* null, i64 1 }
@n2 = global %Node { %Node* @n5, %Node* @n6, i64 -5 }
@n1 = global %Node { %Node* @n3, %Node* @n4, i64 -9 }
@root = global %Node { %Node* @n1, %Node* @n2, i64 15 }
define void @swap(%Node* %n1, %Node* %n2) {
%n1l.p = getelementptr %Node, %Node* %n1, i32 0, i32 0
%temp_l = load %Node*, %Node** %n1l.p
%n1r.p = getelementptr %Node, %Node* %n1, i32 0, i32 1
%temp_r = load %Node*, %Node** %n1r.p
%n1v.p = getelementptr %Node, %Node* %n1, i32 0, i32 2
%temp_v = load i64, i64* %n1v.p
%n2l.p = getelementptr %Node, %Node* %n2, i32 0, i32 0
%t2_l = load %Node*, %Node** %n2l.p
store %Node* %t2_l, %Node** %n1l.p
%n2r.p = getelementptr %Node, %Node* %n2, i32 0, i32 1
%t2_r = load %Node*, %Node** %n2r.p
store %Node* %t2_r, %Node** %n1r.p
%n2v.p = getelementptr %Node, %Node* %n2, i32 0, i32 2
%t2_v = load i64, i64* %n2v.p
store i64 %t2_v, i64* %n1v.p
store %Node* %temp_l, %Node** %n2l.p
store %Node* %temp_r, %Node** %n2r.p
store i64 %temp_v, i64* %n2v.p
ret void
}
define void @heapify(%Node* %0) {
%2 = alloca %Node*
%3 = alloca %Node*
%4 = alloca %Node*
%5 = alloca %Node*
store %Node* %0, %Node** %2
%6 = load %Node*, %Node** %2
%7 = getelementptr %Node, %Node* %6, i32 0, i32 0
%8 = load %Node*, %Node** %7
store %Node* %8, %Node** %3
%9 = load %Node*, %Node** %2
%10 = getelementptr %Node, %Node* %9, i32 0, i32 1
%11 = load %Node*, %Node** %10
store %Node* %11, %Node** %4
%12 = load %Node*, %Node** %2
store %Node* %12, %Node** %5
%13 = load %Node*, %Node** %3
%14 = icmp ne %Node* %13, null
br i1 %14, label %l15, label %l25
l15:
%16 = load %Node*, %Node** %3
%17 = getelementptr %Node, %Node* %16, i32 0, i32 2
%18 = load i64, i64* %17
%19 = load %Node*, %Node** %2
%20 = getelementptr %Node, %Node* %19, i32 0, i32 2
%21 = load i64, i64* %20
%22 = icmp sgt i64 %18, %21
br i1 %22, label %l23, label %l25
l23:
%24 = load %Node*, %Node** %3
store %Node* %24, %Node** %5
br label %l25
l25:
%26 = load %Node*, %Node** %4
%27 = icmp ne %Node* %26, null
br i1 %27, label %l28, label %l38
l28:
%29 = load %Node*, %Node** %4
%30 = getelementptr %Node, %Node* %29, i32 0, i32 2
%31 = load i64, i64* %30
%32 = load %Node*, %Node** %2
%33 = getelementptr %Node, %Node* %32, i32 0, i32 2
%34 = load i64, i64* %33
%35 = icmp sgt i64 %31, %34
br i1 %35, label %l36, label %l38
l36:
%37 = load %Node*, %Node** %4
store %Node* %37, %Node** %5
br label %l38
l38:
%39 = load %Node*, %Node** %5
%40 = load %Node*, %Node** %2
%41 = icmp ne %Node* %39, %40
br i1 %41, label %l42, label %l46
l42:
%43 = load %Node*, %Node** %2
%44 = load %Node*, %Node** %5
call void @swap(%Node* %43, %Node* %44)
%45 = load %Node*, %Node** %2
call void @heapify(%Node* %45)
br label %l46
l46:
ret void
}
define void @heapify_total(%Node* %0) {
%2 = alloca %Node*
store %Node* %0, %Node** %2
%3 = load %Node*, %Node** %2
%4 = getelementptr %Node, %Node* %3, i32 0, i32 0
%5 = load %Node*, %Node** %4
%6 = icmp eq %Node* %5, null
br i1 %6, label %l7, label %l13
l7:
%8 = load %Node*, %Node** %2
%9 = getelementptr %Node, %Node* %8, i32 0, i32 1
%10 = load %Node*, %Node** %9
%11 = icmp eq %Node* %10, null
br i1 %11, label %l12, label %l13
l12:
br label %l51
l13:
%14 = load %Node*, %Node** %2
%15 = getelementptr %Node, %Node* %14, i32 0, i32 0
%16 = load %Node*, %Node** %15
%17 = icmp ne %Node* %16, null
br i1 %17, label %l18, label %l31
l18:
%19 = load %Node*, %Node** %2
%20 = getelementptr %Node, %Node* %19, i32 0, i32 1
%21 = load %Node*, %Node** %20
%22 = icmp ne %Node* %21, null
br i1 %22, label %l23, label %l31
l23:
%24 = load %Node*, %Node** %2
%25 = getelementptr %Node, %Node* %24, i32 0, i32 0
%26 = load %Node*, %Node** %25
call void @heapify_total(%Node* %26)
%27 = load %Node*, %Node** %2
%28 = getelementptr %Node, %Node* %27, i32 0, i32 1
%29 = load %Node*, %Node** %28
call void @heapify_total(%Node* %29)
%30 = load %Node*, %Node** %2
call void @heapify(%Node* %30)
br label %l51
l31:
%32 = load %Node*, %Node** %2
%33 = getelementptr %Node, %Node* %32, i32 0, i32 0
%34 = load %Node*, %Node** %33
%35 = icmp eq %Node* %34, null
br i1 %35, label %l36, label %l41
l36:
%37 = load %Node*, %Node** %2
%38 = getelementptr %Node, %Node* %37, i32 0, i32 1
%39 = load %Node*, %Node** %38
call void @heapify_total(%Node* %39)
%40 = load %Node*, %Node** %2
call void @heapify(%Node* %40)
br label %l51
l41:
%42 = load %Node*, %Node** %2
%43 = getelementptr %Node, %Node* %42, i32 0, i32 1
%44 = load %Node*, %Node** %43
%45 = icmp eq %Node* %44, null
br i1 %45, label %l46, label %l51
l46:
%47 = load %Node*, %Node** %2
%48 = getelementptr %Node, %Node* %47, i32 0, i32 0
%49 = load %Node*, %Node** %48
call void @heapify_total(%Node* %49)
%50 = load %Node*, %Node** %2
call void @heapify(%Node* %50)
br label %l51
l51:
ret void
}
define i64 @main() {
call void @heapify_total(%Node* @root)
%max_val_ptr = getelementptr %Node, %Node* @root, i32 0, i32 2
%max_val = load i64, i64* %max_val_ptr
ret i64 %max_val
}