mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-26 23:38:31 +00:00
[TargetLowering] SimplifyDemandedBits - just call computeKnownBits for BUILD_VECTOR cases.
Don't do this locally, computeKnownBits does this better (and can handle non-constant cases as well). A next step would be to actually simplify non-constant elements - building on what we already do in SimplifyDemandedVectorElts. llvm-svn: 365309
This commit is contained in:
parent
2b509d6922
commit
3a3945c8c9
@ -639,29 +639,9 @@ bool TargetLowering::SimplifyDemandedBits(
|
||||
break;
|
||||
}
|
||||
case ISD::BUILD_VECTOR:
|
||||
// Collect the known bits that are shared by every constant vector element.
|
||||
Known.Zero.setAllBits(); Known.One.setAllBits();
|
||||
for (SDValue SrcOp : Op->ops()) {
|
||||
if (!isa<ConstantSDNode>(SrcOp)) {
|
||||
// We can only handle all constant values - bail out with no known bits.
|
||||
Known = KnownBits(BitWidth);
|
||||
return false;
|
||||
}
|
||||
Known2.One = cast<ConstantSDNode>(SrcOp)->getAPIntValue();
|
||||
Known2.Zero = ~Known2.One;
|
||||
|
||||
// BUILD_VECTOR can implicitly truncate sources, we must handle this.
|
||||
if (Known2.One.getBitWidth() != BitWidth) {
|
||||
assert(Known2.getBitWidth() > BitWidth &&
|
||||
"Expected BUILD_VECTOR implicit truncation");
|
||||
Known2 = Known2.trunc(BitWidth);
|
||||
}
|
||||
|
||||
// Known bits are the values that are shared by every element.
|
||||
// TODO: support per-element known bits.
|
||||
Known.One &= Known2.One;
|
||||
Known.Zero &= Known2.Zero;
|
||||
}
|
||||
// Collect the known bits that are shared by every demanded element.
|
||||
// TODO: Call SimplifyDemandedBits for non-constant demanded elements.
|
||||
Known = TLO.DAG.computeKnownBits(Op, DemandedElts, Depth);
|
||||
return false; // Don't fall through, will infinitely loop.
|
||||
case ISD::LOAD: {
|
||||
LoadSDNode *LD = cast<LoadSDNode>(Op);
|
||||
|
Loading…
x
Reference in New Issue
Block a user