Index: llvm/lib/CodeGen/MachineBlockPlacement.cpp =================================================================== --- llvm/lib/CodeGen/MachineBlockPlacement.cpp +++ llvm/lib/CodeGen/MachineBlockPlacement.cpp @@ -3443,32 +3443,23 @@ ComputedEdges.clear(); ChainAllocator.DestroyAll(); - bool HasMaxBytesOverride = - MaxBytesForAlignmentOverride.getNumOccurrences() > 0; - - if (AlignAllBlock) + if (AlignAllBlock) { // Align all of the blocks in the function to a specific alignment. - for (MachineBasicBlock &MBB : MF) { - if (HasMaxBytesOverride) - MBB.setAlignment(Align(1ULL << AlignAllBlock), - MaxBytesForAlignmentOverride); - else - MBB.setAlignment(Align(1ULL << AlignAllBlock)); - } - else if (AlignAllNonFallThruBlocks) { + for (MachineBasicBlock &MBB : MF) + MBB.setAlignment(Align(1ULL << AlignAllBlock), MaxBytesForAlignment); + + } else if (AlignAllNonFallThruBlocks) { // Align all of the blocks that have no fall-through predecessors to a // specific alignment. for (auto MBI = std::next(MF.begin()), MBE = MF.end(); MBI != MBE; ++MBI) { auto LayoutPred = std::prev(MBI); - if (!LayoutPred->isSuccessor(&*MBI)) { - if (HasMaxBytesOverride) - MBI->setAlignment(Align(1ULL << AlignAllNonFallThruBlocks), - MaxBytesForAlignmentOverride); - else - MBI->setAlignment(Align(1ULL << AlignAllNonFallThruBlocks)); - } + if (LayoutPred->isSuccessor(&*MBI)) + continue; + MBI->setAlignment(Align(1ULL << AlignAllNonFallThruBlocks), + MaxBytesForAlignment); } } + if (ViewBlockLayoutWithBFI != GVDT_None && (ViewBlockFreqFuncName.empty() || F->getFunction().getName().equals(ViewBlockFreqFuncName))) { Index: llvm/test/CodeGen/AArch64/align-all-blocks.ll =================================================================== --- /dev/null +++ llvm/test/CodeGen/AArch64/align-all-blocks.ll @@ -0,0 +1,42 @@ +; RUN: llc -align-all-blocks=5 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-ALL +; RUN: llc -align-all-blocks=5 -max-bytes-for-alignment=0 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-NOLIMIT +; RUN: llc -align-all-nofallthru-blocks=5 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-NOFALLTHRU + +target triple = "aarch64-linux" + +declare void @g(...) + +define void @f(i1 %c) "tune-cpu"="neoverse-v1" { +; CHECK-LABEL: f: + +; CHECK-ALL: .p2align 5, , 16 +; CHECK-NOLIMIT: .p2align 5{{$}} +; CHECK-NOFALLTHRU-NOT: p2align +; CHECK: // %entry +entry: + br i1 %c, label %if.then, label %if.else + +; CHECK-ALL: .p2align 5, , 16 +; CHECK-NOLIMIT: .p2align 5 +; CHECK-NOFALLTHRU-NOT: p2align +; CHECK: // %if.then +if.then: + call void @g(i32 0) + br label %exit + +; CHECK-ALL: .p2align 5, , 16 +; CHECK-NOLIMIT: .p2align 5{{$}} +; CHECK-NOFALLTHRU: .p2align 5, , 16 +; CHECK: // %if.else +if.else: + call void @g(i32 1, i32 2) + br label %exit + +; CHECK-All: .p2align 5, , 16 +; CHECK-NOLIMIT: .p2align 5{{$}} +; CHECK-NOFALLTHRU-NOT: p2align +; CHECK: // %exit +exit: + call void @f(i32 3) + ret void +}