mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
Implement review feedback
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36564 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ee181bc899
commit
c6c98af9e5
@ -24,7 +24,7 @@
|
||||
<li><a href="#callingconv">Calling Conventions</a></li>
|
||||
<li><a href="#globalvars">Global Variables</a></li>
|
||||
<li><a href="#functionstructure">Functions</a></li>
|
||||
<li><a href="aliasstructure">Aliases</a>
|
||||
<li><a href="#aliasstructure">Aliases</a>
|
||||
<li><a href="#paramattrs">Parameter Attributes</a></li>
|
||||
<li><a href="#moduleasm">Module-Level Inline Assembly</a></li>
|
||||
<li><a href="#datalayout">Data Layout</a></li>
|
||||
|
@ -150,12 +150,12 @@ public:
|
||||
/// removeFromParent - This method unlinks 'this' from the containing module,
|
||||
/// but does not delete it.
|
||||
///
|
||||
virtual void removeFromParent();
|
||||
void removeFromParent();
|
||||
|
||||
/// eraseFromParent - This method unlinks 'this' from the containing module
|
||||
/// and deletes it.
|
||||
///
|
||||
virtual void eraseFromParent();
|
||||
void eraseFromParent();
|
||||
|
||||
|
||||
/// Get the underlying elements of the Function... the basic block list is
|
||||
|
@ -75,7 +75,10 @@ public:
|
||||
Constant* getAliasee() {
|
||||
return cast_or_null<Constant>(getOperand(0));
|
||||
}
|
||||
|
||||
/// getAliasedGlobal() - Aliasee can be either global or bitcast of
|
||||
/// global. This method retrives the global for both aliasee flavours.
|
||||
const GlobalValue* getAliasedGlobal() const;
|
||||
|
||||
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
static inline bool classof(const GlobalAlias *) { return true; }
|
||||
static inline bool classof(const Value *V) {
|
||||
|
@ -129,22 +129,13 @@ bool AsmPrinter::doFinalization(Module &M) {
|
||||
O << "\n";
|
||||
for (Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end();
|
||||
I!=E; ++I) {
|
||||
const Constant *Aliasee = dyn_cast_or_null<Constant>(I->getAliasee());
|
||||
assert(Aliasee && "Aliasee cannot be null");
|
||||
|
||||
std::string Name = Mang->getValueName(I);
|
||||
std::string Target;
|
||||
|
||||
if (const GlobalValue *GV = dyn_cast<GlobalValue>(Aliasee))
|
||||
if (const GlobalValue *GV = I->getAliasedGlobal())
|
||||
Target = Mang->getValueName(GV);
|
||||
else {
|
||||
const ConstantExpr *CE = 0;
|
||||
if ((CE = dyn_cast<ConstantExpr>(Aliasee)) &&
|
||||
(CE->getOpcode() == Instruction::BitCast))
|
||||
Target = Mang->getValueName(CE->getOperand(0));
|
||||
else
|
||||
assert(0 && "Unsupported aliasee");
|
||||
}
|
||||
else
|
||||
assert(0 && "Unsupported aliasee");
|
||||
|
||||
if (I->hasExternalLinkage())
|
||||
O << "\t.globl\t" << Name << "\n";
|
||||
|
@ -76,7 +76,7 @@ bool GlobalDCE::runOnModule(Module &M) {
|
||||
for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end();
|
||||
I != E; ++I) {
|
||||
// Aliases are always needed even if they are not used.
|
||||
MarkUsedGlobalsAsNeeded(cast<Constant>(I->getAliasee()));
|
||||
MarkUsedGlobalsAsNeeded(I->getAliasee());
|
||||
}
|
||||
|
||||
// Now that all globals which are needed are in the AliveGlobals set, we loop
|
||||
|
@ -926,8 +926,7 @@ void AssemblyWriter::printAlias(const GlobalAlias *GA) {
|
||||
assert(0 && "Invalid alias linkage");
|
||||
}
|
||||
|
||||
const Constant *Aliasee = dyn_cast_or_null<Constant>(GA->getAliasee());
|
||||
assert(Aliasee && "Aliasee cannot be null");
|
||||
const Constant *Aliasee = GA->getAliasee();
|
||||
|
||||
if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(Aliasee)) {
|
||||
printType(GV->getType());
|
||||
|
@ -12,6 +12,7 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Constants.h"
|
||||
#include "llvm/GlobalVariable.h"
|
||||
#include "llvm/GlobalAlias.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
@ -193,16 +194,36 @@ void GlobalAlias::eraseFromParent() {
|
||||
}
|
||||
|
||||
bool GlobalAlias::isDeclaration() const {
|
||||
const GlobalValue* AV = dyn_cast_or_null<const GlobalValue>(getAliasee());
|
||||
return (AV && AV->isDeclaration());
|
||||
const GlobalValue* AV = getAliasedGlobal();
|
||||
if (AV)
|
||||
return AV->isDeclaration();
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
void GlobalAlias::setAliasee(Constant *Aliasee)
|
||||
{
|
||||
if (Aliasee) {
|
||||
assert(Aliasee->getType() == getType() &&
|
||||
if (Aliasee)
|
||||
assert(Aliasee->getType() == getType() &&
|
||||
"Alias and aliasee types should match!");
|
||||
setOperand(0, Aliasee);
|
||||
}
|
||||
|
||||
setOperand(0, Aliasee);
|
||||
}
|
||||
|
||||
const GlobalValue *GlobalAlias::getAliasedGlobal() const {
|
||||
const Constant *C = getAliasee();
|
||||
if (C) {
|
||||
if (const GlobalValue *GV = dyn_cast<GlobalValue>(C))
|
||||
return GV;
|
||||
else {
|
||||
const ConstantExpr *CE = 0;
|
||||
if ((CE = dyn_cast<ConstantExpr>(Aliasee)) &&
|
||||
(CE->getOpcode() == Instruction::BitCast))
|
||||
return cast<GlobalValue>(CE->getOperand(0));
|
||||
else
|
||||
assert(0 && "Unsupported aliasee");
|
||||
}
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -321,7 +321,8 @@ void Verifier::visitGlobalAlias(GlobalAlias &GA) {
|
||||
|
||||
if (!isa<GlobalValue>(GA.getAliasee())) {
|
||||
const ConstantExpr *CE = dyn_cast<ConstantExpr>(GA.getAliasee());
|
||||
Assert1(CE && CE->getOpcode() == Instruction::BitCast,
|
||||
Assert1(CE && CE->getOpcode() == Instruction::BitCast &&
|
||||
isa<GlobalValue>(CE->getOperand(0)),
|
||||
"Aliasee should be either GlobalValue or bitcast of GlobalValue",
|
||||
&GA);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user