我知道如何用LLVM API(特别是SwitchInst)编译这样的代码:
switch (h)
{
case 11:
.......
case 22:
........
}
但我不知道,是否可以使用SwitchInst编译这样的代码:
Select Case x
Case 11 To 40
...........
Case 41 To 70
...........
End Select
如何设置远程案例标签?
switchOperator->addCase(...What I need to put here?..)
答案 0 :(得分:6)
不,直接是不可能的,因为LLVM switch
指令does not support that:
'switch'指令使用三个参数:整数比较 值'value',默认的'label'目的地,以及一对数组 比较值常数和'标签'。该表是不允许的 包含重复的常量条目。
示例:
; Implement a jump table:
switch i32 %val, label %otherwise [ i32 0, label %onzero
i32 1, label %onone
i32 2, label %ontwo ]
也就是说,如果您的范围不是太大,您可以生成许多映射到同一标签的比较值(11,12,13 ... 40)。