Writing a pass for memory optimization
In this recipe, we will briefly discuss a transformation pass that deals with memory optimization.
Getting ready
For this recipe, you will need the opt tool installed.
How to do it…
Write the test code on which we will run the
memcpy
optimization pass:$ cat memcopytest.ll @cst = internal constant [3 x i32] [i32 -1, i32 -1, i32 -1], align 4 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind declare void @foo(i32*) nounwind define void @test1() nounwind { %arr = alloca [3 x i32], align 4 %arr_i8 = bitcast [3 x i32]* %arr to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* %arr_i8, i8* bitcast ([3 x i32]* @cst to i8*), i64 12, i32 4, i1 false) %arraydecay = getelementptr inbounds [3 x i32], [3 x i32]* %arr, i64 0, i64 0 call void @foo(i32* %arraydecay) nounwind ret void }
Run the
memcpyopt
pass on the preceding test case:$ opt -memcpyopt -S memcopytest.ll ; ModuleID = ' memcopytest.ll' @cst = internal...