我正在尝试实现一个将在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()
非常感谢任何帮助!