|
1 |
| -;; struct S1 |
2 |
| -;; { |
3 |
| -;; int x; |
4 |
| -;; int y; |
5 |
| -;; int z; |
6 |
| -;; }; |
7 |
| -;; S1 foo11() |
8 |
| -;; { |
9 |
| -;; return S1(); |
10 |
| -;; } |
11 |
| - |
12 | 1 | ; RUN: llvm-as %s -o %t.bc
|
13 | 2 | ; RUN: llvm-spirv %t.bc -spirv-text -o %t.spt
|
14 | 3 | ; RUN: FileCheck < %t.spt %s --check-prefix=CHECK-SPIRV
|
15 | 4 | ; RUN: llvm-spirv %t.bc -o %t.spv
|
16 | 5 | ; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
|
| 6 | +; RUN: spirv-val %t.spv |
17 | 7 | ; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
|
18 | 8 |
|
19 | 9 | ; CHECK-SPIRV: TypeInt [[Int8:[0-9]+]] 8 0
|
20 |
| -; CHECK-SPIRV: Constant {{[0-9]+}} [[Len:[0-9]+]] 12 |
| 10 | +; CHECK-SPIRV: Constant {{[0-9]+}} [[Lenmemset21:[0-9]+]] 4 |
| 11 | +; CHECK-SPIRV: Constant {{[0-9]+}} [[Lenmemset0:[0-9]+]] 12 |
| 12 | +; CHECK-SPIRV: Constant {{[0-9]+}} [[Const21:[0-9]+]] 21 |
| 13 | +; CHECK-SPIRV: TypeArray [[Int8x4:[0-9]+]] [[Int8]] [[Lenmemset21]] |
21 | 14 | ; CHECK-SPIRV: TypePointer [[Int8Ptr:[0-9]+]] 8 [[Int8]]
|
22 |
| -; CHECK-SPIRV: TypeArray [[Int8x12:[0-9]+]] [[Int8]] [[Len]] |
| 15 | +; CHECK-SPIRV: TypeArray [[Int8x12:[0-9]+]] [[Int8]] [[Lenmemset0]] |
23 | 16 | ; CHECK-SPIRV: TypePointer [[Int8PtrConst:[0-9]+]] 0 [[Int8]]
|
| 17 | + |
24 | 18 | ; CHECK-SPIRV: ConstantNull [[Int8x12]] [[Init:[0-9]+]]
|
25 | 19 | ; CHECK-SPIRV: Variable {{[0-9]+}} [[Val:[0-9]+]] 0 [[Init]]
|
| 20 | +; CHECK-SPIRV: 7 ConstantComposite [[Int8x4]] [[InitComp:[0-9]+]] [[Const21]] [[Const21]] [[Const21]] [[Const21]] |
| 21 | +; CHECK-SPIRV: Variable {{[0-9]+}} [[ValComp:[0-9]+]] 0 [[InitComp]] |
26 | 22 |
|
27 | 23 | ; CHECK-SPIRV: Bitcast [[Int8Ptr]] [[Target:[0-9]+]] {{[0-9]+}}
|
28 | 24 | ; CHECK-SPIRV: Bitcast [[Int8PtrConst]] [[Source:[0-9]+]] [[Val]]
|
29 |
| -; CHECK-SPIRV: CopyMemorySized [[Target]] [[Source]] [[Len]] 2 4 |
| 25 | +; CHECK-SPIRV: CopyMemorySized [[Target]] [[Source]] [[Lenmemset0]] 2 4 |
30 | 26 |
|
| 27 | +; CHECK-SPIRV: Bitcast [[Int8PtrConst]] [[SourceComp:[0-9]+]] [[ValComp]] |
| 28 | +; CHECK-SPIRV: CopyMemorySized {{[0-9]+}} [[SourceComp]] [[Lenmemset21]] 2 4 |
31 | 29 |
|
32 | 30 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"
|
33 | 31 | target triple = "spir"
|
34 | 32 |
|
35 | 33 | %struct.S1 = type { i32, i32, i32 }
|
36 | 34 |
|
| 35 | +; CHECK-LLVM: internal unnamed_addr addrspace(2) constant [12 x i8] zeroinitializer |
| 36 | +; CHECK-LLVM: internal unnamed_addr addrspace(2) constant [4 x i8] c"\15\15\15\15" |
| 37 | + |
37 | 38 | ; Function Attrs: nounwind
|
38 | 39 | define spir_func void @_Z5foo11v(%struct.S1 addrspace(4)* noalias nocapture sret %agg.result) #0 {
|
| 40 | + %x = alloca [4 x i8] |
| 41 | + %x.bc = bitcast [4 x i8]* %x to i8* |
39 | 42 | %1 = bitcast %struct.S1 addrspace(4)* %agg.result to i8 addrspace(4)*
|
40 | 43 | tail call void @llvm.memset.p4i8.i32(i8 addrspace(4)* align 4 %1, i8 0, i32 12, i1 false)
|
41 | 44 | ; CHECK-LLVM: call void @llvm.memset.p4i8.i32(i8 addrspace(4)* align 4 %1, i8 0, i32 12, i1 false)
|
| 45 | + tail call void @llvm.memset.p0i8.i32(i8* align 4 %x.bc, i8 21, i32 4, i1 false) |
| 46 | +; CHECK-LLVM: call void @llvm.memcpy.p0i8.p2i8.i32(i8* align 4 %x.bc, i8 addrspace(2)* align 4 %3, i32 4, i1 false) |
42 | 47 | ret void
|
43 | 48 | }
|
44 | 49 |
|
45 | 50 | ; Function Attrs: nounwind
|
46 | 51 | declare void @llvm.memset.p4i8.i32(i8 addrspace(4)* nocapture, i8, i32, i1) #1
|
47 | 52 |
|
| 53 | +; Function Attrs: nounwind |
| 54 | +declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i1) #1 |
| 55 | + |
48 | 56 | attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
49 | 57 | attributes #1 = { nounwind }
|
50 | 58 |
|
|
0 commit comments