File: alloca.ispc

package info (click to toggle)
ispc 1.28.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 97,620 kB
  • sloc: cpp: 77,067; python: 8,303; yacc: 3,337; lex: 1,126; ansic: 631; sh: 475; makefile: 17
file content (55 lines) | stat: -rw-r--r-- 1,660 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Test to check 'alloca()' implementation.
// RUN: %{ispc} %s --target=host --nowrap -O0 --emit-llvm-text -o - | FileCheck %s
// RUN: %{ispc} %s --target=gen9-x8 --nowrap -O0 --emit-llvm-text -o - | FileCheck %s -check-prefix=CHECK-XE

// REQUIRES: X86_ENABLED
// REQUIRES: XE_ENABLED

extern void goo(uniform int *uniform alloca_ptr);
// CHECK: @foo0
// CHECK: alloca i8, i32 8, align 16
// CHECK-XE: @foo0
// CHECK-XE: alloca i8, i64 8, align 16
extern void foo0() {
    goo((uniform int *uniform)alloca(8));
}

// CHECK: @foo1
// CHECK: alloca i8, i32 %size_load, align 16
// CHECK-XE: @foo1
// CHECK-XE: alloca i8, i64 %size, align 16
extern void foo1(uniform size_t size) {
    goo((uniform int *uniform)alloca(size));
}

// CHECK: @foo2
// CHECK:  alloca i8, i32 %size_load_to_uint32, align 16
// CHECK-XE: @foo2
// CHECK-XE:  alloca i8, i64 %size_load_to_uint64, align 16
extern void foo2(uniform int8 size) {
    goo((uniform int *uniform)alloca(size));
}

// CHECK: @foo3
// CHECK:  alloca i8, i32 %size_load_to_uint32, align 16
// CHECK-XE: @foo3
// CHECK-XE:  alloca i8, i64 %size_load_to_uint64, align 16
extern void foo3(uniform float size) {
    goo((uniform int *uniform)alloca(size));
}

// CHECK: @foo4
// CHECK: alloca i8, i32 %size_load_load_to_uint32, align 16
// CHECK-XE: @foo4
// CHECK-XE: alloca i8, i64 %size_load_load_to_uint64, align 16
extern void foo4(uniform float *uniform size) {
    goo((uniform int *uniform)alloca(*size));
}

// CHECK: @foo5
// CHECK: alloca i8, i32 8, align 16
// CHECK-XE: @foo5
// CHECK-XE: alloca i8, i64 8, align 16
extern void foo5() {
    goo((uniform int *uniform)alloca(sizeof(uniform double)));
}