From e05bcc80b38b696949cf22ac68e120c78505c003 Mon Sep 17 00:00:00 2001 From: David Bolvansky Date: Tue, 27 Aug 2019 11:41:03 +0000 Subject: [PATCH] [NFC] Added tests for D66651 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370046 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Transforms/InstCombine/deref-alloc-fns.ll | 181 ++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 test/Transforms/InstCombine/deref-alloc-fns.ll diff --git a/test/Transforms/InstCombine/deref-alloc-fns.ll b/test/Transforms/InstCombine/deref-alloc-fns.ll new file mode 100644 index 00000000000..ae93e3fcc67 --- /dev/null +++ b/test/Transforms/InstCombine/deref-alloc-fns.ll @@ -0,0 +1,181 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt -instcombine -S < %s | FileCheck %s + +declare noalias i8* @malloc(i64) +declare noalias i8* @calloc(i64, i64) +declare noalias i8* @realloc(i8* nocapture, i64) +declare noalias nonnull i8* @_Znam(i64) ; throwing version of 'new' + +define noalias i8* @malloc_nonconstant_size(i64 %n) { +; CHECK-LABEL: @malloc_nonconstant_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @malloc(i64 [[N:%.*]]) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @malloc(i64 %n) + ret i8* %call +} + +define noalias i8* @malloc_constant_size() { +; CHECK-LABEL: @malloc_constant_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @malloc(i64 40) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @malloc(i64 40) + ret i8* %call +} + +define noalias i8* @malloc_constant_size2() { +; CHECK-LABEL: @malloc_constant_size2( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias dereferenceable_or_null(80) i8* @malloc(i64 40) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias dereferenceable_or_null(80) i8* @malloc(i64 40) + ret i8* %call +} + +define noalias i8* @malloc_constant_size3() { +; CHECK-LABEL: @malloc_constant_size3( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias dereferenceable(80) i8* @malloc(i64 40) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias dereferenceable(80) i8* @malloc(i64 40) + ret i8* %call +} + + +define noalias i8* @malloc_constant_zero_size() { +; CHECK-LABEL: @malloc_constant_zero_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @malloc(i64 0) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @malloc(i64 0) + ret i8* %call +} + +define noalias i8* @realloc_nonconstant_size(i8* %p, i64 %n) { +; CHECK-LABEL: @realloc_nonconstant_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @realloc(i8* [[P:%.*]], i64 [[N:%.*]]) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @realloc(i8* %p, i64 %n) + ret i8* %call +} + +define noalias i8* @realloc_constant_zero_size(i8* %p) { +; CHECK-LABEL: @realloc_constant_zero_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @realloc(i8* [[P:%.*]], i64 0) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @realloc(i8* %p, i64 0) + ret i8* %call +} + +define noalias i8* @realloc_constant_size(i8* %p) { +; CHECK-LABEL: @realloc_constant_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @realloc(i8* [[P:%.*]], i64 40) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @realloc(i8* %p, i64 40) + ret i8* %call +} + +define noalias i8* @calloc_nonconstant_size(i64 %n) { +; CHECK-LABEL: @calloc_nonconstant_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @calloc(i64 1, i64 [[N:%.*]]) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @calloc(i64 1, i64 %n) + ret i8* %call +} + +define noalias i8* @calloc_nonconstant_size2(i64 %n) { +; CHECK-LABEL: @calloc_nonconstant_size2( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @calloc(i64 [[N:%.*]], i64 0) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @calloc(i64 %n, i64 0) + ret i8* %call +} + +define noalias i8* @calloc_nonconstant_size3(i64 %n) { +; CHECK-LABEL: @calloc_nonconstant_size3( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @calloc(i64 [[N:%.*]], i64 [[N]]) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @calloc(i64 %n, i64 %n) + ret i8* %call +} + +define noalias i8* @calloc_constant_zero_size() { +; CHECK-LABEL: @calloc_constant_zero_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @calloc(i64 0, i64 0) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @calloc(i64 0, i64 0) + ret i8* %call +} + +define noalias i8* @calloc_constant_zero_size2(i64 %n) { +; CHECK-LABEL: @calloc_constant_zero_size2( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @calloc(i64 [[N:%.*]], i64 0) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @calloc(i64 %n, i64 0) + ret i8* %call +} + + +define noalias i8* @calloc_constant_zero_size3(i64 %n) { +; CHECK-LABEL: @calloc_constant_zero_size3( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @calloc(i64 0, i64 [[N:%.*]]) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @calloc(i64 0, i64 %n) + ret i8* %call +} + +define noalias i8* @calloc_constant_size() { +; CHECK-LABEL: @calloc_constant_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @calloc(i64 16, i64 8) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @calloc(i64 16, i64 8) + ret i8* %call +} + +define noalias i8* @calloc_constant_size_overflow() { +; CHECK-LABEL: @calloc_constant_size_overflow( +; CHECK-NEXT: [[CALL:%.*]] = tail call noalias i8* @calloc(i64 2000000000000, i64 80000000000) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call noalias i8* @calloc(i64 2000000000000, i64 80000000000) + ret i8* %call +} + + +define noalias i8* @op_new_nonconstant_size(i64 %n) { +; CHECK-LABEL: @op_new_nonconstant_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call i8* @_Znam(i64 [[N:%.*]]) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call i8* @_Znam(i64 %n) + ret i8* %call +} + +define noalias i8* @op_new_constant_zero_size() { +; CHECK-LABEL: @op_new_constant_zero_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call i8* @_Znam(i64 40) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call i8* @_Znam(i64 40) + ret i8* %call +} + +define noalias i8* @op_new_constant_size() { +; CHECK-LABEL: @op_new_constant_size( +; CHECK-NEXT: [[CALL:%.*]] = tail call i8* @_Znam(i64 0) +; CHECK-NEXT: ret i8* [[CALL]] +; + %call = tail call i8* @_Znam(i64 0) + ret i8* %call +} -- 2.40.0