@@ -250,36 +250,25 @@ class RegionBindingsRef : public llvm::ImmutableMapRef<const MemRegion *,
250250 std::pair<const MemRegion *, ImmutableMap<BindingKey, SVal>>;
251251 using Binding = std::pair<BindingKey, SVal>;
252252
253- const auto MemSpaceBeforeRegionName = [&ToString](const Cluster *L,
254- const Cluster *R) {
255- if (isa<MemSpaceRegion>(L->first ) && !isa<MemSpaceRegion>(R->first ))
256- return true ;
257- if (!isa<MemSpaceRegion>(L->first ) && isa<MemSpaceRegion>(R->first ))
258- return false ;
259- return ToString (L->first ) < ToString (R->first );
253+ const auto ClusterSortKey = [&ToString](const Cluster *C) {
254+ const MemRegion *Key = C->first ;
255+ return std::tuple{isa<MemSpaceRegion>(Key), ToString (Key)};
260256 };
261257
262- const auto SymbolicBeforeOffset = [&ToString ](const BindingKey & L,
263- const BindingKey & R) {
264- if (L. hasSymbolicOffset () && !R. hasSymbolicOffset ())
265- return true ;
266- if (!L. hasSymbolicOffset () && R. hasSymbolicOffset ())
267- return false ;
268- if (L. hasSymbolicOffset () && R. hasSymbolicOffset ())
269- return ToString (L. getRegion ()) < ToString (R. getRegion ());
270- return L. getOffset () < R .getOffset ();
258+ const auto MemSpaceBeforeRegionName = [&ClusterSortKey ](const Cluster * L,
259+ const Cluster * R) {
260+ return ClusterSortKey (L) < ClusterSortKey (R);
261+ } ;
262+
263+ const auto BindingSortKey = [&ToString]( const Binding *BPtr) {
264+ const BindingKey &Key = BPtr-> first ;
265+ return std::tuple{Key. isDirect (), !Key. hasSymbolicOffset (),
266+ ToString (Key. getRegion ()), Key .getOffset ()} ;
271267 };
272268
273269 const auto DefaultBindingBeforeDirectBindings =
274- [&SymbolicBeforeOffset](const Binding *LPtr, const Binding *RPtr) {
275- const BindingKey &L = LPtr->first ;
276- const BindingKey &R = RPtr->first ;
277- if (L.isDefault () && !R.isDefault ())
278- return true ;
279- if (!L.isDefault () && R.isDefault ())
280- return false ;
281- assert (L.isDefault () == R.isDefault ());
282- return SymbolicBeforeOffset (L, R);
270+ [&BindingSortKey](const Binding *LPtr, const Binding *RPtr) {
271+ return BindingSortKey (LPtr) < BindingSortKey (RPtr);
283272 };
284273
285274 const auto AddrOf = [](const auto &Item) { return &Item; };
0 commit comments