如何在llvm中调用C ++代码... IRBuilder?

时间:2018-03-28 04:38:43

标签: c++11 clang llvm

我正在使用LLVM构建一个简单的语言,沿着LLVM万花筒文档中演示的方式。然而,该文档省略了两个重要的事情(至少):

  • 如何调用C ++代码
  • 如何做字符串

您可以想象自定义语言允许使用

等结构
select OrderR
from table t
group by OrderR
having sum(case when Party_Status <> 'COMP' then 1 else 0 end) = 0

由于LLVM附带SmallString,显而易见的事情是将用户类型String str("Hello World"); String str1(" and StackOverflow"); str.append(str1); 视为String并为其发出代码。但是怎么做呢?我认为从头开始创建String类没什么意义,前提是有一种方法可以从LLVM调用这些C ++调用。是否会使用IRBuilder来构建C ++调用?

另一种选择是创建包含用户提供的代码的等效C ++代码的C ++文件,其中llvm::SmallString与内联IR代码混合,并且万花筒演示...并将整个内容传递给Clang / LLVM编译成目标代码。但Clang / LLVM不允许以这种方式混合。

除了创建进入初始化程序的静态字符串的技术细节外,人们如何做到这一点?一旦对字符串进行了整理,很可能该方法适用于集合,哈希映射,向量以及LLVM附带的所有其他容器。

LLVM是一个奇怪的,很酷的东西。我需要的东西就在那里,根据我能找到的任何文档都不容易访问。

我想要一个经过深思熟虑的方法,因为即使是这个简单的hello world程序也会生成81行IR代码。将llvm::SmallString替换为C字符串,生成的IR代码几乎小于10:

llvm::SimpleString

这是很多手工组装的代码,我们没有接近支持所有可用于字符串的方法。

感谢。

0 个答案:

没有答案