blob: aa3f0ab938e2887c1083df4c87a14ccb3b901f2a [file] [log] [blame]
Dan Gohman620c38f2010-11-12 02:02:39 +00001; RUN: opt < %s -basicaa -dse -S | FileCheck %s
Chris Lattnerfb7dd4c2004-07-25 07:57:50 +00002
Dan Gohman620c38f2010-11-12 02:02:39 +00003target datalayout = "e-p:64:64:64"
4
5; CHECK: @test
6; CHECK-NEXT: bitcast
7; CHECK-NEXT: @free
8; CHECK-NEXT: ret void
Tanya Lattner5640bd12008-03-01 09:15:35 +00009define void @test(i32* %Q, i32* %P) {
10 %DEAD = load i32* %Q ; <i32> [#uses=1]
11 store i32 %DEAD, i32* %P
Chris Lattnerb90ed222011-06-17 03:14:27 +000012 %1 = bitcast i32* %P to i8*
13 tail call void @free(i8* %1)
Tanya Lattner5640bd12008-03-01 09:15:35 +000014 ret void
Chris Lattnerfb7dd4c2004-07-25 07:57:50 +000015}
Chris Lattner57e91ea2008-12-06 00:53:22 +000016
Dan Gohman620c38f2010-11-12 02:02:39 +000017; CHECK: @test2
18; CHECK-NEXT: bitcast
19; CHECK-NEXT: @free
20; CHECK-NEXT: ret void
Chris Lattner57e91ea2008-12-06 00:53:22 +000021define void @test2({i32, i32}* %P) {
22 %Q = getelementptr {i32, i32} *%P, i32 0, i32 1
23 store i32 4, i32* %Q
Chris Lattnerb90ed222011-06-17 03:14:27 +000024 %1 = bitcast {i32, i32}* %P to i8*
25 tail call void @free(i8* %1)
Chris Lattner57e91ea2008-12-06 00:53:22 +000026 ret void
27}
Dan Gohman620c38f2010-11-12 02:02:39 +000028
Dan Gohmand4b7fff2010-11-12 02:19:17 +000029; CHECK: @test4
30; CHECK-NOT: store
31; CHECK: ret void
32define void @test4() {
33 %m = call i8* @malloc(i64 24)
34 store i8 0, i8* %m
35 %m1 = getelementptr i8* %m, i64 1
36 store i8 1, i8* %m1
37 call void @free(i8* %m)
38 ret void
39}
40
41declare void @free(i8*)
42declare i8* @malloc(i64)