Book Image

LLVM Cookbook

Book Image

LLVM Cookbook

Overview of this book

Table of Contents (16 chapters)
LLVM Cookbook
Credits
About the Authors
About the Reviewers
www.PacktPub.com
Preface
Index

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 inbounds [3 x i32], [3 x i32]* %arr, i64 0, i64 0
      call void @foo(i32* %arraydecay) nounwind
      ret void
    }
    
  2. Run the memcpyopt pass on the preceding test case:

    $ opt -memcpyopt -S memcopytest.ll
    ; ModuleID = ' memcopytest.ll'
    
    @cst = internal...