如何使LLVM的`opt`命令优化内置函数?

问题描述

考虑以下C程序:

#include <stdlib.h>

int main() {
    int * ptr = malloc(8);
    *ptr = 14;
    return 4;
}

使用clang -S -emit-llvm -O1 emits the following进行编译:

...
; Function Attrs: norecurse nounwind readnone uwtable
define dso_local i32 @main() local_unnamed_addr #0 !dbg !7 {
  call void @llvm.dbg.value(metadata i32* undef,metadata !13,metadata !DIExpression()),!dbg !15
  ret i32 4,!dbg !16
}
...

malloc的调用已消失,因为它是clang知道的内置函数。 如果我们运行clang -S -emit-llvm -O1 -fno-builtin,则我们get the following

...
; Function Attrs: nounwind uwtable
define dso_local i32 @main() local_unnamed_addr #0 !dbg !14 {
  %1 = call noalias i8* @malloc(i64 8) #3,!dbg !22
  %2 = bitcast i8* %1 to i32*,!dbg !22
  call void @llvm.dbg.value(metadata i32* %2,metadata !20,!dbg !23
  store i32 14,i32* %2,align 4,!dbg !24,!tbaa !25
  ret i32 4,!dbg !29
}
...

clang不知道malloc是什么,必须将呼叫保留。

如何使用LLVM的opt命令从第二个LLVM程序转到第一个?如何告诉opt使用clang显然具有的有关内置函数的知识?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)