@ -7,7 +7,7 @@ declare nonnull ptr @runtime.alloc(i32, ptr)
; T e s t a l l o c a t i n g a s i n g l e i n t ( i32 ) t h a t s h o u l d b e a l l o c a t e d o n t h e s t a c k .
define void @testInt ( ) {
%alloc = call p t r @runtime.alloc ( i32 4 , p t r null )
%alloc = call align 4 p t r @runtime.alloc ( i32 4 , p t r null )
store i32 5 , p t r %alloc
ret void
}
@ -15,7 +15,7 @@ define void @testInt() {
; T e s t a l l o c a t i n g a n a r r a y o f 3 i16 v a l u e s t h a t s h o u l d b e a l l o c a t e d o n t h e
; s t a c k .
define i16 @testArray ( ) {
%alloc = call p t r @runtime.alloc ( i32 6 , p t r null )
%alloc = call align 2 p t r @runtime.alloc ( i32 6 , p t r null )
%alloc.1 = getelementptr i16 , p t r %alloc , i32 1
store i16 5 , p t r %alloc.1
%alloc.2 = getelementptr i16 , p t r %alloc , i32 2
@ -23,30 +23,45 @@ define i16 @testArray() {
ret i16 %val
}
; T e s t a l l o c a t i n g o b j e c t s w i t h a n u n k n o w n a l i g n m e n t .
define void @testUnknownAlign ( ) {
%alloc32 = call p t r @runtime.alloc ( i32 32 , p t r null )
store i8 5 , p t r %alloc32
%alloc24 = call p t r @runtime.alloc ( i32 24 , p t r null )
store i16 5 , p t r %alloc24
%alloc12 = call p t r @runtime.alloc ( i32 12 , p t r null )
store i16 5 , p t r %alloc12
%alloc6 = call p t r @runtime.alloc ( i32 6 , p t r null )
store i16 5 , p t r %alloc6
%alloc3 = call p t r @runtime.alloc ( i32 3 , p t r null )
store i16 5 , p t r %alloc3
ret void
}
; C a l l a f u n c t i o n t h a t w i l l l e t t h e p o i n t e r e s c a p e , s o t h e h e a p - to - s t a c k
; t r a n s f o r m s h o u l d n ' t b e a p p l i e d .
define void @testEscapingCall ( ) {
%alloc = call p t r @runtime.alloc ( i32 4 , p t r null )
%alloc = call align 4 p t r @runtime.alloc ( i32 4 , p t r null )
%val = call p t r @escapeIntPtr ( p t r %alloc )
ret void
}
define void @testEscapingCall2 ( ) {
%alloc = call p t r @runtime.alloc ( i32 4 , p t r null )
%alloc = call align 4 p t r @runtime.alloc ( i32 4 , p t r null )
%val = call p t r @escapeIntPtrSometimes ( p t r %alloc , p t r %alloc )
ret void
}
; C a l l a f u n c t i o n t h a t d o e s n ' t l e t t h e p o i n t e r e s c a p e .
define void @testNonEscapingCall ( ) {
%alloc = call p t r @runtime.alloc ( i32 4 , p t r null )
%alloc = call align 4 p t r @runtime.alloc ( i32 4 , p t r null )
%val = call p t r @noescapeIntPtr ( p t r %alloc )
ret void
}
; R e t u r n t h e a l l o c a t e d v a l u e , w h i c h l e t s i t e s c a p e .
define p t r @testEscapingReturn ( ) {
%alloc = call p t r @runtime.alloc ( i32 4 , p t r null )
%alloc = call align 4 p t r @runtime.alloc ( i32 4 , p t r null )
ret p t r %alloc
}
@ -55,7 +70,7 @@ define void @testNonEscapingLoop() {
entry:
br label %loop
loop:
%alloc = call p t r @runtime.alloc ( i32 4 , p t r null )
%alloc = call align 4 p t r @runtime.alloc ( i32 4 , p t r null )
%ptr = call p t r @noescapeIntPtr ( p t r %alloc )
%result = icmp eq p t r null , %ptr
br i1 %result , label %loop , label %end
@ -65,7 +80,7 @@ end:
; T e s t a z e r o - s i z e d a l l o c a t i o n .
define void @testZeroSizedAlloc ( ) {
%alloc = call p t r @runtime.alloc ( i32 0 , p t r null )
%alloc = call align 1 p t r @runtime.alloc ( i32 0 , p t r null )
%ptr = call p t r @noescapeIntPtr ( p t r %alloc )
ret void
}