mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
A dead malloc, a free(NULL) and a free(undef) are all trivially dead
instructions. This doesn't introduce any optimizations we weren't doing before (except potentially due to pass ordering issues), now passes will eliminate them sooner as part of their own cleanups. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142787 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
38af3d5a8d
commit
4a3935c27e
@ -28,6 +28,7 @@
|
||||
#include "llvm/Analysis/DIBuilder.h"
|
||||
#include "llvm/Analysis/Dominators.h"
|
||||
#include "llvm/Analysis/InstructionSimplify.h"
|
||||
#include "llvm/Analysis/MemoryBuiltins.h"
|
||||
#include "llvm/Analysis/ProfileInfo.h"
|
||||
#include "llvm/Analysis/ValueTracking.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
@ -257,6 +258,13 @@ bool llvm::isInstructionTriviallyDead(Instruction *I) {
|
||||
II->getIntrinsicID() == Intrinsic::lifetime_end)
|
||||
return isa<UndefValue>(II->getArgOperand(1));
|
||||
}
|
||||
|
||||
if (extractMallocCall(I)) return true;
|
||||
|
||||
if (CallInst *CI = isFreeCall(I))
|
||||
if (Constant *C = dyn_cast<Constant>(CI->getArgOperand(0)))
|
||||
return C->isNullValue() || isa<UndefValue>(C);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -257,5 +257,4 @@ define void @test20() {
|
||||
ret void
|
||||
}
|
||||
; CHECK: @test20
|
||||
; CHECK-NOT: store
|
||||
; CHECK: ret void
|
||||
; CHECK-NEXT: ret void
|
||||
|
Loading…
Reference in New Issue
Block a user