mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-14 17:34:41 +00:00
Two changes:
1. Functions do not make things incomplete, only variables 2. Constant global variables no longer need to be marked incomplete, because we are guaranteed that the initializer for the global will be in the graph we are hacking on now. This makes resolution of indirect calls happen a lot more in the bu pass, supports things like vtables and the C counterparts (giant constant arrays of function pointers), etc... Testcase here: test/Regression/Analysis/DSGraph/constant_globals.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11852 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
26b6dac640
commit
cf14e71c5e
@ -13,6 +13,7 @@
|
||||
|
||||
#include "llvm/Analysis/DSGraph.h"
|
||||
#include "llvm/Function.h"
|
||||
#include "llvm/GlobalVariable.h"
|
||||
#include "llvm/iOther.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
@ -1353,7 +1354,9 @@ void DSGraph::markIncompleteNodes(unsigned Flags) {
|
||||
if ((Flags & DSGraph::IgnoreGlobals) == 0)
|
||||
for (DSScalarMap::global_iterator I = ScalarMap.global_begin(),
|
||||
E = ScalarMap.global_end(); I != E; ++I)
|
||||
markIncompleteNode(ScalarMap[*I].getNode());
|
||||
if (GlobalVariable *GV = dyn_cast<GlobalVariable>(*I))
|
||||
if (!GV->isConstant())
|
||||
markIncompleteNode(ScalarMap[GV].getNode());
|
||||
}
|
||||
|
||||
static inline void killIfUselessEdge(DSNodeHandle &Edge) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user