diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-05-06 16:48:58 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-05-06 16:48:58 +0000 |
commit | b8894488415a81bb6bdaf9851acacc93a4e7cfe2 (patch) | |
tree | 2492746ffe3883ef48a18427846a8634262594c2 /lib/IR | |
parent | bfc3f301b6a5390b990c4abb05d134ffe8bb59bb (diff) | |
download | llvm-b8894488415a81bb6bdaf9851acacc93a4e7cfe2.tar.gz llvm-b8894488415a81bb6bdaf9851acacc93a4e7cfe2.tar.bz2 llvm-b8894488415a81bb6bdaf9851acacc93a4e7cfe2.tar.xz |
Special case aliases in GlobalValue::getAlignment.
An alias has the address of what it points to, so it also has the same
alignment.
This allows a few optimizations to see past aliases for free.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208103 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/IR')
-rw-r--r-- | lib/IR/Globals.cpp | 7 | ||||
-rw-r--r-- | lib/IR/Verifier.cpp | 1 |
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/IR/Globals.cpp b/lib/IR/Globals.cpp index 76baa6202a..2265e4c2b7 100644 --- a/lib/IR/Globals.cpp +++ b/lib/IR/Globals.cpp @@ -63,6 +63,13 @@ void GlobalValue::copyAttributesFrom(const GlobalValue *Src) { setDLLStorageClass(Src->getDLLStorageClass()); } +unsigned GlobalValue::getAlignment() const { + if (auto *GA = dyn_cast<GlobalAlias>(this)) + return GA->getAliasedGlobal()->getAlignment(); + + return (1u << Alignment) >> 1; +} + void GlobalValue::setAlignment(unsigned Align) { assert((!isa<GlobalAlias>(this)) && "GlobalAlias should not have an alignment!"); diff --git a/lib/IR/Verifier.cpp b/lib/IR/Verifier.cpp index 0bc5c509eb..bc378aed16 100644 --- a/lib/IR/Verifier.cpp +++ b/lib/IR/Verifier.cpp @@ -477,7 +477,6 @@ void Verifier::visitGlobalAlias(const GlobalAlias &GA) { "Alias and aliasee types should match!", &GA); Assert1(!GA.hasUnnamedAddr(), "Alias cannot have unnamed_addr!", &GA); Assert1(!GA.hasSection(), "Alias cannot have a section!", &GA); - Assert1(!GA.getAlignment(), "Alias connot have an alignment", &GA); const Constant *Aliasee = GA.getAliasee(); const GlobalValue *GV = dyn_cast<GlobalValue>(Aliasee); |