LLVM:如何创建char数组引用

时间:2017-05-13 05:35:34

标签: llvm llvm-ir

我正在尝试实现一个将在ROM中压缩字符串常量的opt传递,然后以CPU + RAM为代价,在运行时重新实现这些值。在实现压缩之前,我只想将所有字符串放在表中,然后进行查找。

示例:

printf("Hello");

将等同于

char placeholder[6];
int strID = 0;
tableLookup(placeholder, 0 /*ID*/); // Fill array
printf(placeholder);

LLVM IR我能够生成如下所示:

%fakeString = alloca [10 x i8], align 1
call void @llvm.dbg.declare(metadata [10 x i8]* %fakeString, metadata !60, metadata !25), !dbg !64
%arraydecay = getelementptr inbounds [10 x i8], [10 x i8]* %fakeString, i32 0, i32 0, !dbg !65
call void @tableLookup(i8* %arraydecay, i32 0) #2, !dbg !66

我如何以编程方式创建此代码?我遗漏的两件主要内容:
1.如何创建数组引用(在创建alloca指令之后)
2.如何从tableLookup获取结果并替换旧printf()

中的操作数

非常感谢任何帮助!

0 个答案:

没有答案