Skip to content

Commit 27cd50e

Browse files
Use LVer.annotateLoopWithNoAlias and remove setNoAliasToLoop
1 parent e8f5ee2 commit 27cd50e

File tree

3 files changed

+6
-45
lines changed

3 files changed

+6
-45
lines changed

llvm/lib/Transforms/Scalar/LoopVersioningLICM.cpp

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,6 @@ struct LoopVersioningLICM {
164164
bool legalLoopInstructions();
165165
bool legalLoopMemoryAccesses();
166166
bool isLoopAlreadyVisited();
167-
void setNoAliasToLoop(Loop *VerLoop);
168167
bool instructionSafeForVersioning(Instruction *I);
169168
};
170169

@@ -508,44 +507,6 @@ bool LoopVersioningLICM::isLegalForVersioning() {
508507
return true;
509508
}
510509

511-
/// Update loop with aggressive aliasing assumptions.
512-
/// It marks no-alias to any pairs of memory operations by assuming
513-
/// loop should not have any must-alias memory accesses pairs.
514-
/// During LoopVersioningLICM legality we ignore loops having must
515-
/// aliasing memory accesses.
516-
void LoopVersioningLICM::setNoAliasToLoop(Loop *VerLoop) {
517-
// Get latch terminator instruction.
518-
Instruction *I = VerLoop->getLoopLatch()->getTerminator();
519-
// Create alias scope domain.
520-
MDBuilder MDB(I->getContext());
521-
MDNode *NewDomain = MDB.createAnonymousAliasScopeDomain("LVDomain");
522-
StringRef Name = "LVAliasScope";
523-
MDNode *NewScope = MDB.createAnonymousAliasScope(NewDomain, Name);
524-
SmallVector<Metadata *, 4> Scopes{NewScope}, NoAliases{NewScope};
525-
auto &Pointers = LAI->getRuntimePointerChecking()->Pointers;
526-
527-
// Iterate over each instruction of loop.
528-
// set no-alias for all load & store instructions.
529-
for (auto *Block : CurLoop->getBlocks()) {
530-
for (auto &Inst : *Block) {
531-
// We can only add noalias to pointers that we've inserted checks for
532-
Value *V = getLoadStorePointerOperand(&Inst);
533-
if (!V || !any_of(Pointers, [&](auto &P) { return P.PointerValue == V; }))
534-
continue;
535-
// Set no-alias for current instruction.
536-
Inst.setMetadata(
537-
LLVMContext::MD_noalias,
538-
MDNode::concatenate(Inst.getMetadata(LLVMContext::MD_noalias),
539-
MDNode::get(Inst.getContext(), NoAliases)));
540-
// set alias-scope for current instruction.
541-
Inst.setMetadata(
542-
LLVMContext::MD_alias_scope,
543-
MDNode::concatenate(Inst.getMetadata(LLVMContext::MD_alias_scope),
544-
MDNode::get(Inst.getContext(), Scopes)));
545-
}
546-
}
547-
}
548-
549510
bool LoopVersioningLICM::run(DominatorTree *DT) {
550511
// Do not do the transformation if disabled by metadata.
551512
if (hasLICMVersioningTransformation(CurLoop) & TM_Disable)
@@ -573,7 +534,7 @@ bool LoopVersioningLICM::run(DominatorTree *DT) {
573534
addStringMetadataToLoop(LVer.getVersionedLoop(),
574535
"llvm.mem.parallel_loop_access");
575536
// Update version loop with aggressive aliasing assumption.
576-
setNoAliasToLoop(LVer.getVersionedLoop());
537+
LVer.annotateLoopWithNoAlias();
577538
Changed = true;
578539
}
579540
return Changed;

llvm/test/Transforms/LoopVersioningLICM/loopversioningLICM1.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,23 @@ define i32 @foo(ptr nocapture %var1, ptr nocapture readnone %var2, ptr nocapture
5757
; CHECK-NEXT: [[CMP2_LVER_ORIG:%.*]] = icmp ult i32 [[INC_LVER_ORIG]], [[ITR]]
5858
; CHECK-NEXT: br i1 [[CMP2_LVER_ORIG]], label [[FOR_BODY3_LVER_ORIG]], label [[FOR_INC11_LOOPEXIT_LOOPEXIT:%.*]], !llvm.loop [[LOOP0:![0-9]+]]
5959
; CHECK: for.body3.ph:
60-
; CHECK-NEXT: [[ARRAYIDX7_PROMOTED:%.*]] = load i32, ptr [[ARRAYIDX7]], align 4, !alias.scope [[META2:![0-9]+]], !noalias [[META2]]
60+
; CHECK-NEXT: [[ARRAYIDX7_PROMOTED:%.*]] = load i32, ptr [[ARRAYIDX7]], align 4, !alias.scope [[META2:![0-9]+]]
6161
; CHECK-NEXT: br label [[FOR_BODY3:%.*]]
6262
; CHECK: for.body3:
6363
; CHECK-NEXT: [[ADD86:%.*]] = phi i32 [ [[ARRAYIDX7_PROMOTED]], [[FOR_BODY3_PH]] ], [ [[ADD8:%.*]], [[FOR_BODY3]] ]
6464
; CHECK-NEXT: [[J_113:%.*]] = phi i32 [ [[J_016]], [[FOR_BODY3_PH]] ], [ [[INC:%.*]], [[FOR_BODY3]] ]
6565
; CHECK-NEXT: [[IDXPROM:%.*]] = zext i32 [[J_113]] to i64
6666
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[VAR1]], i64 [[IDXPROM]]
67-
; CHECK-NEXT: store i32 [[ADD]], ptr [[ARRAYIDX]], align 4, !alias.scope [[META2]], !noalias [[META2]]
67+
; CHECK-NEXT: store i32 [[ADD]], ptr [[ARRAYIDX]], align 4, !alias.scope [[META5:![0-9]+]], !noalias [[META2]]
6868
; CHECK-NEXT: [[ADD8]] = add nsw i32 [[ADD86]], [[ADD]]
6969
; CHECK-NEXT: [[INC]] = add nuw i32 [[J_113]], 1
7070
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i32 [[INC]], [[ITR]]
71-
; CHECK-NEXT: br i1 [[CMP2]], label [[FOR_BODY3]], label [[FOR_INC11_LOOPEXIT_LOOPEXIT5:%.*]], !llvm.loop [[LOOP5:![0-9]+]]
71+
; CHECK-NEXT: br i1 [[CMP2]], label [[FOR_BODY3]], label [[FOR_INC11_LOOPEXIT_LOOPEXIT5:%.*]], !llvm.loop [[LOOP7:![0-9]+]]
7272
; CHECK: for.inc11.loopexit.loopexit:
7373
; CHECK-NEXT: br label [[FOR_INC11_LOOPEXIT:%.*]]
7474
; CHECK: for.inc11.loopexit.loopexit5:
7575
; CHECK-NEXT: [[ADD8_LCSSA:%.*]] = phi i32 [ [[ADD8]], [[FOR_BODY3]] ]
76-
; CHECK-NEXT: store i32 [[ADD8_LCSSA]], ptr [[ARRAYIDX7]], align 4, !alias.scope [[META2]], !noalias [[META2]]
76+
; CHECK-NEXT: store i32 [[ADD8_LCSSA]], ptr [[ARRAYIDX7]], align 4, !alias.scope [[META2]]
7777
; CHECK-NEXT: br label [[FOR_INC11_LOOPEXIT]]
7878
; CHECK: for.inc11.loopexit:
7979
; CHECK-NEXT: br label [[FOR_INC11]]

llvm/test/Transforms/LoopVersioningLICM/loopversioningLICM2.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
;
1010
; CHECK: for.cond1.for.inc17_crit_edge.us.loopexit5: ; preds = %for.body3.us
1111
; CHECK-NEXT: %add14.us.lcssa = phi float [ %add14.us, %for.body3.us ]
12-
; CHECK-NEXT: store float %add14.us.lcssa, ptr %arrayidx.us, align 4, !alias.scope !0, !noalias !0
12+
; CHECK-NEXT: store float %add14.us.lcssa, ptr %arrayidx.us, align 4, !alias.scope !3
1313
; CHECK-NEXT: br label %for.cond1.for.inc17_crit_edge.us
1414
;
1515
define i32 @foo(ptr nocapture %var2, ptr nocapture readonly %var3, i32 %itr) #0 {

0 commit comments

Comments
 (0)