[llvm] [GVNSink] Fix non-determinisms by using Depth-First ordering (PR #90995)
via llvm-commits
llvm-commits at lists.llvm.org
Sat May 4 06:51:18 PDT 2024
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff 2f58b9aae2d6f1aeaecd98766ef31cebc0dcbb5b 4ff68a8cb783768291fe5bb1900b6612beb6695f -- llvm/lib/Transforms/Scalar/GVNSink.cpp
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/llvm/lib/Transforms/Scalar/GVNSink.cpp b/llvm/lib/Transforms/Scalar/GVNSink.cpp
index bf5b788b86..72a5262dcd 100644
--- a/llvm/lib/Transforms/Scalar/GVNSink.cpp
+++ b/llvm/lib/Transforms/Scalar/GVNSink.cpp
@@ -227,14 +227,14 @@ class ModelledPHI {
public:
ModelledPHI() = default;
- ModelledPHI(const PHINode *PN, DominatorTree *DT) : DT(DT){
+ ModelledPHI(const PHINode *PN, DominatorTree *DT) : DT(DT) {
// BasicBlock comes first so we sort by basic block pointer order, then by value pointer order.
using OpsType = std::pair<BasicBlock *, Value *>;
SmallVector<OpsType, 4> Ops;
for (unsigned I = 0, E = PN->getNumIncomingValues(); I != E; ++I)
Ops.push_back({PN->getIncomingBlock(I), PN->getIncomingValue(I)});
- auto DFSOrder = [DT](OpsType O1, OpsType O2){
+ auto DFSOrder = [DT](OpsType O1, OpsType O2) {
return DT->getNode(O1.first) < DT->getNode(O2.first);
};
// Sort by DFSNumber to have a deterministic order.
@@ -263,16 +263,16 @@ public:
};
assert(llvm::is_sorted(Blocks, DFSOrder));
int C = 0;
- llvm::for_each(Values, [&C, this](const Value* V){
- const Instruction* I = cast<Instruction>(V);
+ llvm::for_each(Values, [&C, this](const Value *V) {
+ const Instruction *I = cast<Instruction>(V);
assert(I->getParent() == this->Blocks[C++]);
});
}
/// Create a PHI from an array of incoming values and incoming blocks.
// TODO: Sort as per their DFS numbers
ModelledPHI(SmallVectorImpl<Instruction *> &V,
- SmallSetVector<BasicBlock *, 4> &B,
- DominatorTree *DT) : DT(DT){
+ SmallSetVector<BasicBlock *, 4> &B, DominatorTree *DT)
+ : DT(DT) {
llvm::copy(V, std::back_inserter(Values));
llvm::copy(B, std::back_inserter(Blocks));
verifyModelledPHI();
@@ -280,8 +280,8 @@ public:
/// Create a PHI from [I[OpNum] for I in Insts].
ModelledPHI(ArrayRef<Instruction *> Insts, unsigned OpNum,
- SmallSetVector<BasicBlock *, 4> &B,
- DominatorTree *DT) : DT(DT) {
+ SmallSetVector<BasicBlock *, 4> &B, DominatorTree *DT)
+ : DT(DT) {
llvm::copy(B, std::back_inserter(Blocks));
for (auto *I : Insts)
Values.push_back(I->getOperand(OpNum));
@@ -322,8 +322,8 @@ public:
// Hash functor
unsigned hash() const {
- // Is deterministic because Values are saved in DFSOrder.
- return (unsigned)hash_combine_range(Values.begin(), Values.end());
+ // Is deterministic because Values are saved in DFSOrder.
+ return (unsigned)hash_combine_range(Values.begin(), Values.end());
}
bool operator==(const ModelledPHI &Other) const {
@@ -592,7 +592,7 @@ public:
class GVNSink {
public:
- GVNSink(DominatorTree *DT) :DT(DT) {}
+ GVNSink(DominatorTree *DT) : DT(DT) {}
bool run(Function &F) {
LLVM_DEBUG(dbgs() << "GVNSink: running on function @" << F.getName()
``````````
</details>
https://github.com/llvm/llvm-project/pull/90995
More information about the llvm-commits
mailing list