Hi Kevin, I think this may have been a little over-enthusiastic:
================ Comment at: lib/CodeGen/CGBuiltin.cpp:2707-2709 @@ +2706,5 @@ + dyn_cast<llvm::VectorType>(Ops[0]->getType())->getVectorNumElements(); + llvm::Type *Int1Ty = llvm::Type::getInt1Ty(CGF.CGM.getLLVMContext()); + llvm::VectorType *CondTy = llvm::VectorType::get(Int1Ty, Lane); + Value *Cond = CGF.Builder.CreateTrunc(Ops[0], CondTy); + return CGF.Builder.CreateSelect(Cond, Ops[1], Ops[2]); ---------------- I don't think this is correct. A vbsl intrinsic depends on all bits of its input, not just the low one, but this is discarding most of them. I think you either need to keep the IR-level intrinsic or implement vbsl in terms of the AND/OR masking described in the ARM ARM. The latter is probably preferable longer-term, but doesn't necessarily have to happen now. http://llvm-reviews.chandlerc.com/D2360 _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
