mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-29 10:32:47 +00:00
Add support for inserting undef into a vector. This implements
Transforms/InstCombine/vec_insert_to_shuffle.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27997 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
011ec7f29c
commit
d929f06f4d
@ -6959,12 +6959,23 @@ static bool CollectSingleShuffleElements(Value *V, Value *LHS, Value *RHS,
|
||||
Value *ScalarOp = IEI->getOperand(1);
|
||||
Value *IdxOp = IEI->getOperand(2);
|
||||
|
||||
if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)) {
|
||||
if (isa<ConstantInt>(EI->getOperand(1)) && isa<ConstantInt>(IdxOp) &&
|
||||
if (!isa<ConstantInt>(IdxOp))
|
||||
return false;
|
||||
unsigned InsertedIdx = cast<ConstantInt>(IdxOp)->getRawValue();
|
||||
|
||||
if (isa<UndefValue>(ScalarOp)) { // inserting undef into vector.
|
||||
// Okay, we can handle this if the vector we are insertinting into is
|
||||
// transitively ok.
|
||||
if (CollectSingleShuffleElements(VecOp, LHS, RHS, Mask)) {
|
||||
// If so, update the mask to reflect the inserted undef.
|
||||
Mask[InsertedIdx] = UndefValue::get(Type::UIntTy);
|
||||
return true;
|
||||
}
|
||||
} else if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)){
|
||||
if (isa<ConstantInt>(EI->getOperand(1)) &&
|
||||
EI->getOperand(0)->getType() == V->getType()) {
|
||||
unsigned ExtractedIdx =
|
||||
cast<ConstantInt>(EI->getOperand(1))->getRawValue();
|
||||
unsigned InsertedIdx = cast<ConstantInt>(IdxOp)->getRawValue();
|
||||
|
||||
// This must be extracting from either LHS or RHS.
|
||||
if (EI->getOperand(0) == LHS || EI->getOperand(0) == RHS) {
|
||||
|
Loading…
Reference in New Issue
Block a user