@@ -1484,23 +1484,26 @@ bool SITargetLowering::getAddrModeArguments(IntrinsicInst *II,
1484
1484
}
1485
1485
1486
1486
bool SITargetLowering::isLegalFlatAddressingMode(const AddrMode &AM,
1487
- unsigned AddrSpace,
1488
- uint64_t FlatVariant) const {
1487
+ unsigned AddrSpace) const {
1489
1488
if (!Subtarget->hasFlatInstOffsets()) {
1490
1489
// Flat instructions do not have offsets, and only have the register
1491
1490
// address.
1492
1491
return AM.BaseOffs == 0 && AM.Scale == 0;
1493
1492
}
1494
1493
1494
+ decltype(SIInstrFlags::FLAT) FlatVariant =
1495
+ AddrSpace == AMDGPUAS::GLOBAL_ADDRESS ? SIInstrFlags::FlatGlobal
1496
+ : AddrSpace == AMDGPUAS::PRIVATE_ADDRESS ? SIInstrFlags::FlatScratch
1497
+ : SIInstrFlags::FLAT;
1498
+
1495
1499
return AM.Scale == 0 &&
1496
1500
(AM.BaseOffs == 0 || Subtarget->getInstrInfo()->isLegalFLATOffset(
1497
1501
AM.BaseOffs, AddrSpace, FlatVariant));
1498
1502
}
1499
1503
1500
1504
bool SITargetLowering::isLegalGlobalAddressingMode(const AddrMode &AM) const {
1501
1505
if (Subtarget->hasFlatGlobalInsts())
1502
- return isLegalFlatAddressingMode(AM, AMDGPUAS::GLOBAL_ADDRESS,
1503
- SIInstrFlags::FlatGlobal);
1506
+ return isLegalFlatAddressingMode(AM, AMDGPUAS::GLOBAL_ADDRESS);
1504
1507
1505
1508
if (!Subtarget->hasAddr64() || Subtarget->useFlatForGlobal()) {
1506
1509
// Assume the we will use FLAT for all global memory accesses
@@ -1512,8 +1515,7 @@ bool SITargetLowering::isLegalGlobalAddressingMode(const AddrMode &AM) const {
1512
1515
// by setting the stride value in the resource descriptor which would
1513
1516
// increase the size limit to (stride * 4GB). However, this is risky,
1514
1517
// because it has never been validated.
1515
- return isLegalFlatAddressingMode(AM, AMDGPUAS::FLAT_ADDRESS,
1516
- SIInstrFlags::FLAT);
1518
+ return isLegalFlatAddressingMode(AM, AMDGPUAS::FLAT_ADDRESS);
1517
1519
}
1518
1520
1519
1521
return isLegalMUBUFAddressingMode(AM);
@@ -1619,8 +1621,7 @@ bool SITargetLowering::isLegalAddressingMode(const DataLayout &DL,
1619
1621
1620
1622
if (AS == AMDGPUAS::PRIVATE_ADDRESS)
1621
1623
return Subtarget->enableFlatScratch()
1622
- ? isLegalFlatAddressingMode(AM, AMDGPUAS::PRIVATE_ADDRESS,
1623
- SIInstrFlags::FlatScratch)
1624
+ ? isLegalFlatAddressingMode(AM, AMDGPUAS::PRIVATE_ADDRESS)
1624
1625
: isLegalMUBUFAddressingMode(AM);
1625
1626
1626
1627
if (AS == AMDGPUAS::LOCAL_ADDRESS ||
@@ -1647,8 +1648,7 @@ bool SITargetLowering::isLegalAddressingMode(const DataLayout &DL,
1647
1648
// computation. We don't have instructions that compute pointers with any
1648
1649
// addressing modes, so treat them as having no offset like flat
1649
1650
// instructions.
1650
- return isLegalFlatAddressingMode(AM, AMDGPUAS::FLAT_ADDRESS,
1651
- SIInstrFlags::FLAT);
1651
+ return isLegalFlatAddressingMode(AM, AMDGPUAS::FLAT_ADDRESS);
1652
1652
}
1653
1653
1654
1654
// Assume a user alias of global for unknown address spaces.
0 commit comments