mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
Add -alias and -ralias options to match what we have for functions and
globals. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166909 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9cb90e7c15
commit
ca88ceea52
@ -1,5 +1,7 @@
|
|||||||
; RUN: llvm-extract -func foo -S < %s | FileCheck %s
|
; RUN: llvm-extract -func foo -S < %s | FileCheck %s
|
||||||
; RUN: llvm-extract -delete -func foo -S < %s | FileCheck --check-prefix=DELETE %s
|
; RUN: llvm-extract -delete -func foo -S < %s | FileCheck --check-prefix=DELETE %s
|
||||||
|
; RUN: llvm-extract -alias zeda0 -S < %s | FileCheck --check-prefix=ALIAS %s
|
||||||
|
; RUN: llvm-extract -ralias .*bar -S < %s | FileCheck --check-prefix=ALIASRE %s
|
||||||
|
|
||||||
; Both aliases should be converted to declarations
|
; Both aliases should be converted to declarations
|
||||||
; CHECK: @zeda0 = external global i32
|
; CHECK: @zeda0 = external global i32
|
||||||
@ -20,6 +22,13 @@
|
|||||||
; DELETE-NEXT: ret void
|
; DELETE-NEXT: ret void
|
||||||
; DELETE-NEXT: }
|
; DELETE-NEXT: }
|
||||||
|
|
||||||
|
; ALIAS: @zed = external global i32
|
||||||
|
; ALIAS: @zeda0 = alias i32* @zed
|
||||||
|
|
||||||
|
; ALIASRE: @a0a0bar = alias void ()* @a0bar
|
||||||
|
; ALIASRE: @a0bar = alias void ()* @bar
|
||||||
|
; ALIASRE: declare void @bar()
|
||||||
|
|
||||||
@zed = global i32 0
|
@zed = global i32 0
|
||||||
@zeda0 = alias i32* @zed
|
@zeda0 = alias i32* @zed
|
||||||
|
|
||||||
|
@ -59,6 +59,19 @@ ExtractRegExpFuncs("rfunc", cl::desc("Specify function(s) to extract using a "
|
|||||||
"regular expression"),
|
"regular expression"),
|
||||||
cl::ZeroOrMore, cl::value_desc("rfunction"));
|
cl::ZeroOrMore, cl::value_desc("rfunction"));
|
||||||
|
|
||||||
|
// ExtractAlias - The alias to extract from the module.
|
||||||
|
static cl::list<std::string>
|
||||||
|
ExtractAliases("alias", cl::desc("Specify alias to extract"),
|
||||||
|
cl::ZeroOrMore, cl::value_desc("alias"));
|
||||||
|
|
||||||
|
|
||||||
|
// ExtractRegExpAliases - The aliases, matched via regular expression, to
|
||||||
|
// extract from the module.
|
||||||
|
static cl::list<std::string>
|
||||||
|
ExtractRegExpAliases("ralias", cl::desc("Specify alias(es) to extract using a "
|
||||||
|
"regular expression"),
|
||||||
|
cl::ZeroOrMore, cl::value_desc("ralias"));
|
||||||
|
|
||||||
// ExtractGlobals - The globals to extract from the module.
|
// ExtractGlobals - The globals to extract from the module.
|
||||||
static cl::list<std::string>
|
static cl::list<std::string>
|
||||||
ExtractGlobals("glob", cl::desc("Specify global to extract"),
|
ExtractGlobals("glob", cl::desc("Specify global to extract"),
|
||||||
@ -97,6 +110,40 @@ int main(int argc, char **argv) {
|
|||||||
// Use SetVector to avoid duplicates.
|
// Use SetVector to avoid duplicates.
|
||||||
SetVector<GlobalValue *> GVs;
|
SetVector<GlobalValue *> GVs;
|
||||||
|
|
||||||
|
// Figure out which aliases we should extract.
|
||||||
|
for (size_t i = 0, e = ExtractAliases.size(); i != e; ++i) {
|
||||||
|
GlobalAlias *GA = M->getNamedAlias(ExtractAliases[i]);
|
||||||
|
if (!GA) {
|
||||||
|
errs() << argv[0] << ": program doesn't contain alias named '"
|
||||||
|
<< ExtractAliases[i] << "'!\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
GVs.insert(GA);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract aliases via regular expression matching.
|
||||||
|
for (size_t i = 0, e = ExtractRegExpAliases.size(); i != e; ++i) {
|
||||||
|
std::string Error;
|
||||||
|
Regex RegEx(ExtractRegExpAliases[i]);
|
||||||
|
if (!RegEx.isValid(Error)) {
|
||||||
|
errs() << argv[0] << ": '" << ExtractRegExpAliases[i] << "' "
|
||||||
|
"invalid regex: " << Error;
|
||||||
|
}
|
||||||
|
bool match = false;
|
||||||
|
for (Module::alias_iterator GA = M->alias_begin(), E = M->alias_end();
|
||||||
|
GA != E; GA++) {
|
||||||
|
if (RegEx.match(GA->getName())) {
|
||||||
|
GVs.insert(&*GA);
|
||||||
|
match = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!match) {
|
||||||
|
errs() << argv[0] << ": program doesn't contain global named '"
|
||||||
|
<< ExtractRegExpAliases[i] << "'!\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Figure out which globals we should extract.
|
// Figure out which globals we should extract.
|
||||||
for (size_t i = 0, e = ExtractGlobals.size(); i != e; ++i) {
|
for (size_t i = 0, e = ExtractGlobals.size(); i != e; ++i) {
|
||||||
GlobalValue *GV = M->getNamedGlobal(ExtractGlobals[i]);
|
GlobalValue *GV = M->getNamedGlobal(ExtractGlobals[i]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user