我正在尝试使用LLVMBuildShuffleVector函数,该函数要求:
LLVMBuildShuffleVector (LLVMBuilderRef, LLVMValueRef V1, LLVMValueRef V2, LLVMValueRef Mask, const char *Name)
我有这两个LLVMValueRef:
LLVMValueRef value1 = getChildren().get(0).getLlvmValueRef();
LLVMValueRef value2 = getChildren().get(1).getLlvmValueRef();
我用它们创建了mask,它也是一个LLVMValueRef,其中maskElemArray是带有掩模元素的数组:
LLVMValueRef mask = LLVMConstVector(new PointerPointer(maskElemArray), maskElemArray.length);
现在我必须调用LLVMBuildShuffleVector:
LLVMValueRef shuffleV = LLVMBuildShuffleVector(builderRef, value1, value2, mask, "shuffleV");
问题是我收到此错误:
Invalid shufflevector operands!
%shuffleV = shufflevector [8 x i8] %a3, [4 x i8] %b4, <11 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 8, i32 9, i32 10, i32 11>
LLVM ERROR: Broken module found, compilation aborted!
这是什么原因?我想念什么? 有什么提示如何解决吗?感谢您的所有帮助!
答案 0 :(得分:1)
您的value1
和value2
是数组,但是shufflevector
仅适用于向量。
您将需要更改创建这些数组的代码以创建矢量,或者您需要创建包含数组元素的矢量(尽管后一种选择没有多大意义,比您自己选择单个元素而不根本不使用shufflevector
更具优势。