mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Make MemoryBuiltins aware of TargetLibraryInfo.
This disables malloc-specific optimization when -fno-builtin (or -ffreestanding) is specified. This has been a problem for a long time but became more severe with the recent memory builtin improvements. Since the memory builtin functions are used everywhere, this required passing TLI in many places. This means that functions that now have an optional TLI argument, like RecursivelyDeleteTriviallyDeadFunctions, won't remove dead mallocs anymore if the TLI argument is missing. I've updated most passes to do the right thing. Fixes PR13694 and probably others. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162841 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
#include "llvm/Analysis/CallGraph.h"
|
||||
#include "llvm/Analysis/InlineCost.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
#include "llvm/Target/TargetLibraryInfo.h"
|
||||
#include "llvm/Transforms/IPO/InlinerPass.h"
|
||||
#include "llvm/Transforms/Utils/Cloning.h"
|
||||
#include "llvm/Transforms/Utils/Local.h"
|
||||
@@ -339,6 +340,7 @@ static bool InlineHistoryIncludes(Function *F, int InlineHistoryID,
|
||||
bool Inliner::runOnSCC(CallGraphSCC &SCC) {
|
||||
CallGraph &CG = getAnalysis<CallGraph>();
|
||||
const TargetData *TD = getAnalysisIfAvailable<TargetData>();
|
||||
const TargetLibraryInfo *TLI = getAnalysisIfAvailable<TargetLibraryInfo>();
|
||||
|
||||
SmallPtrSet<Function*, 8> SCCFunctions;
|
||||
DEBUG(dbgs() << "Inliner visiting SCC:");
|
||||
@@ -417,7 +419,7 @@ bool Inliner::runOnSCC(CallGraphSCC &SCC) {
|
||||
// just delete the call instead of trying to inline it, regardless of
|
||||
// size. This happens because IPSCCP propagates the result out of the
|
||||
// call and then we're left with the dead call.
|
||||
if (isInstructionTriviallyDead(CS.getInstruction())) {
|
||||
if (isInstructionTriviallyDead(CS.getInstruction(), TLI)) {
|
||||
DEBUG(dbgs() << " -> Deleting dead call: "
|
||||
<< *CS.getInstruction() << "\n");
|
||||
// Update the call graph by deleting the edge from Callee to Caller.
|
||||
|
Reference in New Issue
Block a user