[PATCH] D65748: [LLVM][Alignment] Introduce Alignment In GlobalObject
Guillaume Chatelet via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 5 07:40:23 PDT 2019
gchatelet created this revision.
gchatelet added a reviewer: jfb.
Herald added subscribers: llvm-commits, dexonsmith, hiraditya.
Herald added a project: LLVM.
This is patch is part of a serie to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D65748
Files:
llvm/include/llvm/IR/GlobalObject.h
llvm/include/llvm/Support/Alignment.h
llvm/lib/IR/Globals.cpp
llvm/unittests/IR/ValueTest.cpp
llvm/unittests/Support/AlignmentTest.cpp
Index: llvm/unittests/Support/AlignmentTest.cpp
===================================================================
--- llvm/unittests/Support/AlignmentTest.cpp
+++ llvm/unittests/Support/AlignmentTest.cpp
@@ -256,7 +256,7 @@
EXPECT_DEATH((Align(0)), "Value must not be 0");
for (uint64_t Value : getNonPowerOfTwo()) {
EXPECT_DEATH((Align(Value)), "Alignment is not a power of 2");
- EXPECT_DEATH((MaybeAlign(Value)), "Alignment is not 0 or a power of 2");
+ EXPECT_DEATH((MaybeAlign(Value)), "Alignment is not 0 nor a power of 2");
}
}
Index: llvm/unittests/IR/ValueTest.cpp
===================================================================
--- llvm/unittests/IR/ValueTest.cpp
+++ llvm/unittests/IR/ValueTest.cpp
@@ -99,7 +99,8 @@
Constant::getAllOnesValue(Int32Ty), "var", nullptr,
GlobalVariable::NotThreadLocal, 1);
- EXPECT_DEATH(Var->setAlignment(536870913U), "Alignment is not a power of 2");
+ EXPECT_DEATH(Var->setAlignment(536870913U),
+ "Alignment is not 0 nor a power of 2");
EXPECT_DEATH(Var->setAlignment(1073741824U),
"Alignment is greater than MaximumAlignment");
}
Index: llvm/lib/IR/Globals.cpp
===================================================================
--- llvm/lib/IR/Globals.cpp
+++ llvm/lib/IR/Globals.cpp
@@ -114,13 +114,17 @@
}
void GlobalObject::setAlignment(unsigned Align) {
- assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!");
- assert(Align <= MaximumAlignment &&
- "Alignment is greater than MaximumAlignment!");
- unsigned AlignmentData = Log2_32(Align) + 1;
+ setAlignment(MaybeAlign(Align));
+}
+
+void GlobalObject::setAlignment(MaybeAlign Align) {
+ assert(!Align || Align <= MaximumAlignment &&
+ "Alignment is greater than MaximumAlignment!");
+ unsigned AlignmentData = encode(Align);
unsigned OldData = getGlobalValueSubClassData();
setGlobalValueSubClassData((OldData & ~AlignmentMask) | AlignmentData);
- assert(getAlignment() == Align && "Alignment representation error!");
+ assert(MaybeAlign(getAlignment()) == Align &&
+ "Alignment representation error!");
}
void GlobalObject::copyAttributesFrom(const GlobalObject *Src) {
Index: llvm/include/llvm/Support/Alignment.h
===================================================================
--- llvm/include/llvm/Support/Alignment.h
+++ llvm/include/llvm/Support/Alignment.h
@@ -101,7 +101,7 @@
explicit MaybeAlign(uint64_t Value) {
assert((Value == 0 || llvm::isPowerOf2_64(Value)) &&
- "Alignment is not 0 or a power of 2");
+ "Alignment is not 0 nor a power of 2");
if (Value)
emplace(Value);
}
Index: llvm/include/llvm/IR/GlobalObject.h
===================================================================
--- llvm/include/llvm/IR/GlobalObject.h
+++ llvm/include/llvm/IR/GlobalObject.h
@@ -17,6 +17,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/Value.h"
+#include "llvm/Support/Alignment.h"
#include <string>
#include <utility>
@@ -58,9 +59,13 @@
unsigned getAlignment() const {
unsigned Data = getGlobalValueSubClassData();
unsigned AlignmentData = Data & AlignmentMask;
- return (1u << AlignmentData) >> 1;
+ MaybeAlign Align = decodeMaybeAlign(AlignmentData);
+ return Align ? Align->value() : 0;
}
+
+ /// Prefer the setter taking a MaybeAlign, this one is being phased out.
void setAlignment(unsigned Align);
+ void setAlignment(MaybeAlign Align);
unsigned getGlobalObjectSubClassData() const {
unsigned ValueData = getGlobalValueSubClassData();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65748.213364.patch
Type: text/x-patch
Size: 3682 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190805/669155e1/attachment.bin>
More information about the llvm-commits
mailing list