xref: /llvm-project/llvm/test/Transforms/InstCombine/malloc-free-addrspace.ll (revision e96ddad85ca03ddd76a7b0571771709fb1fd1b53)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
2; RUN: opt -passes=instcombine -S < %s  | FileCheck %s
3
4target datalayout = "e-m:e-p200:128:128:128:64-A200-P200-G200"
5
6define i64 @remove_malloc() addrspace(200) {
7; CHECK-LABEL: define {{[^@]+}}@remove_malloc() addrspace(200) {
8; CHECK-NEXT:  entry:
9; CHECK-NEXT:    ret i64 0
10;
11entry:
12  %call = call align 16 ptr addrspace(200) @malloc(i64 4)
13  call void @free(ptr addrspace(200) %call)
14  ret i64 0
15}
16
17define i64 @remove_calloc() addrspace(200) {
18; CHECK-LABEL: define {{[^@]+}}@remove_calloc() addrspace(200) {
19; CHECK-NEXT:  entry:
20; CHECK-NEXT:    ret i64 0
21;
22entry:
23  %call = call ptr addrspace(200) @calloc(i64 1, i64 4)
24  call void @free(ptr addrspace(200) %call)
25  ret i64 0
26}
27define i64 @remove_aligned_alloc() addrspace(200) {
28; CHECK-LABEL: define {{[^@]+}}@remove_aligned_alloc() addrspace(200) {
29; CHECK-NEXT:  entry:
30; CHECK-NEXT:    ret i64 0
31;
32entry:
33  %call = call align 4 ptr addrspace(200) @aligned_alloc(i64 4, i64 4)
34  call void @free(ptr addrspace(200) %call)
35  ret i64 0
36}
37
38define i64 @remove_strdup(ptr addrspace(200) %arg) addrspace(200) {
39; CHECK-LABEL: define {{[^@]+}}@remove_strdup
40; CHECK-SAME: (ptr addrspace(200) [[ARG:%.*]]) addrspace(200) {
41; CHECK-NEXT:  entry:
42; CHECK-NEXT:    ret i64 0
43;
44entry:
45  %call = call align 4 ptr addrspace(200) @strdup(ptr addrspace(200) %arg)
46  call void @free(ptr addrspace(200) %call)
47  ret i64 0
48}
49
50define i64 @remove_new(ptr addrspace(200) %arg) addrspace(200) {
51; CHECK-LABEL: define {{[^@]+}}@remove_new
52; CHECK-SAME: (ptr addrspace(200) [[ARG:%.*]]) addrspace(200) {
53; CHECK-NEXT:  entry:
54; CHECK-NEXT:    ret i64 0
55;
56entry:
57  %call = call align 4 ptr addrspace(200) @_Znwm(i64 4)
58  call void @_ZdlPv(ptr addrspace(200) %call)
59  ret i64 0
60}
61
62define i64 @remove_new_array(ptr addrspace(200) %arg) addrspace(200) {
63; CHECK-LABEL: define {{[^@]+}}@remove_new_array
64; CHECK-SAME: (ptr addrspace(200) [[ARG:%.*]]) addrspace(200) {
65; CHECK-NEXT:  entry:
66; CHECK-NEXT:    ret i64 0
67;
68entry:
69  %call = call align 4 ptr addrspace(200) @_Znam(i64 4)
70  call void @_ZdaPv(ptr addrspace(200) %call)
71  ret i64 0
72}
73
74declare noalias ptr addrspace(200) @calloc(i64, i64) addrspace(200)  nounwind allockind("alloc,zeroed") allocsize(0,1) "alloc-family"="malloc"
75declare noalias ptr addrspace(200) @malloc(i64) addrspace(200) allockind("alloc,uninitialized") allocsize(0) "alloc-family"="malloc"
76declare noalias ptr addrspace(200) @aligned_alloc(i64, i64) addrspace(200) allockind("alloc,uninitialized,aligned") allocsize(1) "alloc-family"="malloc"
77declare noalias ptr addrspace(200) @strdup(ptr addrspace(200) %arg) addrspace(200)
78declare void @free(ptr addrspace(200)) addrspace(200) allockind("free") "alloc-family"="malloc"
79; new/delete
80declare noalias ptr addrspace(200) @_Znwm(i64) addrspace(200)
81declare void @_ZdlPv(ptr addrspace(200)) addrspace(200)
82; new[]/delete[]
83declare noalias ptr addrspace(200) @_Znam(i64) addrspace(200)
84declare void @_ZdaPv(ptr addrspace(200)) addrspace(200)
85