mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-28 13:51:09 +00:00
[SVE][CodeGen] Fix up warnings in sve-split-insert/extract tests
I have fixed up some more ElementCount/TypeSize related warnings in the following tests: CodeGen/AArch64/sve-split-extract-elt.ll CodeGen/AArch64/sve-split-insert-elt.ll In SelectionDAG::CreateStackTemporary we were relying upon the implicit cast from TypeSize -> uint64_t when calling MachineFrameInfo::CreateStackObject. I've fixed this by passing in the known minimum size instead, which I believe is fine because the associated stack id indicates whether this is a scalable object or not. I've also fixed up a case in TargetLowering::SimplifyDemandedBits when extracting a vector element from a scalable vector. The result is a scalar, hence it wasn't caught at the start of the function. If the vector is scalable we just bail out for now. Differential Revision: https://reviews.llvm.org/D86431
This commit is contained in:
parent
587c7dcbfd
commit
4a83ce1e3c
@ -116,6 +116,15 @@ public:
|
||||
|
||||
unsigned getKnownMinValue() const { return Min; }
|
||||
|
||||
// Return the minimum value with the assumption that the count is exact.
|
||||
// Use in places where a scalable count doesn't make sense (e.g. non-vector
|
||||
// types, or vectors in backends which don't support scalable vectors).
|
||||
unsigned getFixedValue() const {
|
||||
assert(!Scalable &&
|
||||
"Request for a fixed element count on a scalable object");
|
||||
return Min;
|
||||
}
|
||||
|
||||
bool isScalable() const { return Scalable; }
|
||||
};
|
||||
|
||||
|
@ -2030,7 +2030,9 @@ SDValue SelectionDAG::CreateStackTemporary(TypeSize Bytes, Align Alignment) {
|
||||
int StackID = 0;
|
||||
if (Bytes.isScalable())
|
||||
StackID = TFI->getStackIDForScalableVectors();
|
||||
int FrameIdx = MFI.CreateStackObject(Bytes, Alignment,
|
||||
// The stack id gives an indication of whether the object is scalable or
|
||||
// not, so it's safe to pass in the minimum size here.
|
||||
int FrameIdx = MFI.CreateStackObject(Bytes.getKnownMinSize(), Alignment,
|
||||
false, nullptr, StackID);
|
||||
return getFrameIndex(FrameIdx, TLI->getFrameIndexTy(getDataLayout()));
|
||||
}
|
||||
|
@ -2022,10 +2022,14 @@ bool TargetLowering::SimplifyDemandedBits(
|
||||
case ISD::EXTRACT_VECTOR_ELT: {
|
||||
SDValue Src = Op.getOperand(0);
|
||||
SDValue Idx = Op.getOperand(1);
|
||||
unsigned NumSrcElts = Src.getValueType().getVectorNumElements();
|
||||
ElementCount SrcEltCnt = Src.getValueType().getVectorElementCount();
|
||||
unsigned EltBitWidth = Src.getScalarValueSizeInBits();
|
||||
|
||||
if (SrcEltCnt.isScalable())
|
||||
return false;
|
||||
|
||||
// Demand the bits from every vector element without a constant index.
|
||||
unsigned NumSrcElts = SrcEltCnt.getFixedValue();
|
||||
APInt DemandedSrcElts = APInt::getAllOnesValue(NumSrcElts);
|
||||
if (auto *CIdx = dyn_cast<ConstantSDNode>(Idx))
|
||||
if (CIdx->getAPIntValue().ult(NumSrcElts))
|
||||
|
@ -1,5 +1,9 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s 2>%t | FileCheck %s
|
||||
; RUN: FileCheck --check-prefix=WARN --allow-empty %s <%t
|
||||
|
||||
; If this check fails please read test/CodeGen/AArch64/README for instructions on how to resolve it.
|
||||
; WARN-NOT: warning
|
||||
|
||||
; EXTRACT VECTOR ELT
|
||||
|
||||
|
@ -1,5 +1,9 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s 2>%t | FileCheck %s
|
||||
; RUN: FileCheck --check-prefix=WARN --allow-empty %s <%t
|
||||
|
||||
; If this check fails please read test/CodeGen/AArch64/README for instructions on how to resolve it.
|
||||
; WARN-NOT: warning
|
||||
|
||||
; INSERT VECTOR ELT
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user