mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-20 14:29:27 +00:00
1. constants can never occur in the symbol table.
2. All function-level constants are now incorporated into the module-level constant pool, since the compaction table was removed. Eliminate extra work to check for them. This speeds up the bcwriter from 24.4s to 13.1s on 447.dealII and .73 -> .56s on kc++ in a release build. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34084 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ff4304f824
commit
ba6de4b1cf
@ -171,7 +171,6 @@ void SlotCalculator::processModule() {
|
|||||||
}
|
}
|
||||||
getOrCreateSlot(I->getType());
|
getOrCreateSlot(I->getType());
|
||||||
}
|
}
|
||||||
processSymbolTableConstants(&F->getValueSymbolTable());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert constants that are named at module level into the slot pool so that
|
// Insert constants that are named at module level into the slot pool so that
|
||||||
@ -233,15 +232,6 @@ void SlotCalculator::processValueSymbolTable(const ValueSymbolTable *VST) {
|
|||||||
getOrCreateSlot(VI->second);
|
getOrCreateSlot(VI->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SlotCalculator::processSymbolTableConstants(const ValueSymbolTable *VST) {
|
|
||||||
// Now do the constant values in all planes
|
|
||||||
for (ValueSymbolTable::const_iterator VI = VST->begin(), VE = VST->end();
|
|
||||||
VI != VE; ++VI)
|
|
||||||
if (isa<Constant>(VI->second) && !isa<GlobalValue>(VI->second))
|
|
||||||
getOrCreateSlot(VI->second);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SlotCalculator::incorporateFunction(const Function *F) {
|
void SlotCalculator::incorporateFunction(const Function *F) {
|
||||||
assert((ModuleLevel.empty() ||
|
assert((ModuleLevel.empty() ||
|
||||||
ModuleTypeLevel == 0) && "Module already incorporated!");
|
ModuleTypeLevel == 0) && "Module already incorporated!");
|
||||||
@ -270,14 +260,6 @@ void SlotCalculator::incorporateFunction(const Function *F) {
|
|||||||
for (constant_iterator CI = constant_begin(F), CE = constant_end(F);
|
for (constant_iterator CI = constant_begin(F), CE = constant_end(F);
|
||||||
CI != CE; ++CI)
|
CI != CE; ++CI)
|
||||||
getOrCreateSlot(*CI);
|
getOrCreateSlot(*CI);
|
||||||
|
|
||||||
// If there is a symbol table, it is possible that the user has names for
|
|
||||||
// constants that are not being used. In this case, we will have problems
|
|
||||||
// if we don't emit the constants now, because otherwise we will get
|
|
||||||
// symbol table references to constants not in the output. Scan for these
|
|
||||||
// constants now.
|
|
||||||
//
|
|
||||||
processSymbolTableConstants(&F->getValueSymbolTable());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SC_DEBUG("Inserting Instructions:\n");
|
SC_DEBUG("Inserting Instructions:\n");
|
||||||
|
@ -132,7 +132,6 @@ private:
|
|||||||
//
|
//
|
||||||
void processTypeSymbolTable(const TypeSymbolTable *ST);
|
void processTypeSymbolTable(const TypeSymbolTable *ST);
|
||||||
void processValueSymbolTable(const ValueSymbolTable *ST);
|
void processValueSymbolTable(const ValueSymbolTable *ST);
|
||||||
void processSymbolTableConstants(const ValueSymbolTable *ST);
|
|
||||||
|
|
||||||
// insertPrimitives - helper for constructors to insert primitive types.
|
// insertPrimitives - helper for constructors to insert primitive types.
|
||||||
void insertPrimitives();
|
void insertPrimitives();
|
||||||
|
@ -1112,8 +1112,6 @@ void BytecodeWriter::outputFunction(const Function *F) {
|
|||||||
// Get slot information about the function...
|
// Get slot information about the function...
|
||||||
Table.incorporateFunction(F);
|
Table.incorporateFunction(F);
|
||||||
|
|
||||||
outputConstants(true);
|
|
||||||
|
|
||||||
// Output all of the instructions in the body of the function
|
// Output all of the instructions in the body of the function
|
||||||
outputInstructions(F);
|
outputInstructions(F);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user