mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 04:38:24 +00:00
Optimized usage of new SwitchInst case values (IntegersSubset type) in Local.cpp, Execution.cpp and BitcodeWriter.cpp.
I got about 1% of compile-time improvement on my machines (Ubuntu 11.10 i386 and Ubuntu 12.04 x64). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159076 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1157,19 +1157,38 @@ static void WriteInstruction(const Instruction &I, unsigned InstID,
|
||||
Vals64.push_back(SI.getNumCases());
|
||||
for (SwitchInst::CaseIt i = SI.case_begin(), e = SI.case_end();
|
||||
i != e; ++i) {
|
||||
IntegersSubset CaseRanges = i.getCaseValueEx();
|
||||
Vals64.push_back(CaseRanges.getNumItems());
|
||||
for (unsigned ri = 0, rn = CaseRanges.getNumItems(); ri != rn; ++ri) {
|
||||
IntegersSubset::Range r = CaseRanges.getItem(ri);
|
||||
bool IsSingleNumber = r.isSingleNumber();
|
||||
|
||||
Vals64.push_back(IsSingleNumber);
|
||||
|
||||
unsigned Code, Abbrev; // will unused.
|
||||
IntegersSubset& CaseRanges = i.getCaseValueEx();
|
||||
unsigned Code, Abbrev; // will unused.
|
||||
|
||||
if (CaseRanges.isSingleNumber()) {
|
||||
Vals64.push_back(1/*NumItems = 1*/);
|
||||
Vals64.push_back(true/*IsSingleNumber = true*/);
|
||||
EmitAPInt(Vals64, Code, Abbrev, CaseRanges.getSingleNumber(0), true);
|
||||
} else {
|
||||
|
||||
EmitAPInt(Vals64, Code, Abbrev, r.getLow(), true);
|
||||
if (!IsSingleNumber)
|
||||
EmitAPInt(Vals64, Code, Abbrev, r.getHigh(), true);
|
||||
Vals64.push_back(CaseRanges.getNumItems());
|
||||
|
||||
if (CaseRanges.isSingleNumbersOnly()) {
|
||||
for (unsigned ri = 0, rn = CaseRanges.getNumItems();
|
||||
ri != rn; ++ri) {
|
||||
|
||||
Vals64.push_back(true/*IsSingleNumber = true*/);
|
||||
|
||||
EmitAPInt(Vals64, Code, Abbrev,
|
||||
CaseRanges.getSingleNumber(ri), true);
|
||||
}
|
||||
} else
|
||||
for (unsigned ri = 0, rn = CaseRanges.getNumItems();
|
||||
ri != rn; ++ri) {
|
||||
IntegersSubset::Range r = CaseRanges.getItem(ri);
|
||||
bool IsSingleNumber = CaseRanges.isSingleNumber(ri);
|
||||
|
||||
Vals64.push_back(IsSingleNumber);
|
||||
|
||||
EmitAPInt(Vals64, Code, Abbrev, r.getLow(), true);
|
||||
if (!IsSingleNumber)
|
||||
EmitAPInt(Vals64, Code, Abbrev, r.getHigh(), true);
|
||||
}
|
||||
}
|
||||
Vals64.push_back(VE.getValueID(i.getCaseSuccessor()));
|
||||
}
|
||||
|
Reference in New Issue
Block a user