mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
Add -alias and -ralias options to match what we have for functions and
globals. llvm-svn: 166909
This commit is contained in:
parent
c460831626
commit
f030658478
@ -1,5 +1,7 @@
|
||||
; 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 -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
|
||||
; CHECK: @zeda0 = external global i32
|
||||
@ -20,6 +22,13 @@
|
||||
; DELETE-NEXT: ret void
|
||||
; 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
|
||||
@zeda0 = alias i32* @zed
|
||||
|
||||
|
@ -59,6 +59,19 @@ ExtractRegExpFuncs("rfunc", cl::desc("Specify function(s) to extract using a "
|
||||
"regular expression"),
|
||||
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.
|
||||
static cl::list<std::string>
|
||||
ExtractGlobals("glob", cl::desc("Specify global to extract"),
|
||||
@ -97,6 +110,40 @@ int main(int argc, char **argv) {
|
||||
// Use SetVector to avoid duplicates.
|
||||
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.
|
||||
for (size_t i = 0, e = ExtractGlobals.size(); i != e; ++i) {
|
||||
GlobalValue *GV = M->getNamedGlobal(ExtractGlobals[i]);
|
||||
|
Loading…
Reference in New Issue
Block a user