Revert D139836 "[Alignment][NFC] Remove deprecated GlobalObject::getAlignment"
authorGuillaume Chatelet <gchatelet@google.com>
Mon, 12 Dec 2022 15:04:03 +0000 (15:04 +0000)
committerGuillaume Chatelet <gchatelet@google.com>
Mon, 12 Dec 2022 15:05:16 +0000 (15:05 +0000)
This breaks lldb.

This reverts commit f3f15ca27fbb433ad5a65b1a1e0a071d2e9af505.

llvm/include/llvm/IR/GlobalObject.h
llvm/lib/IR/Globals.cpp
llvm/lib/Linker/LinkModules.cpp
llvm/lib/Object/IRSymtab.cpp
llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
llvm/lib/Transforms/IPO/MergeFunctions.cpp
llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
llvm/unittests/IR/ValueTest.cpp

index 2a32ca2..96a2703 100644 (file)
@@ -66,6 +66,12 @@ private:
 public:
   GlobalObject(const GlobalObject &) = delete;
 
+  /// FIXME: Remove this function once transition to Align is over.
+  uint64_t getAlignment() const {
+    MaybeAlign Align = getAlign();
+    return Align ? Align->value() : 0;
+  }
+
   /// Returns the alignment of the given variable or function.
   ///
   /// Note that for functions this is the alignment of the code, not the
index c208ab0..ac9b830 100644 (file)
@@ -124,7 +124,8 @@ void GlobalObject::setAlignment(MaybeAlign Align) {
   unsigned AlignmentData = encode(Align);
   unsigned OldData = getGlobalValueSubClassData();
   setGlobalValueSubClassData((OldData & ~AlignmentMask) | AlignmentData);
-  assert(getAlign() == Align && "Alignment representation error!");
+  assert(MaybeAlign(getAlignment()) == Align &&
+         "Alignment representation error!");
 }
 
 void GlobalObject::copyAttributesFrom(const GlobalObject *Src) {
index 2f5fac4..17c3f09 100644 (file)
@@ -352,12 +352,8 @@ bool ModuleLinker::linkIfNeeded(GlobalValue &GV,
         SGVar->setConstant(false);
       }
       if (DGVar->hasCommonLinkage() && SGVar->hasCommonLinkage()) {
-        MaybeAlign DAlign = DGVar->getAlign();
-        MaybeAlign SAlign = SGVar->getAlign();
-        MaybeAlign Align = std::nullopt;
-        if (DAlign || SAlign)
-          Align = std::max(DAlign.valueOrOne(), SAlign.valueOrOne());
-
+        MaybeAlign Align(
+            std::max(DGVar->getAlignment(), SGVar->getAlignment()));
         SGVar->setAlignment(Align);
         DGVar->setAlignment(Align);
       }
index 54ee000..5a7ecdb 100644 (file)
@@ -289,7 +289,7 @@ Error Builder::addSymbol(const ModuleSymbolTable &Msymtab,
                                      inconvertibleErrorCode());
     Uncommon().CommonSize =
         GV->getParent()->getDataLayout().getTypeAllocSize(GV->getValueType());
-    Uncommon().CommonAlign = GVar->getAlign() ? GVar->getAlign()->value() : 0;
+    Uncommon().CommonAlign = GVar->getAlignment();
   }
 
   const GlobalObject *GO = GV->getAliaseeObject();
index 1b79774..605b2d2 100644 (file)
@@ -843,7 +843,7 @@ bool PPCMIPeephole::simplifyCode() {
           if (SrcMI->getOperand(1).isGlobal()) {
             const GlobalObject *GO =
                 dyn_cast<GlobalObject>(SrcMI->getOperand(1).getGlobal());
-            if (GO && GO->getAlign() && *GO->getAlign() >= 4)
+            if (GO && GO->getAlignment() >= 4)
               IsWordAligned = true;
           } else if (SrcMI->getOperand(1).isImm()) {
             int64_t Value = SrcMI->getOperand(1).getImm();
index 2c02a39..b850591 100644 (file)
@@ -775,12 +775,7 @@ void MergeFunctions::writeAlias(Function *F, Function *G) {
   auto *GA = GlobalAlias::create(G->getValueType(), PtrType->getAddressSpace(),
                                  G->getLinkage(), "", BitcastF, G->getParent());
 
-  const MaybeAlign FAlign = F->getAlign();
-  const MaybeAlign GAlign = G->getAlign();
-  if (FAlign || GAlign)
-    F->setAlignment(std::max(FAlign.valueOrOne(), GAlign.valueOrOne()));
-  else
-    F->setAlignment(std::nullopt);
+  F->setAlignment(MaybeAlign(std::max(F->getAlignment(), G->getAlignment())));
   GA->takeName(G);
   GA->setVisibility(G->getVisibility());
   GA->setUnnamedAddr(GlobalValue::UnnamedAddr::Global);
@@ -827,15 +822,12 @@ void MergeFunctions::mergeTwoFunctions(Function *F, Function *G) {
     removeUsers(F);
     F->replaceAllUsesWith(NewF);
 
+    MaybeAlign MaxAlignment(std::max(G->getAlignment(), NewF->getAlignment()));
+
     writeThunkOrAlias(F, G);
     writeThunkOrAlias(F, NewF);
 
-    const MaybeAlign NewFAlign = NewF->getAlign();
-    const MaybeAlign GAlign = G->getAlign();
-    if (NewFAlign || GAlign)
-      F->setAlignment(std::max(NewFAlign.valueOrOne(), GAlign.valueOrOne()));
-    else
-      F->setAlignment(std::nullopt);
+    F->setAlignment(MaxAlignment);
     F->setLinkage(GlobalValue::PrivateLinkage);
     ++NumDoubleWeak;
     ++NumFunctionsMerged;
index 7f5826b..94aec14 100644 (file)
@@ -1759,7 +1759,7 @@ bool ModuleAddressSanitizer::shouldInstrumentGlobal(GlobalVariable *G) const {
   //   - Need to poison all copies, not just the main thread's one.
   if (G->isThreadLocal()) return false;
   // For now, just ignore this Global if the alignment is large.
-  if (G->getAlign() && *G->getAlign() > getMinRedzoneSizeForGlobal()) return false;
+  if (G->getAlignment() > getMinRedzoneSizeForGlobal()) return false;
 
   // For non-COFF targets, only instrument globals known to be defined by this
   // TU.
index 76a0b0c..9583406 100644 (file)
@@ -61,11 +61,9 @@ TEST(GlobalTest, CreateAddressSpace) {
                          GlobalVariable::NotThreadLocal,
                          1);
 
-  const Align kMaxAlignment(Value::MaximumAlignment);
-  EXPECT_TRUE(kMaxAlignment.value() == 4294967296ULL);
-  Dummy0->setAlignment(kMaxAlignment);
-  EXPECT_TRUE(Dummy0->getAlign());
-  EXPECT_EQ(*Dummy0->getAlign(), kMaxAlignment);
+  EXPECT_TRUE(Value::MaximumAlignment == 4294967296ULL);
+  Dummy0->setAlignment(Align(4294967296ULL));
+  EXPECT_EQ(Dummy0->getAlignment(), 4294967296ULL);
 
   // Make sure the address space isn't dropped when returning this.
   Constant *Dummy1 = M->getOrInsertGlobal("dummy", Int32Ty);