mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-27 14:34:58 +00:00
MemoryBuiltins: Reinstate optimizing (uninitialized) loads from operator new.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191315 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
085e23841e
commit
d44f9f2ff8
@ -31,12 +31,12 @@
|
||||
using namespace llvm;
|
||||
|
||||
enum AllocType {
|
||||
MallocLike = 1<<0, // allocates
|
||||
CallocLike = 1<<1, // allocates + bzero
|
||||
ReallocLike = 1<<2, // reallocates
|
||||
StrDupLike = 1<<3,
|
||||
OpNewLike = 1<<4, // allocates; never returns null
|
||||
AllocLike = MallocLike | CallocLike | StrDupLike | OpNewLike,
|
||||
OpNewLike = 1<<0, // allocates; never returns null
|
||||
MallocLike = 1<<1 | OpNewLike, // allocates; may return null
|
||||
CallocLike = 1<<2, // allocates + bzero
|
||||
ReallocLike = 1<<3, // reallocates
|
||||
StrDupLike = 1<<4,
|
||||
AllocLike = MallocLike | CallocLike | StrDupLike,
|
||||
AnyAlloc = AllocLike | ReallocLike
|
||||
};
|
||||
|
||||
@ -118,7 +118,7 @@ static const AllocFnsTy *getAllocationData(const Value *V, AllocType AllocTy,
|
||||
return 0;
|
||||
|
||||
const AllocFnsTy *FnData = &AllocationFnData[i];
|
||||
if ((FnData->AllocTy & AllocTy) == 0)
|
||||
if ((FnData->AllocTy & AllocTy) != FnData->AllocTy)
|
||||
return 0;
|
||||
|
||||
// Check function prototype.
|
||||
|
@ -7,7 +7,7 @@ target triple = "x86_64-apple-macosx10.8.0"
|
||||
|
||||
declare i8* @malloc(i64) nounwind
|
||||
|
||||
define noalias i8* @test() nounwind uwtable ssp {
|
||||
define noalias i8* @test1() nounwind uwtable ssp {
|
||||
entry:
|
||||
%call = tail call i8* @malloc(i64 100) nounwind
|
||||
%0 = load i8* %call, align 1
|
||||
@ -21,11 +21,36 @@ if.then: ; preds = %entry
|
||||
if.end: ; preds = %if.then, %entry
|
||||
ret i8* %call
|
||||
|
||||
; CHECK-LABEL: @test(
|
||||
; CHECK-LABEL: @test1(
|
||||
; CHECK-NOT: load
|
||||
; CHECK-NOT: icmp
|
||||
|
||||
; CHECK_NO_LIBCALLS-LABEL: @test(
|
||||
; CHECK_NO_LIBCALLS-LABEL: @test1(
|
||||
; CHECK_NO_LIBCALLS: load
|
||||
; CHECK_NO_LIBCALLS: icmp
|
||||
}
|
||||
|
||||
declare i8* @_Znwm(i64) nounwind
|
||||
|
||||
define noalias i8* @test2() nounwind uwtable ssp {
|
||||
entry:
|
||||
%call = tail call i8* @_Znwm(i64 100) nounwind
|
||||
%0 = load i8* %call, align 1
|
||||
%tobool = icmp eq i8 %0, 0
|
||||
br i1 %tobool, label %if.end, label %if.then
|
||||
|
||||
if.then: ; preds = %entry
|
||||
store i8 0, i8* %call, align 1
|
||||
br label %if.end
|
||||
|
||||
if.end: ; preds = %if.then, %entry
|
||||
ret i8* %call
|
||||
|
||||
; CHECK-LABEL: @test2(
|
||||
; CHECK-NOT: load
|
||||
; CHECK-NOT: icmp
|
||||
|
||||
; CHECK_NO_LIBCALLS-LABEL: @test2(
|
||||
; CHECK_NO_LIBCALLS: load
|
||||
; CHECK_NO_LIBCALLS: icmp
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user