Identify annotated variable in an LLVM pass -


how can identify annotated variable in llvm pass?

#include <stdio.h>  int main (){ int x __attribute__((annotate("my_var")))= 0; int a,b; x = x + 1; = 5; b = 6; x = x + a;  return x; } 

for example, want identify instructions have annotated variable (x in case) , print them out (x = x+1; , x = x+a) how can achieve this?

this .ll file generated using llvm

    ; moduleid = 'test.c' source_filename = "test.c" target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-s128" target triple = "aarch64"  @.str = private unnamed_addr constant [7 x i8] c"my_var\00", section "llvm.metadata" @.str.1 = private unnamed_addr constant [7 x i8] c"test.c\00", section "llvm.metadata"  ; function attrs: noinline nounwind optnone define i32 @main() #0 {   %1 = alloca i32, align 4   %2 = alloca i32, align 4   %3 = alloca i32, align 4   %4 = alloca i32, align 4   store i32 0, i32* %1, align 4   %5 = bitcast i32* %2 i8*   call void @llvm.var.annotation(i8* %5, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.s$   store i32 0, i32* %2, align 4   %6 = load i32, i32* %2, align 4   %7 = add nsw i32 %6, 1   store i32 %7, i32* %2, align 4   store i32 5, i32* %3, align 4   store i32 6, i32* %4, align 4   %8 = load i32, i32* %2, align 4   %9 = load i32, i32* %3, align 4   %10 = add nsw i32 %8, %9   store i32 %10, i32* %2, align 4   %11 = load i32, i32* %2, align 4   ret i32 %11 }  ; function attrs: nounwind declare void @llvm.var.annotation(i8*, i8*, i8*, i32) #1  attributes #0 = { noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-math"="false" $ attributes #1 = { nounwind }  !llvm.module.flags = !{!0} !llvm.ident = !{!1} !0 = !{i32 1, !"wchar_size", i32 4} 

you have loop on instructions , identify calls llvm.var.annotation

first argument pointer annotated variable (i8*).

to actual annotated variable, need find pointer points to.

in case, source operand of bitcast instruction.


Comments

Popular posts from this blog

ios - MKAnnotationView layer is not of expected type: MKLayer -

ZeroMQ on Windows, with Qt Creator -

unity3d - Unity SceneManager.LoadScene quits application -