Dashboard > USF Computer Science 652 - Programming Languages > ... > Labs > Generating machine executable binaries with LLVM
  USF Computer Science 652 - Programming Languages Log In | Sign Up   View a printable version of the current page.  
  Generating machine executable binaries with LLVM
Added by Terence Parr, last edited by Terence Parr on Jan 16, 2008  (view change)
Labels: 
(None)

vi forloop.ll
llvm-as -f forloop.ll 
llc -f forloop.bc
gcc -c forloop.s
# or as -o mul_add.o mul_add.s
gcc main.c t.o forloop.o
./a.out
forloop.ll
declare i32 @puts(i8 *)
declare i32 @printf(i8 *, ...)

@s = internal constant [2 x i8] c"f\00"
@ps = internal constant [6 x i8] c"i %d\0A\00"

define void @loop() {
LoopHeader:
        br label %Loop

Loop:   ; Infinite loop that counts from 0 on up...
        %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
        %nextindvar = add i32 %indvar, 1
        %ptr = getelementptr [2 x i8]* @s, i64 0, i64 0
        call i32 (i8*)* @puts(i8* %ptr);
        %psptr = getelementptr [6 x i8]* @ps, i64 0, i64 0
        call i32 (i8 *, ...)* @printf(i8* %psptr, i32 %indvar)
        %cond = icmp eq i32 %indvar, 10
        br i1 %cond, label %Exit, label %Loop

Exit:
        ret void
}
t.ll
define i32 @mul_add(i32 %x, i32 %y, i32 %z) {
entry:
  %tmp = mul i32 %x, %y
  %tmp2 = add i32 %tmp, %z
  ret i32 %tmp2
}
"main.c"
#include <stdio.h>

extern int mul_add(int,int,int);
extern void loop();

int main(int argc, char *argv[]) {
        int r = mul_add(5, 10, 20);
        printf("r = %d\n", r);

        loop();
}
Site powered by a free Open Source Project / Non-profit License (more) of Confluence - the Enterprise wiki.
Learn more or evaluate Confluence for your organisation.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5.1 Build:#806 May 06, 2007) - Bug/feature request - Contact Administrators