CS153/hw6/llprograms/sp22_hw3/bubble_sort.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

48 lines
No EOL
1.3 KiB
LLVM

@glist = global [6 x i64] [ i64 5, i64 2, i64 4, i64 1, i64 3, i64 0 ]
define void @sort([6 x i64]* %list) {
%i = alloca i64
store i64 0, i64* %i
%j = alloca i64
br label %loop_cnd_i
loop_cnd_i:
store i64 0, i64* %j
%ival = load i64, i64* %i
%cmp1 = icmp eq i64 %ival, 6
br i1 %cmp1, label %exit_i, label %loop_body_i
loop_body_i:
%jval = load i64, i64* %j
%bound = sub i64 6, %ival
%cmp2 = icmp eq i64 %jval, %bound
br i1 %cmp2, label %exit_j, label %loop_body_j
loop_body_j:
%left_indx = load i64, i64* %j
%right_indx = add i64 %left_indx, 1
%left = getelementptr [6 x i64], [6 x i64]* %list, i64 0, i64 %left_indx
%right = getelementptr [6 x i64], [6 x i64]* %list, i64 0, i64 %right_indx
%left_el = load i64, i64* %left
%right_el = load i64, i64* %right
%cmp3 = icmp sgt i64 %left_el, %right_el
br i1 %cmp3, label %swap, label %no_swap
swap:
store i64 %right_el, i64* %left
store i64 %left_el, i64* %right
br label %no_swap
no_swap:
%j_next = add i64 %jval, 1
store i64 %j_next, i64* %j
br label %loop_body_i
exit_j:
%i_next = add i64 %ival, 1
store i64 %i_next, i64* %i
br label %loop_cnd_i
exit_i:
ret void
}
define i64 @main(i64 %argc, i8** %arcv) {
call void @sort([6 x i64]* @glist)
%r = getelementptr [6 x i64], [6 x i64]* @glist, i64 0, i64 0
%1 = load i64, i64* %r
ret i64 %1
}