Неверный случайный операнд!LLVM JavaCPP - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь использовать функцию 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();

С ними я создаю маску, которая также является 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!

В чем причина этого?Что мне не хватает?Есть подсказки, как это решить?Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 25 ноября 2018

Ваши value1 и value2 являются массивами, но shufflevector работает только с векторами.

Вам нужно будет либо изменить код, который создает эти массивы, чтобы создать векторы, либо вы 'Вам нужно будет создать вектор, содержащий элементы массивов (хотя последний вариант не имеет особого смысла, поскольку он не имеет никакого преимущества по сравнению с простым выбором отдельных элементов без использования shufflevector вообще).

...