diff --git a/cbackend.cpp b/cbackend.cpp index fef86b60..f99c1bfb 100644 --- a/cbackend.cpp +++ b/cbackend.cpp @@ -4689,6 +4689,11 @@ SmearCleanupPass::getShuffleSmearValue(llvm::Instruction* inst) const { llvm::isa(insertInst->getOperand(2)) && llvm::dyn_cast(insertInst->getOperand(2))->isNullValue())) { + // We can't extract element from vec1 + llvm::VectorType *operandVec = llvm::dyn_cast(shuffleInst->getOperand(0)->getType()); + if (operandVec && operandVec->getNumElements() == 1) + return NULL; + // Insert ExtractElementInstr to get value for smear llvm::Function *extractFunc = module->getFunction("__extract_element");