我正在使用LLVM构建一个简单的语言,沿着LLVM万花筒文档中演示的方式。然而,该文档省略了两个重要的事情(至少):
您可以想象自定义语言允许使用
等结构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
这是很多手工组装的代码,我们没有接近支持所有可用于字符串的方法。
感谢。