3

我知道如何使用 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?..)
4

1 回答 1

6

不,这是不可能的,因为 LLVM指令switch支持

“switch”指令使用三个参数:一个整数比较值“value”,一个默认的“label”目标,以及一个由成对的比较值常量和“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)。

于 2013-05-21T00:45:08.880 回答