mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 00:17:01 +00:00
Fixed a bug in narrowing store operation.
Type MVT::i1 became legal in KNL, but store operation can't be narrowed to this type, since the size of VT (1 bit) is not equal to its actual store size(8 bits). Added a test provided by David (dag@cray.com) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226805 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -9497,9 +9497,12 @@ SDValue DAGCombiner::ReduceLoadOpStoreWidth(SDNode *N) {
|
||||
unsigned MSB = BitWidth - Imm.countLeadingZeros() - 1;
|
||||
unsigned NewBW = NextPowerOf2(MSB - ShAmt);
|
||||
EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
|
||||
// The narowwing should be profitable, the load/store operation should be
|
||||
// legal (or custom) and the store size should be equal to the NewVT width.
|
||||
while (NewBW < BitWidth &&
|
||||
!(TLI.isOperationLegalOrCustom(Opc, NewVT) &&
|
||||
TLI.isNarrowingProfitable(VT, NewVT))) {
|
||||
(NewVT.getStoreSizeInBits() != NewBW ||
|
||||
!TLI.isOperationLegalOrCustom(Opc, NewVT) ||
|
||||
!TLI.isNarrowingProfitable(VT, NewVT))) {
|
||||
NewBW = NextPowerOf2(NewBW);
|
||||
NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user