mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
Only legalise a VSELECT in to bitwise operations if the vector mask bool is zeros or all ones. A vector bool with just ones isn't suitable for masking with.
No test case unfortunately as i couldn't find a target which fit all the conditions needed to hit this code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163075 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8dce5b6004
commit
d906017c1a
@ -514,9 +514,14 @@ SDValue VectorLegalizer::ExpandVSELECT(SDValue Op) {
|
||||
// AND,OR,XOR, we will have to scalarize the op.
|
||||
// Notice that the operation may be 'promoted' which means that it is
|
||||
// 'bitcasted' to another type which is handled.
|
||||
// This operation also isn't safe with AND, OR, XOR when the boolean
|
||||
// type is 0/1 as we need an all ones vector constant to mask with.
|
||||
// FIXME: Sign extend 1 to all ones if thats legal on the target.
|
||||
if (TLI.getOperationAction(ISD::AND, VT) == TargetLowering::Expand ||
|
||||
TLI.getOperationAction(ISD::XOR, VT) == TargetLowering::Expand ||
|
||||
TLI.getOperationAction(ISD::OR, VT) == TargetLowering::Expand)
|
||||
TLI.getOperationAction(ISD::OR, VT) == TargetLowering::Expand ||
|
||||
TLI.getBooleanContents(true) !=
|
||||
TargetLowering::ZeroOrNegativeOneBooleanContent)
|
||||
return DAG.UnrollVectorOp(Op.getNode());
|
||||
|
||||
assert(VT.getSizeInBits() == Op1.getValueType().getSizeInBits()
|
||||
|
Loading…
x
Reference in New Issue
Block a user