Commit ddb09a9d authored by Taddeüs Kroes's avatar Taddeüs Kroes

Extended optimization example

parent 4ad2e109
......@@ -58,18 +58,58 @@ The `text.py` utility genrates single-cell Brainfuck code for a given text:
-------------------------------------------------------------------.
-----------------------.
The LLVM optimization engine is able to completely optimize away array accesses
(in the absence of loops):
The compiler generates very verbose code:
$ ./text.py Hello World! | ./bf | opt -O3 -S
; ModuleID = '<stdin>'
target datalayout = "e"
$ ./text.py Hello World! | ./bf
...
; Function Attrs: nounwind
declare i32 @putchar(i8) #0
define void @_start() {
entry:
; initialization
%mem = alloca [30000 x i8]
%idx = alloca i32
%0 = bitcast [30000 x i8]* %mem to i8*
call void @llvm.memset.p0i8.i32(i8* %0, i8 0, i32 30000, i32 0, i1 false)
store i32 0, i32* %idx
; command: +
%1 = load i32* %idx
%2 = getelementptr inbounds [30000 x i8]* %mem, i32 0, i32 %1
%3 = load i8* %2
%4 = add i8 %3, 1
%5 = load i32* %idx
%6 = getelementptr inbounds [30000 x i8]* %mem, i32 0, i32 %5
store i8 %4, i8* %6
; command: +
%7 = load i32* %idx
%8 = getelementptr inbounds [30000 x i8]* %mem, i32 0, i32 %7
%9 = load i8* %8
%10 = add i8 %9, 1
%11 = load i32* %idx
%12 = getelementptr inbounds [30000 x i8]* %mem, i32 0, i32 %11
store i8 %10, i8* %12
...
; command: .
%433 = load i32* %idx
%434 = getelementptr inbounds [30000 x i8]* %mem, i32 0, i32 %433
%435 = load i8* %434
%436 = call i32 @putchar(i8 %435)
...
call void @exit(i32 0)
ret void
}
declare void @exit(i32)
The LLVM optimization engine is able to completely optimize away array accesses
using constant propagation/folding. In the absence of loops, this effectively
evaluates the whole program at compile time:
$ ./text.py Hello World! | ./bf | opt -O3 -S
...
define void @_start() {
entry:
%0 = tail call i32 @putchar(i8 72)
......@@ -88,6 +128,3 @@ The LLVM optimization engine is able to completely optimize away array accesses
tail call void @exit(i32 0)
ret void
}
attributes #0 = { nounwind }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment