mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-24 13:06:56 +00:00
8e0d1c03ca
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
32 lines
976 B
LLVM
32 lines
976 B
LLVM
; RUN: opt -S -basicaa -gvn < %s | FileCheck %s
|
|
; RUN: opt -S -basicaa -gvn -disable-simplify-libcalls < %s | FileCheck %s -check-prefix=CHECK_NO_LIBCALLS
|
|
; PR13694
|
|
|
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-apple-macosx10.8.0"
|
|
|
|
declare i8* @malloc(i64) nounwind
|
|
|
|
define noalias i8* @test() nounwind uwtable ssp {
|
|
entry:
|
|
%call = tail call i8* @malloc(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: @test
|
|
; CHECK-NOT: load
|
|
; CHECK-NOT: icmp
|
|
|
|
; CHECK_NO_LIBCALLS: @test
|
|
; CHECK_NO_LIBCALLS: load
|
|
; CHECK_NO_LIBCALLS: icmp
|
|
}
|