【问题标题】:Converting instruction involving CPU registers to memory instruction将涉及 CPU 寄存器的指令转换为内存指令
【发布时间】:2017-08-13 15:07:26
【问题描述】:

我是 LLVM 新手,了解 LLVM 的指令生成。作为其中的一部分,我正在尝试将基本布尔指令转换为直接使用内存寄存器作为操作数。例如,在下面的 IR 中,我希望 and 操作使用 %a%b 而不是 %11%12

%11 = load i32, i32* %a, align 4 \n
%12 = load i32, i32* %b, align 4 \n
%13 = and i32 %11, %12\  
store i32 %13, i32* %d, align 4\n

我需要为此编写一个新的and 指令,还是有其他更简单的方法?

【问题讨论】:

  • %a%b 是指针,将它们与在一起意味着将它们加载的值与在一起。这真的是你想做的吗?
  • 我想获取 %a 和 %b 指向的值作为指令本身的一部分。我正在寻找这样的指令。 %13 = 和 i32* %a, i32* %b。这是为了了解我是否可以通过直接获取指针%a和%b的内容来删除之前的两个加载指令
  • 好吧,那就不能了,只能显式地通过指针加载和存储
  • 如果您正在编译的 CPU 存在适当的指令,我认为后端应该匹配此类模式。后端不仅采用一条 LLVM 指令并为其生成代码,而且还匹配 LLVM 指令的模式。因此,这些操作不必在 LLVM 级别组合,正如@harold 指出的那样,它们不能。这种优化更多的是为后端提供正确的指令定义。

标签: assembly llvm llvm-clang llvm-ir


【解决方案1】:

我认为这是不可行的。如果没有显式加载或存储,就无法访​​问 LLVM 中的内存。

【讨论】:

    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2015-11-01
    • 2019-01-02
    • 2022-01-24
    • 2019-04-16
    相关资源
    最近更新 更多