diff options
Diffstat (limited to 'llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp b/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp index d3baeea2433..681fe717884 100644 --- a/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp +++ b/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp @@ -193,6 +193,7 @@ static bool isAddressExpression(const Value &V) { case Instruction::BitCast: case Instruction::AddrSpaceCast: case Instruction::GetElementPtr: + case Instruction::Select: return true; default: return false; @@ -215,6 +216,8 @@ static SmallVector<Value *, 2> getPointerOperands(const Value &V) { case Instruction::AddrSpaceCast: case Instruction::GetElementPtr: return {Op.getOperand(0)}; + case Instruction::Select: + return {Op.getOperand(1), Op.getOperand(2)}; default: llvm_unreachable("Unexpected instruction type."); } @@ -412,6 +415,11 @@ static Value *cloneInstructionWithNewAddressSpace( NewGEP->setIsInBounds(GEP->isInBounds()); return NewGEP; } + case Instruction::Select: { + assert(I->getType()->isPointerTy()); + return SelectInst::Create(I->getOperand(0), NewPointerOperands[1], + NewPointerOperands[2], "", nullptr, I); + } default: llvm_unreachable("Unexpected opcode"); } |