llc throws error: constexpr requires integer operands
llc throws error: constexpr requires integer operands
我一直在尝试使用 llvm 生成代码。我目前正在尝试为变量声明生成 IR。这是一个例子:
let sum: float = 8 * 3 * 4 + 6 * 9;
当我为此生成 IR 时,这是我得到的:
%sum = alloca float
%sum1 = alloca float
%sum2 = alloca float
store float mul (float 8.000000e+00, float 3.000000e+00), float* %sum2
%sum3 = load float, float* %sum2
%sum4 = alloca float
%sum5 = mul float %sum3, 4.000000e+00
store float %sum5, float* %sum4
%sum6 = load float, float* %sum4
store float %sum6, float* %sum
%sum_loaded = load float, float* %sum
%sum7 = alloca float
%sum8 = alloca float
store float mul (float 6.000000e+00, float 9.000000e+00), float* %sum8
%sum9 = load float, float* %sum8
store float %sum9, float* %sum
%sum_loaded10 = load float, float* %sum
首先,这看起来很乱,我相信这可以更有效地完成。但我想我可以稍后通过优化来修复它。我的问题是测试它是否有效。我试过了:
llc my_ir
抛出:
llc: error: llc: my_ir:4:15: error: constexpr requires integer operands
store float mul (float 8.000000e+00, float 3.000000e+00), float* %sum2
我不是很理解这个错误信息,但听起来它不能乘浮点数?这是怎么回事?
我认为只是你需要使用 fmul
来乘以浮点数。
我一直在尝试使用 llvm 生成代码。我目前正在尝试为变量声明生成 IR。这是一个例子:
let sum: float = 8 * 3 * 4 + 6 * 9;
当我为此生成 IR 时,这是我得到的:
%sum = alloca float
%sum1 = alloca float
%sum2 = alloca float
store float mul (float 8.000000e+00, float 3.000000e+00), float* %sum2
%sum3 = load float, float* %sum2
%sum4 = alloca float
%sum5 = mul float %sum3, 4.000000e+00
store float %sum5, float* %sum4
%sum6 = load float, float* %sum4
store float %sum6, float* %sum
%sum_loaded = load float, float* %sum
%sum7 = alloca float
%sum8 = alloca float
store float mul (float 6.000000e+00, float 9.000000e+00), float* %sum8
%sum9 = load float, float* %sum8
store float %sum9, float* %sum
%sum_loaded10 = load float, float* %sum
首先,这看起来很乱,我相信这可以更有效地完成。但我想我可以稍后通过优化来修复它。我的问题是测试它是否有效。我试过了:
llc my_ir
抛出:
llc: error: llc: my_ir:4:15: error: constexpr requires integer operands
store float mul (float 8.000000e+00, float 3.000000e+00), float* %sum2
我不是很理解这个错误信息,但听起来它不能乘浮点数?这是怎么回事?
我认为只是你需要使用 fmul
来乘以浮点数。