|
13 | 13 | #include "AMDGPU.h"
|
14 | 14 | #include "GCNSubtarget.h"
|
15 | 15 | #include "Utils/AMDGPUBaseInfo.h"
|
16 |
| -#include "llvm/Analysis/TargetTransformInfo.h" |
17 | 16 | #include "llvm/IR/IntrinsicsAMDGPU.h"
|
18 | 17 | #include "llvm/IR/IntrinsicsR600.h"
|
19 | 18 | #include "llvm/Target/TargetMachine.h"
|
@@ -1297,116 +1296,6 @@ struct AAAMDGPUNoAGPR
|
1297 | 1296 |
|
1298 | 1297 | const char AAAMDGPUNoAGPR::ID = 0;
|
1299 | 1298 |
|
1300 |
| -struct AAAMDGPUUniform : public StateWrapper<BooleanState, AbstractAttribute> { |
1301 |
| - using Base = StateWrapper<BooleanState, AbstractAttribute>; |
1302 |
| - AAAMDGPUUniform(const IRPosition &IRP, Attributor &A) : Base(IRP) {} |
1303 |
| - |
1304 |
| - /// Create an abstract attribute view for the position \p IRP. |
1305 |
| - static AAAMDGPUUniform &createForPosition(const IRPosition &IRP, |
1306 |
| - Attributor &A); |
1307 |
| - |
1308 |
| - /// See AbstractAttribute::getName() |
1309 |
| - StringRef getName() const override { return "AAAMDGPUUniform"; } |
1310 |
| - |
1311 |
| - const std::string getAsStr(Attributor *A) const override { |
1312 |
| - return getAssumed() ? "uniform" : "divergent"; |
1313 |
| - } |
1314 |
| - |
1315 |
| - void trackStatistics() const override {} |
1316 |
| - |
1317 |
| - /// See AbstractAttribute::getIdAddr() |
1318 |
| - const char *getIdAddr() const override { return &ID; } |
1319 |
| - |
1320 |
| - /// This function should return true if the type of the \p AA is |
1321 |
| - /// AAAMDGPUUniform |
1322 |
| - static bool classof(const AbstractAttribute *AA) { |
1323 |
| - return (AA->getIdAddr() == &ID); |
1324 |
| - } |
1325 |
| - |
1326 |
| - /// Unique ID (due to the unique address) |
1327 |
| - static const char ID; |
1328 |
| -}; |
1329 |
| - |
1330 |
| -const char AAAMDGPUUniform::ID = 0; |
1331 |
| - |
1332 |
| -/// This AA is to infer the inreg attribute for a function argument. |
1333 |
| -struct AAAMDGPUUniformArgument : public AAAMDGPUUniform { |
1334 |
| - AAAMDGPUUniformArgument(const IRPosition &IRP, Attributor &A) |
1335 |
| - : AAAMDGPUUniform(IRP, A) {} |
1336 |
| - |
1337 |
| - void initialize(Attributor &A) override { |
1338 |
| - Argument *Arg = getAssociatedArgument(); |
1339 |
| - CallingConv::ID CC = Arg->getParent()->getCallingConv(); |
1340 |
| - if (Arg->hasAttribute(Attribute::InReg)) { |
1341 |
| - indicateOptimisticFixpoint(); |
1342 |
| - return; |
1343 |
| - } |
1344 |
| - |
1345 |
| - if (AMDGPU::isEntryFunctionCC(CC)) { |
1346 |
| - // We only use isArgPassedInSGPR on kernel entry function argument, so |
1347 |
| - // even if we will use SPGR for non-uniform i1 argument passing, it will |
1348 |
| - // not affect this. |
1349 |
| - if (AMDGPU::isArgPassedInSGPR(Arg)) |
1350 |
| - indicateOptimisticFixpoint(); |
1351 |
| - else |
1352 |
| - indicatePessimisticFixpoint(); |
1353 |
| - } |
1354 |
| - } |
1355 |
| - |
1356 |
| - ChangeStatus updateImpl(Attributor &A) override { |
1357 |
| - unsigned ArgNo = getAssociatedArgument()->getArgNo(); |
1358 |
| - |
1359 |
| - auto isUniform = [&](AbstractCallSite ACS) -> bool { |
1360 |
| - CallBase *CB = ACS.getInstruction(); |
1361 |
| - Value *V = CB->getArgOperand(ArgNo); |
1362 |
| - if (isa<Constant>(V)) |
1363 |
| - return true; |
1364 |
| - if (auto *Arg = dyn_cast<Argument>(V)) { |
1365 |
| - auto *AA = A.getOrCreateAAFor<AAAMDGPUUniform>( |
1366 |
| - IRPosition::argument(*Arg), this, DepClassTy::REQUIRED); |
1367 |
| - return AA && AA->isValidState(); |
1368 |
| - } |
1369 |
| - const TargetTransformInfo *TTI = |
1370 |
| - A.getInfoCache().getAnalysisResultForFunction<TargetIRAnalysis>( |
1371 |
| - *CB->getFunction()); |
1372 |
| - return TTI->isAlwaysUniform(V); |
1373 |
| - }; |
1374 |
| - |
1375 |
| - bool UsedAssumedInformation = true; |
1376 |
| - if (!A.checkForAllCallSites(isUniform, *this, /*RequireAllCallSites=*/true, |
1377 |
| - UsedAssumedInformation)) |
1378 |
| - return indicatePessimisticFixpoint(); |
1379 |
| - |
1380 |
| - if (!UsedAssumedInformation) |
1381 |
| - return indicateOptimisticFixpoint(); |
1382 |
| - |
1383 |
| - return ChangeStatus::UNCHANGED; |
1384 |
| - } |
1385 |
| - |
1386 |
| - ChangeStatus manifest(Attributor &A) override { |
1387 |
| - Argument *Arg = getAssociatedArgument(); |
1388 |
| - // If the argument already has inreg attribute, we will not do anything |
1389 |
| - // about it. |
1390 |
| - if (Arg->hasAttribute(Attribute::InReg)) |
1391 |
| - return ChangeStatus::UNCHANGED; |
1392 |
| - if (AMDGPU::isEntryFunctionCC(Arg->getParent()->getCallingConv())) |
1393 |
| - return ChangeStatus::UNCHANGED; |
1394 |
| - LLVMContext &Ctx = Arg->getContext(); |
1395 |
| - return A.manifestAttrs(getIRPosition(), |
1396 |
| - {Attribute::get(Ctx, Attribute::InReg)}); |
1397 |
| - } |
1398 |
| -}; |
1399 |
| - |
1400 |
| -AAAMDGPUUniform &AAAMDGPUUniform::createForPosition(const IRPosition &IRP, |
1401 |
| - Attributor &A) { |
1402 |
| - switch (IRP.getPositionKind()) { |
1403 |
| - case IRPosition::IRP_ARGUMENT: |
1404 |
| - return *new (A.Allocator) AAAMDGPUUniformArgument(IRP, A); |
1405 |
| - default: |
1406 |
| - llvm_unreachable("not a valid position for AAAMDGPUUniform"); |
1407 |
| - } |
1408 |
| -} |
1409 |
| - |
1410 | 1299 | /// Performs the final check and updates the 'amdgpu-waves-per-eu' attribute
|
1411 | 1300 | /// based on the finalized 'amdgpu-flat-work-group-size' attribute.
|
1412 | 1301 | /// Both attributes start with narrow ranges that expand during iteration.
|
@@ -1493,7 +1382,7 @@ static bool runImpl(Module &M, AnalysisGetter &AG, TargetMachine &TM,
|
1493 | 1382 | &AAAMDMaxNumWorkgroups::ID, &AAAMDWavesPerEU::ID, &AAAMDGPUNoAGPR::ID,
|
1494 | 1383 | &AACallEdges::ID, &AAPointerInfo::ID, &AAPotentialConstantValues::ID,
|
1495 | 1384 | &AAUnderlyingObjects::ID, &AANoAliasAddrSpace::ID, &AAAddressSpace::ID,
|
1496 |
| - &AAIndirectCallInfo::ID, &AAAMDGPUUniform::ID}); |
| 1385 | + &AAIndirectCallInfo::ID}); |
1497 | 1386 |
|
1498 | 1387 | AttributorConfig AC(CGUpdater);
|
1499 | 1388 | AC.IsClosedWorldModule = Options.IsClosedWorld;
|
@@ -1546,11 +1435,6 @@ static bool runImpl(Module &M, AnalysisGetter &AG, TargetMachine &TM,
|
1546 | 1435 | A.getOrCreateAAFor<AAAddressSpace>(IRPosition::value(*Ptr));
|
1547 | 1436 | A.getOrCreateAAFor<AANoAliasAddrSpace>(IRPosition::value(*Ptr));
|
1548 | 1437 | }
|
1549 |
| - |
1550 |
| - if (!AMDGPU::isEntryFunctionCC(F->getCallingConv())) { |
1551 |
| - for (auto &Arg : F->args()) |
1552 |
| - A.getOrCreateAAFor<AAAMDGPUUniform>(IRPosition::argument(Arg)); |
1553 |
| - } |
1554 | 1438 | }
|
1555 | 1439 | }
|
1556 | 1440 |
|
|
0 commit comments