xref: /llvm-project/llvm/test/Transforms/GlobalOpt/calloc-promote.ll (revision d586bd5ca231a6022f439d4c6e43cfeeb53eb1d6)
130715365SPhilip Reames; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
230715365SPhilip Reames; RUN: opt -passes=globalopt -S < %s | FileCheck %s
330715365SPhilip Reames
4*d586bd5cSNikita Popov@g = internal global ptr null, align 8
530715365SPhilip Reames
630715365SPhilip Reamesdefine signext i32 @f() local_unnamed_addr {
730715365SPhilip Reames; CHECK-LABEL: @f(
830715365SPhilip Reames; CHECK-NEXT:  entry:
9*d586bd5cSNikita Popov; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr @g.body, i8 0, i64 4, i1 false)
10*d586bd5cSNikita Popov; CHECK-NEXT:    store i16 -1, ptr @g.body, align 2
1130715365SPhilip Reames; CHECK-NEXT:    ret i32 0
1230715365SPhilip Reames;
1330715365SPhilip Reamesentry:
14*d586bd5cSNikita Popov  %call = call ptr @calloc(i64 1, i64 4)
15*d586bd5cSNikita Popov  store ptr %call, ptr @g, align 8
16*d586bd5cSNikita Popov  store i16 -1, ptr %call
1730715365SPhilip Reames  ret i32 0
1830715365SPhilip Reames}
1930715365SPhilip Reames
2030715365SPhilip Reamesdefine signext i32 @main() {
2130715365SPhilip Reames; CHECK-LABEL: @main(
2230715365SPhilip Reames; CHECK-NEXT:  entry:
2330715365SPhilip Reames; CHECK-NEXT:    [[CALL:%.*]] = call signext i32 @f()
2430715365SPhilip Reames; CHECK-NEXT:    call void @f1()
25*d586bd5cSNikita Popov; CHECK-NEXT:    store i32 1, ptr @g.body, align 4
2630715365SPhilip Reames; CHECK-NEXT:    call void @f1()
27*d586bd5cSNikita Popov; CHECK-NEXT:    store i8 2, ptr @g.body, align 4
2830715365SPhilip Reames; CHECK-NEXT:    call void @f1()
29*d586bd5cSNikita Popov; CHECK-NEXT:    [[RES:%.*]] = load i32, ptr @g.body, align 4
3030715365SPhilip Reames; CHECK-NEXT:    ret i32 [[RES]]
3130715365SPhilip Reames;
3230715365SPhilip Reamesentry:
3330715365SPhilip Reames  %call = call signext i32 @f()
3430715365SPhilip Reames  call void @f1()
35*d586bd5cSNikita Popov  %v0 = load ptr, ptr @g, align 8
36*d586bd5cSNikita Popov  store i32 1, ptr %v0, align 4
3730715365SPhilip Reames  call void @f1()
38*d586bd5cSNikita Popov  %v1 = load ptr, ptr @g, align 8
39*d586bd5cSNikita Popov  store i8 2, ptr %v1, align 4
4030715365SPhilip Reames  call void @f1()
41*d586bd5cSNikita Popov  %v2 = load ptr, ptr @g, align 8
42*d586bd5cSNikita Popov  %res = load i32, ptr %v2, align 4
4330715365SPhilip Reames  ret i32 %res
4430715365SPhilip Reames}
4530715365SPhilip Reames
46*d586bd5cSNikita Popovdeclare noalias align 16 ptr @calloc(i64, i64) allockind("alloc,zeroed") allocsize(0,1)
4730715365SPhilip Reamesdeclare void @f1()
48