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…

  1. 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 ...

Get LLVM Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.