llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-amdgpu Author: Florian Hahn (fhahn) <details> <summary>Changes</summary> Currently iterators over EquivalenceClasses will iterate over std::set, which guarantees the order specified by the comperator. Unfortunately in many cases, EquivalenceClasses are used with pointers, so iterating over std::set of pointers will not be deterministic across runs. There are multiple places that explicitly try to sort the equivalence classes before using them to try to get a deterministic order (LowerTypeTests, SplitModule), but there are others that do not at the moment and this can result at least in non-determinstic value naming in Float2Int. This patch updates EquivalenceClasses to keep track of all members via a extra SmallVector and removes code from LowerTypeTests and SplitModule to sort the classes before processing. Overall it looks like compile-time slightly decreases in most cases, but close to noise: https://llvm-compile-time-tracker.com/compare.php?from=7d441d9892295a6eb8aaf481e1715f039f6f224f&to=b0c2ac67a88d3ef86987e2f82115ea0170675a17&stat=instructions --- Patch is 21.09 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/134075.diff 16 Files Affected: - (modified) clang/lib/Analysis/FlowSensitive/SimplifyConstraints.cpp (+4-4) - (modified) llvm/include/llvm/ADT/EquivalenceClasses.h (+16-9) - (modified) llvm/lib/Analysis/VectorUtils.cpp (+4-4) - (modified) llvm/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp (+2-2) - (modified) llvm/lib/Target/AMDGPU/AMDGPUSplitModule.cpp (+3-2) - (modified) llvm/lib/Transforms/IPO/LowerTypeTests.cpp (+5-24) - (modified) llvm/lib/Transforms/Scalar/Float2Int.cpp (+6-4) - (modified) llvm/lib/Transforms/Scalar/LoopDistribute.cpp (+3-3) - (modified) llvm/lib/Transforms/Utils/SplitModule.cpp (+8-24) - (modified) llvm/test/TableGen/GlobalISelCombinerEmitter/type-inference.td (+1-1) - (modified) llvm/test/Transforms/LowerTypeTests/function-disjoint.ll (+6-6) - (modified) llvm/test/Transforms/LowerTypeTests/nonstring.ll (+1-1) - (modified) llvm/test/tools/llvm-split/preserve-locals.ll (+7-6) - (modified) llvm/test/tools/llvm-split/scc-const-alias.ll (+5-5) - (modified) llvm/test/tools/llvm-split/scc-global-alias.ll (+8-8) - (modified) llvm/utils/TableGen/GlobalISelCombinerEmitter.cpp (+2-1) ``````````diff diff --git a/clang/lib/Analysis/FlowSensitive/SimplifyConstraints.cpp b/clang/lib/Analysis/FlowSensitive/SimplifyConstraints.cpp index 69a90334c9df5..3c385ed8ef663 100644 --- a/clang/lib/Analysis/FlowSensitive/SimplifyConstraints.cpp +++ b/clang/lib/Analysis/FlowSensitive/SimplifyConstraints.cpp @@ -111,8 +111,8 @@ void simplifyConstraints(llvm::SetVector<const Formula *> &Constraints, FalseAtoms = projectToLeaders(FalseAtoms, EquivalentAtoms); llvm::DenseMap<Atom, const Formula *> Substitutions; - for (auto It = EquivalentAtoms.begin(); It != EquivalentAtoms.end(); ++It) { - Atom TheAtom = It->getData(); + for (const auto &E : EquivalentAtoms) { + Atom TheAtom = E->getData(); Atom Leader = EquivalentAtoms.getLeaderValue(TheAtom); if (TrueAtoms.contains(Leader)) { if (FalseAtoms.contains(Leader)) { @@ -152,9 +152,9 @@ void simplifyConstraints(llvm::SetVector<const Formula *> &Constraints, if (Info) { for (const auto &E : EquivalentAtoms) { - if (!E.isLeader()) + if (!E->isLeader()) continue; - Atom At = *EquivalentAtoms.findLeader(E); + Atom At = *EquivalentAtoms.findLeader(*E); if (TrueAtoms.contains(At) || FalseAtoms.contains(At)) continue; llvm::SmallVector<Atom> Atoms = diff --git a/llvm/include/llvm/ADT/EquivalenceClasses.h b/llvm/include/llvm/ADT/EquivalenceClasses.h index 46f186a71f5ce..906971baf74af 100644 --- a/llvm/include/llvm/ADT/EquivalenceClasses.h +++ b/llvm/include/llvm/ADT/EquivalenceClasses.h @@ -15,6 +15,7 @@ #ifndef LLVM_ADT_EQUIVALENCECLASSES_H #define LLVM_ADT_EQUIVALENCECLASSES_H +#include "llvm/ADT/SmallVector.h" #include <cassert> #include <cstddef> #include <cstdint> @@ -138,6 +139,9 @@ class EquivalenceClasses { /// ECValues, it just keeps the key as part of the value. std::set<ECValue, ECValueComparator> TheMapping; + /// List of all members, used to provide a determinstic iteration order. + SmallVector<const ECValue *> Members; + public: EquivalenceClasses() = default; EquivalenceClasses(const EquivalenceClasses &RHS) { @@ -146,9 +150,10 @@ class EquivalenceClasses { EquivalenceClasses &operator=(const EquivalenceClasses &RHS) { TheMapping.clear(); + Members.clear(); for (const auto &E : RHS) - if (E.isLeader()) { - member_iterator MI = RHS.member_begin(E); + if (E->isLeader()) { + member_iterator MI = RHS.member_begin(*E); member_iterator LeaderIt = member_begin(insert(*MI)); for (++MI; MI != member_end(); ++MI) unionSets(LeaderIt, member_begin(insert(*MI))); @@ -161,11 +166,10 @@ class EquivalenceClasses { // /// iterator* - Provides a way to iterate over all values in the set. - using iterator = - typename std::set<ECValue, ECValueComparator>::const_iterator; + using iterator = typename SmallVector<const ECValue *>::const_iterator; - iterator begin() const { return TheMapping.begin(); } - iterator end() const { return TheMapping.end(); } + iterator begin() const { return Members.begin(); } + iterator end() const { return Members.end(); } bool empty() const { return TheMapping.empty(); } @@ -173,7 +177,7 @@ class EquivalenceClasses { class member_iterator; member_iterator member_begin(const ECValue &ECV) const { // Only leaders provide anything to iterate over. - return member_iterator(ECV.isLeader() ? ECV.getLeader() : nullptr); + return member_iterator(ECV.isLeader() ? &ECV : nullptr); } member_iterator member_end() const { @@ -208,7 +212,7 @@ class EquivalenceClasses { unsigned getNumClasses() const { unsigned NC = 0; for (const auto &E : *this) - if (E.isLeader()) + if (E->isLeader()) ++NC; return NC; } @@ -219,7 +223,10 @@ class EquivalenceClasses { /// insert - Insert a new value into the union/find set, ignoring the request /// if the value already exists. const ECValue &insert(const ElemTy &Data) { - return *TheMapping.insert(ECValue(Data)).first; + auto I = TheMapping.insert(ECValue(Data)); + if (I.second) + Members.push_back(&*I.first); + return *I.first; } /// findLeader - Given a value in the set, return a member iterator for the diff --git a/llvm/lib/Analysis/VectorUtils.cpp b/llvm/lib/Analysis/VectorUtils.cpp index f57186589a325..663b961da848d 100644 --- a/llvm/lib/Analysis/VectorUtils.cpp +++ b/llvm/lib/Analysis/VectorUtils.cpp @@ -844,10 +844,10 @@ llvm::computeMinimumValueSizes(ArrayRef<BasicBlock *> Blocks, DemandedBits &DB, DBits[ECs.getOrInsertLeaderValue(I.first)] |= ~0ULL; for (const auto &E : ECs) { - if (!E.isLeader()) + if (!E->isLeader()) continue; uint64_t LeaderDemandedBits = 0; - for (Value *M : make_range(ECs.member_begin(E), ECs.member_end())) + for (Value *M : make_range(ECs.member_begin(*E), ECs.member_end())) LeaderDemandedBits |= DBits[M]; uint64_t MinBW = llvm::bit_width(LeaderDemandedBits); @@ -859,7 +859,7 @@ llvm::computeMinimumValueSizes(ArrayRef<BasicBlock *> Blocks, DemandedBits &DB, // indvars. // If we are required to shrink a PHI, abandon this entire equivalence class. bool Abort = false; - for (Value *M : make_range(ECs.member_begin(E), ECs.member_end())) + for (Value *M : make_range(ECs.member_begin(*E), ECs.member_end())) if (isa<PHINode>(M) && MinBW < M->getType()->getScalarSizeInBits()) { Abort = true; break; @@ -867,7 +867,7 @@ llvm::computeMinimumValueSizes(ArrayRef<BasicBlock *> Blocks, DemandedBits &DB, if (Abort) continue; - for (Value *M : make_range(ECs.member_begin(E), ECs.member_end())) { + for (Value *M : make_range(ECs.member_begin(*E), ECs.member_end())) { auto *MI = dyn_cast<Instruction>(M); if (!MI) continue; diff --git a/llvm/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp b/llvm/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp index c6d40cb00b252..218cded84d76b 100644 --- a/llvm/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp +++ b/llvm/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp @@ -368,9 +368,9 @@ bool AArch64A57FPLoadBalancing::runOnBasicBlock(MachineBasicBlock &MBB) { // Convert the EquivalenceClasses to a simpler set of sets. std::vector<std::vector<Chain*> > V; for (const auto &E : EC) { - if (!E.isLeader()) + if (!E->isLeader()) continue; - std::vector<Chain *> Cs(EC.member_begin(E), EC.member_end()); + std::vector<Chain *> Cs(EC.member_begin(*E), EC.member_end()); if (Cs.empty()) continue; V.push_back(std::move(Cs)); } diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSplitModule.cpp b/llvm/lib/Target/AMDGPU/AMDGPUSplitModule.cpp index 4a700bd213ed5..32472201cf9c2 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUSplitModule.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUSplitModule.cpp @@ -1017,11 +1017,12 @@ void RecursiveSearchSplitting::setupWorkList() { } for (const auto &Node : NodeEC) { - if (!Node.isLeader()) + if (!Node->isLeader()) continue; BitVector Cluster = SG.createNodesBitVector(); - for (auto MI = NodeEC.member_begin(Node); MI != NodeEC.member_end(); ++MI) { + for (auto MI = NodeEC.member_begin(*Node); MI != NodeEC.member_end(); + ++MI) { const SplitGraph::Node &N = SG.getNode(*MI); if (N.isGraphEntryPoint()) N.getDependencies(Cluster); diff --git a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp index 11f9f0271395b..fcd8918f1d9d7 100644 --- a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp +++ b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp @@ -2339,36 +2339,17 @@ bool LowerTypeTestsModule::lower() { if (GlobalClasses.empty()) return false; - // Build a list of disjoint sets ordered by their maximum global index for - // determinism. - std::vector<std::pair<GlobalClassesTy::iterator, unsigned>> Sets; - for (GlobalClassesTy::iterator I = GlobalClasses.begin(), - E = GlobalClasses.end(); - I != E; ++I) { - if (!I->isLeader()) + // For each disjoint set we found... + for (const auto &C : GlobalClasses) { + if (!C->isLeader()) continue; - ++NumTypeIdDisjointSets; - - unsigned MaxUniqueId = 0; - for (GlobalClassesTy::member_iterator MI = GlobalClasses.member_begin(*I); - MI != GlobalClasses.member_end(); ++MI) { - if (auto *MD = dyn_cast_if_present<Metadata *>(*MI)) - MaxUniqueId = std::max(MaxUniqueId, TypeIdInfo[MD].UniqueId); - else if (auto *BF = dyn_cast_if_present<ICallBranchFunnel *>(*MI)) - MaxUniqueId = std::max(MaxUniqueId, BF->UniqueId); - } - Sets.emplace_back(I, MaxUniqueId); - } - llvm::sort(Sets, llvm::less_second()); - // For each disjoint set we found... - for (const auto &S : Sets) { + ++NumTypeIdDisjointSets; // Build the list of type identifiers in this disjoint set. std::vector<Metadata *> TypeIds; std::vector<GlobalTypeMember *> Globals; std::vector<ICallBranchFunnel *> ICallBranchFunnels; - for (GlobalClassesTy::member_iterator MI = - GlobalClasses.member_begin(*S.first); + for (GlobalClassesTy::member_iterator MI = GlobalClasses.member_begin(*C); MI != GlobalClasses.member_end(); ++MI) { if (isa<Metadata *>(*MI)) TypeIds.push_back(cast<Metadata *>(*MI)); diff --git a/llvm/lib/Transforms/Scalar/Float2Int.cpp b/llvm/lib/Transforms/Scalar/Float2Int.cpp index 85c376c564d35..927877b3135e5 100644 --- a/llvm/lib/Transforms/Scalar/Float2Int.cpp +++ b/llvm/lib/Transforms/Scalar/Float2Int.cpp @@ -312,14 +312,16 @@ bool Float2IntPass::validateAndTransform(const DataLayout &DL) { // Iterate over every disjoint partition of the def-use graph. for (const auto &E : ECs) { - if (!E.isLeader()) + if (!E->isLeader()) continue; + ConstantRange R(MaxIntegerBW + 1, false); bool Fail = false; Type *ConvertedToTy = nullptr; // For every member of the partition, union all the ranges together. - for (auto MI = ECs.member_begin(E), ME = ECs.member_end(); MI != ME; ++MI) { + for (auto MI = ECs.member_begin(*E), ME = ECs.member_end(); MI != ME; + ++MI) { Instruction *I = *MI; auto SeenI = SeenInsts.find(I); if (SeenI == SeenInsts.end()) @@ -349,7 +351,7 @@ bool Float2IntPass::validateAndTransform(const DataLayout &DL) { // If the set was empty, or we failed, or the range is poisonous, // bail out. - if (ECs.member_begin(E) == ECs.member_end() || Fail || R.isFullSet() || + if (ECs.member_begin(*E) == ECs.member_end() || Fail || R.isFullSet() || R.isSignWrappedSet()) continue; assert(ConvertedToTy && "Must have set the convertedtoty by this point!"); @@ -389,7 +391,7 @@ bool Float2IntPass::validateAndTransform(const DataLayout &DL) { } } - for (auto MI = ECs.member_begin(E), ME = ECs.member_end(); MI != ME; ++MI) + for (auto MI = ECs.member_begin(*E), ME = ECs.member_end(); MI != ME; ++MI) convert(*MI, Ty); MadeChange = true; } diff --git a/llvm/lib/Transforms/Scalar/LoopDistribute.cpp b/llvm/lib/Transforms/Scalar/LoopDistribute.cpp index 5f03d854b51e6..e10d0c0defd96 100644 --- a/llvm/lib/Transforms/Scalar/LoopDistribute.cpp +++ b/llvm/lib/Transforms/Scalar/LoopDistribute.cpp @@ -386,11 +386,11 @@ class InstPartitionContainer { // Merge the member of an equivalence class into its class leader. This // makes the members empty. for (const auto &C : ToBeMerged) { - if (!C.isLeader()) + if (!C->isLeader()) continue; - auto PartI = C.getData(); - for (auto *PartJ : make_range(std::next(ToBeMerged.member_begin(C)), + auto PartI = C->getData(); + for (auto *PartJ : make_range(std::next(ToBeMerged.member_begin(*C)), ToBeMerged.member_end())) { PartJ->moveTo(*PartI); } diff --git a/llvm/lib/Transforms/Utils/SplitModule.cpp b/llvm/lib/Transforms/Utils/SplitModule.cpp index 507e3c7a42737..c39771733ee0d 100644 --- a/llvm/lib/Transforms/Utils/SplitModule.cpp +++ b/llvm/lib/Transforms/Utils/SplitModule.cpp @@ -170,40 +170,24 @@ static void findPartitions(Module &M, ClusterIDMapType &ClusterIDMap, for (unsigned i = 0; i < N; ++i) BalancingQueue.push(std::make_pair(i, 0)); - using SortType = std::pair<unsigned, ClusterMapType::iterator>; - - SmallVector<SortType, 64> Sets; SmallPtrSet<const GlobalValue *, 32> Visited; // To guarantee determinism, we have to sort SCC according to size. // When size is the same, use leader's name. - for (ClusterMapType::iterator I = GVtoClusterMap.begin(), - E = GVtoClusterMap.end(); - I != E; ++I) - if (I->isLeader()) - Sets.push_back( - std::make_pair(std::distance(GVtoClusterMap.member_begin(*I), - GVtoClusterMap.member_end()), - I)); - - llvm::sort(Sets, [](const SortType &a, const SortType &b) { - if (a.first == b.first) - return a.second->getData()->getName() > b.second->getData()->getName(); - else - return a.first > b.first; - }); - - for (auto &I : Sets) { + for (const auto &C : GVtoClusterMap) { + if (!C->isLeader()) + continue; + unsigned CurrentClusterID = BalancingQueue.top().first; unsigned CurrentClusterSize = BalancingQueue.top().second; BalancingQueue.pop(); LLVM_DEBUG(dbgs() << "Root[" << CurrentClusterID << "] cluster_size(" - << I.first << ") ----> " << I.second->getData()->getName() - << "\n"); + << std::distance(GVtoClusterMap.member_begin(*C), + GVtoClusterMap.member_end()) + << ") ----> " << C->getData()->getName() << "\n"); - for (ClusterMapType::member_iterator MI = - GVtoClusterMap.findLeader(*I.second); + for (ClusterMapType::member_iterator MI = GVtoClusterMap.findLeader(*C); MI != GVtoClusterMap.member_end(); ++MI) { if (!Visited.insert(*MI).second) continue; diff --git a/llvm/test/TableGen/GlobalISelCombinerEmitter/type-inference.td b/llvm/test/TableGen/GlobalISelCombinerEmitter/type-inference.td index ed4e0e411c7af..a965dc7ccdcad 100644 --- a/llvm/test/TableGen/GlobalISelCombinerEmitter/type-inference.td +++ b/llvm/test/TableGen/GlobalISelCombinerEmitter/type-inference.td @@ -50,7 +50,7 @@ def infer_complex_tempreg: GICombineRule < // CHECK-NEXT: Groups for __infer_variadic_outs_match_1: [dst, x] // CHECK-NEXT: Groups for __infer_variadic_outs_apply_0: [tmp, y] // CHECK-NEXT: Groups for __infer_variadic_outs_apply_1: -// CHECK-NEXT: Final Type Equivalence Classes: [tmp, dst, x, y] [vec] +// CHECK-NEXT: Final Type Equivalence Classes: [vec] [tmp, dst, x, y] // CHECK-NEXT: INFER: MachineOperand $tmp -> GITypeOf<$dst> // CHECK-NEXT: Apply patterns for rule infer_variadic_outs after inference: // CHECK-NEXT: (CodeGenInstructionPattern name:__infer_variadic_outs_apply_0 G_FNEG operands:[<def>GITypeOf<$dst>:$tmp, $y]) diff --git a/llvm/test/Transforms/LowerTypeTests/function-disjoint.ll b/llvm/test/Transforms/LowerTypeTests/function-disjoint.ll index 92281e274adf0..a3fdb3cad94ca 100644 --- a/llvm/test/Transforms/LowerTypeTests/function-disjoint.ll +++ b/llvm/test/Transforms/LowerTypeTests/function-disjoint.ll @@ -5,8 +5,8 @@ target datalayout = "e-p:64:64" -; X64: @f = alias void (), ptr @[[JT0:.*]] ; X64: @g = alias void (), ptr @[[JT1:.*]] +; X64: @f = alias void (), ptr @[[JT0:.*]] ; WASM32: private constant [0 x i8] zeroinitializer @0 = private unnamed_addr constant [2 x ptr] [ptr @f, ptr @g], align 16 @@ -30,20 +30,20 @@ declare i1 @llvm.type.test(ptr %ptr, metadata %bitset) nounwind readnone define i1 @foo(ptr %p) { ; X64: icmp eq i64 {{.*}}, ptrtoint (ptr @[[JT0]] to i64) - ; WASM32: icmp eq i64 {{.*}}, ptrtoint (ptr getelementptr (i8, ptr null, i64 1) to i64) + ; WASM32: icmp eq i64 {{.*}}, ptrtoint (ptr getelementptr (i8, ptr null, i64 2) to i64) %x = call i1 @llvm.type.test(ptr %p, metadata !"typeid1") ; X64: icmp eq i64 {{.*}}, ptrtoint (ptr @[[JT1]] to i64) - ; WASM32: icmp eq i64 {{.*}}, ptrtoint (ptr getelementptr (i8, ptr null, i64 2) to i64) + ; WASM32: icmp eq i64 {{.*}}, ptrtoint (ptr getelementptr (i8, ptr null, i64 1) to i64) %y = call i1 @llvm.type.test(ptr %p, metadata !"typeid2") %z = add i1 %x, %y ret i1 %z } -; X64: define private void @[[JT0]]() #{{.*}} align 8 { -; X64: call void asm sideeffect "jmp ${0:c}@plt\0Aint3\0Aint3\0Aint3\0A", "s"(ptr @f.cfi) - ; X64: define private void @[[JT1]]() #{{.*}} align 8 { ; X64: call void asm sideeffect "jmp ${0:c}@plt\0Aint3\0Aint3\0Aint3\0A", "s"(ptr @g.cfi) +; X64: define private void @[[JT0]]() #{{.*}} align 8 { +; X64: call void asm sideeffect "jmp ${0:c}@plt\0Aint3\0Aint3\0Aint3\0A", "s"(ptr @f.cfi) + ; WASM32: ![[I0]] = !{i64 1} ; WASM32: ![[I1]] = !{i64 2} diff --git a/llvm/test/Transforms/LowerTypeTests/nonstring.ll b/llvm/test/Transforms/LowerTypeTests/nonstring.ll index ff8cc52d48344..ff7189aa0189c 100644 --- a/llvm/test/Transforms/LowerTypeTests/nonstring.ll +++ b/llvm/test/Transforms/LowerTypeTests/nonstring.ll @@ -4,8 +4,8 @@ target datalayout = "e-p:32:32" -; CHECK: @[[ANAME:.*]] = private constant { i32 } ; CHECK: @[[BNAME:.*]] = private constant { [2 x i32] } +; CHECK: @[[ANAME:.*]] = private constant { i32 } @a = constant i32 1, !type !0 @b = constant [2 x i32] [i32 2, i32 3], !type !1 diff --git a/llvm/test/tools/llvm-split/preserve-locals.ll b/llvm/test/tools/llvm-split/preserve-locals.ll index d128daaf35dd7..ff0610bd65499 100644 --- a/llvm/test/tools/llvm-split/preserve-locals.ll +++ b/llvm/test/tools/llvm-split/preserve-locals.ll @@ -2,14 +2,15 @@ ; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s ; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s -; The local_var and local_func must not be separated. -; CHECK0: @local_var -; CHECK0: define internal fastcc void @local_func ; The main and a must not be separated. ; The main and local_func must not be together. -; CHECK1: @a -; CHECK1: define i32 @main -; CHECK1: declare dso_local fastcc void @local_func +; CHECK0: @a +; CHECK0: define i32 @main +; CHECK0: declare dso_local fastcc void @local_func + +; The local_var and local_func must not be separated. +; CHECK1: @local_var +; CHECK1: define internal fastcc void @local_func @a = internal global i32 0, align 4 @global_storage = common global i32 0, align 4 diff --git a/llvm/test/tools/llvm-split/scc-const-alias.ll b/llvm/test/tools/llvm-split/scc-const-alias.ll index 20670af416c44..9e66f38f50843 100644 --- a/llvm/test/tools/llvm-split/scc-const-alias.ll +++ b/llvm/test/tools/llvm-split/scc-const-alias.ll @@ -5,12 +5,12 @@ ; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 %s ; Checks are not critical here - verifier will assert if we fail. -; CHECK0: @g1 = global i32 99 -; CHECK0: @c1Alias = external global i8 -; CHECK0: @g1Alias = internal alias i8, ptr @g1 +; CHECK0: @g1 = external global i32 +; CHECK0: @c1Alias = internal alias i8, inttoptr (i64 42 to ptr) -; CHECK1: @g1 = external global i32 -; CHECK1: @c1Alias = internal alias i8, inttoptr (i64 42 to ptr) +; CHECK1: @g1 = global i32 99 +; CHECK1: @c1Alias = external global i8 +; CHECK1: @g1Alias = internal alias i8, ptr @g1 ; Third file is actually empty. ; CHECK2: @g1 = external global i32 diff --git a/llvm/test/tools/llvm-split/scc-global-alias.ll b/llvm/test/tools/llvm-split/scc-global-alias.ll index ee3b6a1c1ce1a..b3b52ccd535a0 100644 --- a/llvm/test/tools/llvm-split/scc-global-alias.ll +++ b/llvm/test/tools/llvm-split/scc-global-alias.ll @@ -5,16 +5,16 @@ ; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 %s ; Checks are not critical here - verifier will assert if we fail. -; CHECK0: @funInternal2Alias = alias -; CHECK0: @funExternal2Alias = alias -; CHECK0: define internal i32 @funInternal2 -; CHECK0: define i32 @funExternal2 +; CHECK0: @funInternalAlias = alias +; CHECK0: define internal i32 @funInternal -; CHECK1: @funInternalAlias = alias -; CHECK1: define internal i32 @funInternal +; CHECK1: @funExternalAlias = alias +; CHECK1: define... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/134075 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits