summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2018-04-04 18:12:01 +0000
committerEric Fiselier <eric@efcs.ca>2018-04-04 18:12:01 +0000
commit0d5f3b0281bb939290b7e6f7c4e736ef8bf18969 (patch)
tree6af47e6441b36e4f97a3b15f03a1a2a74d7cb2bd /llvm/test/Transforms
parent71e54ccd064585614d4951b3573ec932b45f98c2 (diff)
downloadbcm5719-llvm-0d5f3b0281bb939290b7e6f7c4e736ef8bf18969.tar.gz
bcm5719-llvm-0d5f3b0281bb939290b7e6f7c4e736ef8bf18969.zip
[Analysis] Support aligned new/delete functions.
Summary: Clang's __builtin_operator_new/delete was recently taught about the aligned allocation overloads (r328134). This patch makes LLVM aware of them as well. This allows the compiler to perform certain optimizations including eliding new/delete calls. Reviewers: rsmith, majnemer, dblaikie, vsk, bkramer Reviewed By: bkramer Subscribers: ckennelly, llvm-commits Differential Revision: https://reviews.llvm.org/D44769 llvm-svn: 329215
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/InstCombine/malloc-free-delete.ll40
1 files changed, 40 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/malloc-free-delete.ll b/llvm/test/Transforms/InstCombine/malloc-free-delete.ll
index 04d3448fb0b..e66151025b5 100644
--- a/llvm/test/Transforms/InstCombine/malloc-free-delete.ll
+++ b/llvm/test/Transforms/InstCombine/malloc-free-delete.ll
@@ -173,9 +173,33 @@ define linkonce void @_ZdaPvj(i8* %p, i32) nobuiltin {
ret void
}
+
+; new(size_t, align_val_t)
+declare i8* @_ZnwmSt11align_val_t(i64, i64) nobuiltin
+declare i8* @_ZnwjSt11align_val_t(i32, i32) nobuiltin
+; new[](size_t, align_val_t)
+declare i8* @_ZnamSt11align_val_t(i64, i64) nobuiltin
+declare i8* @_ZnajSt11align_val_t(i32, i32) nobuiltin
+; new(size_t, align_val_t, nothrow)
+declare i8* @_ZnwmSt11align_val_tRKSt9nothrow_t(i64, i64, i8*) nobuiltin
+declare i8* @_ZnwjSt11align_val_tRKSt9nothrow_t(i32, i32, i8*) nobuiltin
+; new[](size_t, align_val_t, nothrow)
+declare i8* @_ZnamSt11align_val_tRKSt9nothrow_t(i64, i64, i8*) nobuiltin
+declare i8* @_ZnajSt11align_val_tRKSt9nothrow_t(i32, i32, i8*) nobuiltin
+; delete(void*, align_val_t)
+declare void @_ZdlPvSt11align_val_t(i8*, i64) nobuiltin
+; delete[](void*, align_val_t)
+declare void @_ZdaPvSt11align_val_t(i8*, i64) nobuiltin
+; delete(void*, align_val_t, nothrow)
+declare void @_ZdlPvSt11align_val_tRKSt9nothrow_t(i8*, i64, i8*) nobuiltin
+; delete[](void*, align_val_t, nothrow)
+declare void @_ZdaPvSt11align_val_tRKSt9nothrow_t(i8*, i64, i8*) nobuiltin
+
+
; CHECK-LABEL: @test8(
define void @test8() {
; CHECK-NOT: call
+ %nt = alloca i8
%nw = call i8* @_Znwm(i64 32) builtin
call void @_ZdlPv(i8* %nw) builtin
%na = call i8* @_Znam(i64 32) builtin
@@ -188,6 +212,22 @@ define void @test8() {
call void @_ZdaPvm(i8* %nam, i64 32) builtin
%naj = call i8* @_Znaj(i32 32) builtin
call void @_ZdaPvj(i8* %naj, i32 32) builtin
+ %nwa = call i8* @_ZnwmSt11align_val_t(i64 32, i64 8) builtin
+ call void @_ZdlPvSt11align_val_t(i8* %nwa, i64 8) builtin
+ %naa = call i8* @_ZnamSt11align_val_t(i64 32, i64 8) builtin
+ call void @_ZdaPvSt11align_val_t(i8* %naa, i64 8) builtin
+ %nwja = call i8* @_ZnwjSt11align_val_t(i32 32, i32 8) builtin
+ call void @_ZdlPvSt11align_val_t(i8* %nwja, i64 8) builtin
+ %naja = call i8* @_ZnajSt11align_val_t(i32 32, i32 8) builtin
+ call void @_ZdaPvSt11align_val_t(i8* %naja, i64 8) builtin
+ %nwat = call i8* @_ZnwmSt11align_val_tRKSt9nothrow_t(i64 32, i64 8, i8* %nt) builtin
+ call void @_ZdlPvSt11align_val_tRKSt9nothrow_t(i8* %nwat, i64 8, i8* %nt) builtin
+ %naat = call i8* @_ZnamSt11align_val_tRKSt9nothrow_t(i64 32, i64 8, i8* %nt) builtin
+ call void @_ZdaPvSt11align_val_tRKSt9nothrow_t(i8* %naat, i64 8, i8* %nt) builtin
+ %nwjat = call i8* @_ZnwjSt11align_val_tRKSt9nothrow_t(i32 32, i32 8, i8* %nt) builtin
+ call void @_ZdlPvSt11align_val_tRKSt9nothrow_t(i8* %nwjat, i64 8, i8* %nt) builtin
+ %najat = call i8* @_ZnajSt11align_val_tRKSt9nothrow_t(i32 32, i32 8, i8* %nt) builtin
+ call void @_ZdaPvSt11align_val_tRKSt9nothrow_t(i8* %najat, i64 8, i8* %nt) builtin
ret void
}
OpenPOWER on IntegriCloud