【问题标题】:Tell LLVM optimizer contents of variables告诉 LLVM 优化器变量的内容
【发布时间】:2012-02-27 22:19:00
【问题描述】:

我正在编写一个使用 LLVM 作为后端的编译器,并且有很多引用计数。当我借用一个对象时,我会增加对象的引用计数器。当我释放一个对象时,我会减少引用计数器,如果它变为零则释放该对象。 但是,如果我只做一小段代码,比如这个:

++obj->ref;
global_variable_A = obj->a;
if (--obj->ref == 0)
    free_object(obj);

LLVM 将其优化为(在 IR 中,但这是 C 中的相同代码):

global_variable_A = obj->a;
if (obj->ref == 0)
    free_object(obj);

但由于我知道引用计数器在第一条语句之前总是为正数,因此可以将其优化为仅

global_variable_A = obj->a;

我的问题:有没有办法告诉 LLVM 优化器,在读取寄存器或某个内存时,它已知包含非零数据?

另一个相同的问题是,如果我可以告诉优化器一个指针是非空的,那也很好。

【问题讨论】:

    标签: optimization compiler-construction llvm


    【解决方案1】:

    您可以编写一个自定义 FunctionPass,将变量替换为真值,然后应通过 DCE 或 SimplifyCFG 对其进行优化。 http://llvm.org/docs/WritingAnLLVMPass.html

    【讨论】:

      猜你喜欢
      • 2020-03-09
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多