diff options
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/IPO/ConstantMerge.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Transforms/IPO/CrossDSOCFI.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Transforms/IPO/GlobalOpt.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/Transforms/IPO/LowerTypeTests.cpp | 14 | ||||
| -rw-r--r-- | llvm/lib/Transforms/IPO/MergeFunctions.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Instrumentation/Instrumentation.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/Local.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 2 | 
14 files changed, 39 insertions, 36 deletions
diff --git a/llvm/lib/Transforms/IPO/ConstantMerge.cpp b/llvm/lib/Transforms/IPO/ConstantMerge.cpp index 3fe6f5c8719..3cf839e397f 100644 --- a/llvm/lib/Transforms/IPO/ConstantMerge.cpp +++ b/llvm/lib/Transforms/IPO/ConstantMerge.cpp @@ -120,7 +120,7 @@ static void replace(Module &M, GlobalVariable *Old, GlobalVariable *New) {    // Bump the alignment if necessary.    if (Old->getAlignment() || New->getAlignment()) -    New->setAlignment(std::max(getAlignment(Old), getAlignment(New))); +    New->setAlignment(Align(std::max(getAlignment(Old), getAlignment(New))));    copyDebugLocMetadata(Old, New);    Old->replaceAllUsesWith(NewConstant); diff --git a/llvm/lib/Transforms/IPO/CrossDSOCFI.cpp b/llvm/lib/Transforms/IPO/CrossDSOCFI.cpp index 8b2842e18b5..5f3d0c2e373 100644 --- a/llvm/lib/Transforms/IPO/CrossDSOCFI.cpp +++ b/llvm/lib/Transforms/IPO/CrossDSOCFI.cpp @@ -108,7 +108,7 @@ void CrossDSOCFI::buildCFICheck(Module &M) {    // Take over the existing function. The frontend emits a weak stub so that the    // linker knows about the symbol; this pass replaces the function body.    F->deleteBody(); -  F->setAlignment(4096); +  F->setAlignment(Align(4096));    Triple T(M.getTargetTriple());    if (T.isARM() || T.isThumb()) diff --git a/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/llvm/lib/Transforms/IPO/GlobalOpt.cpp index feac1b60884..64709bababf 100644 --- a/llvm/lib/Transforms/IPO/GlobalOpt.cpp +++ b/llvm/lib/Transforms/IPO/GlobalOpt.cpp @@ -497,8 +497,8 @@ static GlobalVariable *SRAGlobal(GlobalVariable *GV, const DataLayout &DL) {        // had 256 byte alignment for example, something might depend on that:        // propagate info to each field.        uint64_t FieldOffset = Layout.getElementOffset(i); -      unsigned NewAlign = (unsigned)MinAlign(StartAlignment, FieldOffset); -      if (NewAlign > DL.getABITypeAlignment(STy->getElementType(i))) +      Align NewAlign(MinAlign(StartAlignment, FieldOffset)); +      if (NewAlign > Align(DL.getABITypeAlignment(STy->getElementType(i))))          NGV->setAlignment(NewAlign);        // Copy over the debug info for the variable. @@ -513,7 +513,7 @@ static GlobalVariable *SRAGlobal(GlobalVariable *GV, const DataLayout &DL) {      NewGlobals.reserve(NumElements);      auto ElTy = STy->getElementType();      uint64_t EltSize = DL.getTypeAllocSize(ElTy); -    unsigned EltAlign = DL.getABITypeAlignment(ElTy); +    Align EltAlign(DL.getABITypeAlignment(ElTy));      uint64_t FragmentSizeInBits = DL.getTypeAllocSizeInBits(ElTy);      for (unsigned i = 0, e = NumElements; i != e; ++i) {        Constant *In = Init->getAggregateElement(i); @@ -532,7 +532,7 @@ static GlobalVariable *SRAGlobal(GlobalVariable *GV, const DataLayout &DL) {        // Calculate the known alignment of the field.  If the original aggregate        // had 256 byte alignment for example, something might depend on that:        // propagate info to each field. -      unsigned NewAlign = (unsigned)MinAlign(StartAlignment, EltSize*i); +      Align NewAlign(MinAlign(StartAlignment, EltSize * i));        if (NewAlign > EltAlign)          NGV->setAlignment(NewAlign);        transferSRADebugInfo(GV, NGV, FragmentSizeInBits * i, FragmentSizeInBits, diff --git a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp index 36562961744..2dec366d70e 100644 --- a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp +++ b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp @@ -822,16 +822,16 @@ void LowerTypeTestsModule::buildBitSetsFromGlobalVariables(    std::vector<Constant *> GlobalInits;    const DataLayout &DL = M.getDataLayout();    DenseMap<GlobalTypeMember *, uint64_t> GlobalLayout; -  uint64_t MaxAlign = 0; +  Align MaxAlign;    uint64_t CurOffset = 0;    uint64_t DesiredPadding = 0;    for (GlobalTypeMember *G : Globals) {      auto *GV = cast<GlobalVariable>(G->getGlobal()); -    uint64_t Align = GV->getAlignment(); -    if (Align == 0) -      Align = DL.getABITypeAlignment(GV->getValueType()); -    MaxAlign = std::max(MaxAlign, Align); -    uint64_t GVOffset = alignTo(CurOffset + DesiredPadding, Align); +    MaybeAlign Alignment(GV->getAlignment()); +    if (!Alignment) +      Alignment = Align(DL.getABITypeAlignment(GV->getValueType())); +    MaxAlign = std::max(MaxAlign, *Alignment); +    uint64_t GVOffset = alignTo(CurOffset + DesiredPadding, *Alignment);      GlobalLayout[G] = GVOffset;      if (GVOffset != 0) {        uint64_t Padding = GVOffset - CurOffset; @@ -1363,7 +1363,7 @@ void LowerTypeTestsModule::createJumpTable(                           cast<Function>(Functions[I]->getGlobal()));    // Align the whole table by entry size. -  F->setAlignment(getJumpTableEntrySize()); +  F->setAlignment(Align(getJumpTableEntrySize()));    // Skip prologue.    // Disabled on win32 due to https://llvm.org/bugs/show_bug.cgi?id=28641#c3.    // Luckily, this function does not get any prologue even without the diff --git a/llvm/lib/Transforms/IPO/MergeFunctions.cpp b/llvm/lib/Transforms/IPO/MergeFunctions.cpp index 3a08069dcd4..8b9abaddc84 100644 --- a/llvm/lib/Transforms/IPO/MergeFunctions.cpp +++ b/llvm/lib/Transforms/IPO/MergeFunctions.cpp @@ -769,7 +769,7 @@ void MergeFunctions::writeAlias(Function *F, Function *G) {        PtrType->getElementType(), PtrType->getAddressSpace(),        G->getLinkage(), "", BitcastF, G->getParent()); -  F->setAlignment(std::max(F->getAlignment(), G->getAlignment())); +  F->setAlignment(MaybeAlign(std::max(F->getAlignment(), G->getAlignment())));    GA->takeName(G);    GA->setVisibility(G->getVisibility());    GA->setUnnamedAddr(GlobalValue::UnnamedAddr::Global); @@ -816,7 +816,7 @@ void MergeFunctions::mergeTwoFunctions(Function *F, Function *G) {      removeUsers(F);      F->replaceAllUsesWith(NewF); -    unsigned MaxAlignment = std::max(G->getAlignment(), NewF->getAlignment()); +    MaybeAlign MaxAlignment(std::max(G->getAlignment(), NewF->getAlignment()));      writeThunkOrAlias(F, G);      writeThunkOrAlias(F, NewF); diff --git a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp index 4055fe04999..e1578cc119f 100644 --- a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp +++ b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp @@ -1516,10 +1516,11 @@ void DevirtModule::rebuildGlobal(VTableBits &B) {    // Align the before byte array to the global's minimum alignment so that we    // don't break any alignment requirements on the global. -  unsigned Align = B.GV->getAlignment(); -  if (Align == 0) -    Align = M.getDataLayout().getABITypeAlignment(B.GV->getValueType()); -  B.Before.Bytes.resize(alignTo(B.Before.Bytes.size(), Align)); +  MaybeAlign Alignment(B.GV->getAlignment()); +  if (!Alignment) +    Alignment = +        Align(M.getDataLayout().getABITypeAlignment(B.GV->getValueType())); +  B.Before.Bytes.resize(alignTo(B.Before.Bytes.size(), Alignment));    // Before was stored in reverse order; flip it now.    for (size_t I = 0, Size = B.Before.Bytes.size(); I != Size / 2; ++I) @@ -1536,7 +1537,7 @@ void DevirtModule::rebuildGlobal(VTableBits &B) {                           GlobalVariable::PrivateLinkage, NewInit, "", B.GV);    NewGV->setSection(B.GV->getSection());    NewGV->setComdat(B.GV->getComdat()); -  NewGV->setAlignment(B.GV->getAlignment()); +  NewGV->setAlignment(MaybeAlign(B.GV->getAlignment()));    // Copy the original vtable's metadata to the anonymous global, adjusting    // offsets as required. diff --git a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp index ff0b7081946..d92ee11c2e1 100644 --- a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -2054,7 +2054,7 @@ void ModuleAddressSanitizer::InstrumentGlobalsCOFF(      unsigned SizeOfGlobalStruct = DL.getTypeAllocSize(Initializer->getType());      assert(isPowerOf2_32(SizeOfGlobalStruct) &&             "global metadata will not be padded appropriately"); -    Metadata->setAlignment(SizeOfGlobalStruct); +    Metadata->setAlignment(assumeAligned(SizeOfGlobalStruct));      SetComdatForGlobalMetadata(G, Metadata, "");    } @@ -2191,7 +2191,7 @@ void ModuleAddressSanitizer::InstrumentGlobalsWithMetadataArray(        M, ArrayOfGlobalStructTy, false, GlobalVariable::InternalLinkage,        ConstantArray::get(ArrayOfGlobalStructTy, MetadataInitializers), "");    if (Mapping.Scale > 3) -    AllGlobals->setAlignment(1ULL << Mapping.Scale); +    AllGlobals->setAlignment(Align(1ULL << Mapping.Scale));    IRB.CreateCall(AsanRegisterGlobals,                   {IRB.CreatePointerCast(AllGlobals, IntptrTy), @@ -2291,7 +2291,7 @@ bool ModuleAddressSanitizer::InstrumentGlobals(IRBuilder<> &IRB, Module &M,                             "", G, G->getThreadLocalMode());      NewGlobal->copyAttributesFrom(G);      NewGlobal->setComdat(G->getComdat()); -    NewGlobal->setAlignment(MinRZ); +    NewGlobal->setAlignment(MaybeAlign(MinRZ));      // Don't fold globals with redzones. ODR violation detector and redzone      // poisoning implicitly creates a dependence on the global's address, so it      // is no longer valid for it to be marked unnamed_addr. @@ -2359,7 +2359,7 @@ bool ModuleAddressSanitizer::InstrumentGlobals(IRBuilder<> &IRB, Module &M,        // Set meaningful attributes for indicator symbol.        ODRIndicatorSym->setVisibility(NewGlobal->getVisibility());        ODRIndicatorSym->setDLLStorageClass(NewGlobal->getDLLStorageClass()); -      ODRIndicatorSym->setAlignment(1); +      ODRIndicatorSym->setAlignment(Align::None());        ODRIndicator = ODRIndicatorSym;      } diff --git a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp index 1416dd24683..f87132ee475 100644 --- a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp @@ -1265,7 +1265,7 @@ void HWAddressSanitizer::instrumentGlobal(GlobalVariable *GV, uint8_t Tag) {    NewGV->setLinkage(GlobalValue::PrivateLinkage);    NewGV->copyMetadata(GV, 0);    NewGV->setAlignment( -      std::max(GV->getAlignment(), Mapping.getObjectAlignment())); +      MaybeAlign(std::max(GV->getAlignment(), Mapping.getObjectAlignment())));    // It is invalid to ICF two globals that have different tags. In the case    // where the size of the global is a multiple of the tag granularity the @@ -1370,7 +1370,7 @@ void HWAddressSanitizer::instrumentGlobals() {                           GlobalValue::PrivateLinkage, nullptr, kHwasanNoteName);    Note->setSection(".note.hwasan.globals");    Note->setComdat(NoteComdat); -  Note->setAlignment(4); +  Note->setAlignment(Align(4));    Note->setDSOLocal(true);    // The pointers in the note need to be relative so that the note ends up being diff --git a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp index 0b83abe5bc2..1f092a5f310 100644 --- a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp +++ b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp @@ -785,7 +785,7 @@ InstrProfiling::getOrCreateRegionCounters(InstrProfIncrementInst *Inc) {    CounterPtr->setVisibility(Visibility);    CounterPtr->setSection(        getInstrProfSectionName(IPSK_cnts, TT.getObjectFormat())); -  CounterPtr->setAlignment(8); +  CounterPtr->setAlignment(Align(8));    MaybeSetComdat(CounterPtr);    CounterPtr->setLinkage(Linkage); @@ -807,7 +807,7 @@ InstrProfiling::getOrCreateRegionCounters(InstrProfIncrementInst *Inc) {        ValuesVar->setVisibility(Visibility);        ValuesVar->setSection(            getInstrProfSectionName(IPSK_vals, TT.getObjectFormat())); -      ValuesVar->setAlignment(8); +      ValuesVar->setAlignment(Align(8));        MaybeSetComdat(ValuesVar);        ValuesPtrExpr =            ConstantExpr::getBitCast(ValuesVar, Type::getInt8PtrTy(Ctx)); @@ -840,7 +840,7 @@ InstrProfiling::getOrCreateRegionCounters(InstrProfIncrementInst *Inc) {                                    getVarName(Inc, getInstrProfDataVarPrefix()));    Data->setVisibility(Visibility);    Data->setSection(getInstrProfSectionName(IPSK_data, TT.getObjectFormat())); -  Data->setAlignment(INSTR_PROF_DATA_ALIGNMENT); +  Data->setAlignment(Align(INSTR_PROF_DATA_ALIGNMENT));    MaybeSetComdat(Data);    Data->setLinkage(Linkage); @@ -931,7 +931,7 @@ void InstrProfiling::emitNameData() {    // On COFF, it's important to reduce the alignment down to 1 to prevent the    // linker from inserting padding before the start of the names section or    // between names entries. -  NamesVar->setAlignment(1); +  NamesVar->setAlignment(Align::None());    UsedVars.push_back(NamesVar);    for (auto *NamePtr : ReferencedNames) diff --git a/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp b/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp index 3a63cda60b3..a6c2c9b464b 100644 --- a/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp +++ b/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp @@ -68,7 +68,8 @@ GlobalVariable *llvm::createPrivateGlobalForString(Module &M, StringRef Str,                           GlobalValue::PrivateLinkage, StrConst, NamePrefix);    if (AllowMerging)      GV->setUnnamedAddr(GlobalValue::UnnamedAddr::Global); -  GV->setAlignment(1);  // Strings may not be merged w/o setting align 1. +  GV->setAlignment(Align::None()); // Strings may not be merged w/o setting +                                   // alignment explicitly.    return GV;  } diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index f09081314eb..f8fa9cad03b 100644 --- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -652,8 +652,9 @@ GlobalVariable *ModuleSanitizerCoverage::CreateFunctionLocalArrayInSection(              GetOrCreateFunctionComdat(F, TargetTriple, CurModuleUniqueId))        Array->setComdat(Comdat);    Array->setSection(getSectionName(Section)); -  Array->setAlignment(Ty->isPointerTy() ? DL->getPointerSize() -                                        : Ty->getPrimitiveSizeInBits() / 8); +  Array->setAlignment(Align(Ty->isPointerTy() +                                ? DL->getPointerSize() +                                : Ty->getPrimitiveSizeInBits() / 8));    GlobalsToAppendToUsed.push_back(Array);    GlobalsToAppendToCompilerUsed.push_back(Array);    MDNode *MD = MDNode::get(F.getContext(), ValueAsMetadata::get(&F)); diff --git a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp index 4f5ae5000a9..917d1119dc6 100644 --- a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp +++ b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp @@ -1023,7 +1023,7 @@ bool LoopIdiomRecognize::processLoopStridedStore(                                              GlobalValue::PrivateLinkage,                                              PatternValue, ".memset_pattern");      GV->setUnnamedAddr(GlobalValue::UnnamedAddr::Global); // Ok to merge these. -    GV->setAlignment(16); +    GV->setAlignment(Align(16));      Value *PatternPtr = ConstantExpr::getBitCast(GV, Int8PtrTy);      NewCall = Builder.CreateCall(MSP, {BasePtr, PatternPtr, NumBytes});    } diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 94339c2ba00..5bcd05757ec 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -1171,7 +1171,7 @@ static unsigned enforceKnownAlignment(Value *V, unsigned Alignment,      if (!GO->canIncreaseAlignment())        return Alignment; -    GO->setAlignment(PrefAlign); +    GO->setAlignment(MaybeAlign(PrefAlign));      return PrefAlign;    } diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index 008abad181a..3a5e3293ed4 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -5085,7 +5085,7 @@ SwitchLookupTable::SwitchLookupTable(    Array->setUnnamedAddr(GlobalValue::UnnamedAddr::Global);    // Set the alignment to that of an array items. We will be only loading one    // value out of it. -  Array->setAlignment(DL.getPrefTypeAlignment(ValueType)); +  Array->setAlignment(Align(DL.getPrefTypeAlignment(ValueType)));    Kind = ArrayKind;  }  | 

