Index: src/IceTargetLoweringX8632.cpp |
diff --git a/src/IceTargetLoweringX8632.cpp b/src/IceTargetLoweringX8632.cpp |
index 0896c47521218182a6ba81bba2d0a7fecc849be0..e7f5c5d8f53fad768daf3c49e1a5a780976adbdc 100644 |
--- a/src/IceTargetLoweringX8632.cpp |
+++ b/src/IceTargetLoweringX8632.cpp |
@@ -138,18 +138,10 @@ const uint32_t X86_LOG2_OF_MAX_STACK_SLOT_SIZE = 4; |
// The number of different NOP instructions |
const uint32_t X86_NUM_NOP_VARIANTS = 5; |
-// Value and Alignment are in bytes. Return Value adjusted to the next |
-// highest multiple of Alignment. |
-uint32_t applyAlignment(uint32_t Value, uint32_t Alignment) { |
- // power of 2 |
- assert((Alignment & (Alignment - 1)) == 0); |
- return (Value + Alignment - 1) & -Alignment; |
-} |
- |
// Value is in bytes. Return Value adjusted to the next highest multiple |
// of the stack alignment. |
uint32_t applyStackAlignment(uint32_t Value) { |
- return applyAlignment(Value, X86_STACK_ALIGNMENT_BYTES); |
+ return Utils::applyAlignment(Value, X86_STACK_ALIGNMENT_BYTES); |
} |
// In some cases, there are x-macros tables for both high-level and |
@@ -957,7 +949,7 @@ void TargetX8632::addProlog(CfgNode *Node) { |
assert(SpillAreaAlignmentBytes <= X86_STACK_ALIGNMENT_BYTES); |
uint32_t PaddingStart = X86_RET_IP_SIZE_BYTES + PreservedRegsSizeBytes; |
uint32_t SpillAreaStart = |
- applyAlignment(PaddingStart, SpillAreaAlignmentBytes); |
+ Utils::applyAlignment(PaddingStart, SpillAreaAlignmentBytes); |
SpillAreaPaddingBytes = SpillAreaStart - PaddingStart; |
SpillAreaSizeBytes += SpillAreaPaddingBytes; |
} |
@@ -968,7 +960,7 @@ void TargetX8632::addProlog(CfgNode *Node) { |
if (LocalsSlotsAlignmentBytes) { |
assert(LocalsSlotsAlignmentBytes <= SpillAreaAlignmentBytes); |
GlobalsAndSubsequentPaddingSize = |
- applyAlignment(GlobalsSize, LocalsSlotsAlignmentBytes); |
+ Utils::applyAlignment(GlobalsSize, LocalsSlotsAlignmentBytes); |
SpillAreaSizeBytes += GlobalsAndSubsequentPaddingSize - GlobalsSize; |
} |
@@ -1261,7 +1253,7 @@ void TargetX8632::lowerAlloca(const InstAlloca *Inst) { |
// restriction can be relaxed in some cases. |
NeedsStackAlignment = true; |
- // TODO(sehr,stichnot): minimize the number of adjustments of esp, etc. |
+ // TODO(stichnot): minimize the number of adjustments of esp, etc. |
Variable *esp = getPhysicalRegister(RegX8632::Reg_esp); |
Operand *TotalSize = legalize(Inst->getSizeInBytes()); |
Variable *Dest = Inst->getDest(); |
@@ -1271,17 +1263,17 @@ void TargetX8632::lowerAlloca(const InstAlloca *Inst) { |
AlignmentParam = std::max(AlignmentParam, 1u); |
// LLVM enforces power of 2 alignment. |
- assert((AlignmentParam & (AlignmentParam - 1)) == 0); |
- assert((X86_STACK_ALIGNMENT_BYTES & (X86_STACK_ALIGNMENT_BYTES - 1)) == 0); |
+ assert(llvm::isPowerOf2_32(AlignmentParam)); |
+ assert(llvm::isPowerOf2_32(X86_STACK_ALIGNMENT_BYTES)); |
uint32_t Alignment = std::max(AlignmentParam, X86_STACK_ALIGNMENT_BYTES); |
if (Alignment > X86_STACK_ALIGNMENT_BYTES) { |
_and(esp, Ctx->getConstantInt32(-Alignment)); |
} |
- if (ConstantInteger32 *ConstantTotalSize = |
+ if (const auto *ConstantTotalSize = |
llvm::dyn_cast<ConstantInteger32>(TotalSize)) { |
uint32_t Value = ConstantTotalSize->getValue(); |
- Value = applyAlignment(Value, Alignment); |
+ Value = Utils::applyAlignment(Value, Alignment); |
_sub(esp, Ctx->getConstantInt32(Value)); |
} else { |
// Non-constant sizes need to be adjusted to the next highest |