[LLVMdev] How do I find all memory allocations in an llvm ir code file?

Theresia Hansson theresia.hansson at gmail.com
Fri Oct 15 04:37:37 PDT 2010


I tried to compile this snippet of C++ code:

void FuncTest() {
    int* a = new int;
    int* b = new int[2];
}

using:

clang test.cpp -S -emit-llvm -o - > test.llvm

and obtained this:

define void @_Z8FuncTestv() {
entry:
  %a = alloca i32*, align 4
  %b = alloca i32*, align 4
  %call = call noalias i8* @_Znwj(i32 4)
  %0 = bitcast i8* %call to i32*
  store i32* %0, i32** %a, align 4
  %call1 = call noalias i8* @_Znaj(i32 8)
  %1 = bitcast i8* %call1 to i32*
  store i32* %1, i32** %b, align 4
  ret void
}

declare noalias i8* @_Znwj(i32)
declare noalias i8* @_Znaj(i32)

What I am wondering now is: where do the _Znwj and _Znaj symbols come
from? Are they just randomly assigned or is there a system to it? I
would like to be able to tell that the lines

%call = call noalias i8* @_Znwj(i32 4)

and

%call1 = call noalias i8* @_Znaj(i32 8)

perform memory allocations. But it does not look that promising...
Some llvm expert here who has an idea?




More information about the llvm-dev mailing list