1
1
; RUN: llvm-as < %s > %t.bc
2
- ; RUN: llvm-spirv %t.bc -o - -spirv-text | FileCheck %s --check-prefix=CHECK-SPIRV
2
+ ; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_INTEL_fpga_loop_controls - o - -spirv-text | FileCheck %s --check-prefix=CHECK-SPIRV
3
3
4
- ; RUN: llvm-spirv %t.bc -o %t.spv
4
+ ; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_INTEL_fpga_loop_controls - o %t.spv
5
5
; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
6
6
; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
7
7
8
+ ; RUN: llvm-spirv %t.bc -o - -spirv-text | FileCheck %s --check-prefix=CHECK-SPIRV-NEGATIVE
9
+
10
+ ; RUN: llvm-spirv %t.bc -o %t.spv
11
+ ; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
12
+ ; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM-NEGATIVE
13
+
14
+ ; CHECK-SPIRV: 2 Capability FPGALoopControlsINTEL
15
+ ; CHECK-SPIRV: 9 Extension "SPV_INTEL_fpga_loop_controls"
16
+ ; CHECK-SPIRV-NEGATIVE-NOT: 2 Capability FPGALoopControlsINTEL
17
+ ; CHECK-SPIRV-NEGATIVE-NOT: 9 Extension "SPV_INTEL_fpga_loop_controls"
18
+
8
19
; ModuleID = 'FPGALoopAttr.cl'
9
20
source_filename = "FPGALoopAttr.cl"
10
21
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
25
36
; Per SPIR-V spec, LoopControlDependencyInfiniteMask = 0x00000004
26
37
; CHECK-SPIRV: 4 LoopMerge {{[0-9]+}} {{[0-9]+}} 4
27
38
; CHECK-SPIRV-NEXT: 4 BranchConditional {{[0-9]+}} {{[0-9]+}} {{[0-9]+}}
39
+ ; CHECK-SPIRV-NEGATIVE: 4 LoopMerge {{[0-9]+}} {{[0-9]+}} 4
40
+ ; CHECK-SPIRV-NEGATIVE-NEXT: 4 BranchConditional {{[0-9]+}} {{[0-9]+}} {{[0-9]+}}
28
41
for.cond: ; preds = %for.inc, %entry
29
42
%0 = load i32 , i32* %i , align 4
30
43
%cmp = icmp ne i32 %0 , 10
@@ -50,6 +63,8 @@ for.end: ; preds = %for.cond
50
63
; Per SPIR-V spec, LoopControlDependencyLengthMask = 0x00000008
51
64
; CHECK-SPIRV: 5 LoopMerge {{[0-9]+}} {{[0-9]+}} 8 2
52
65
; CHECK-SPIRV-NEXT: 4 BranchConditional {{[0-9]+}} {{[0-9]+}} {{[0-9]+}}
66
+ ; CHECK-SPIRV-NEGATIVE: 5 LoopMerge {{[0-9]+}} {{[0-9]+}} 8 2
67
+ ; CHECK-SPIRV-NEGATIVE-NEXT: 4 BranchConditional {{[0-9]+}} {{[0-9]+}} {{[0-9]+}}
53
68
for.cond2: ; preds = %for.inc7, %for.end
54
69
%3 = load i32 , i32* %i1 , align 4
55
70
%cmp3 = icmp ne i32 %3 , 10
@@ -76,6 +91,7 @@ for.end9: ; preds = %for.cond2
76
91
; LoopControlInitiationIntervalINTEL = 0x10000 (65536)
77
92
; CHECK-SPIRV: 5 LoopMerge {{[0-9]+}} {{[0-9]+}} 65536 2
78
93
; CHECK-SPIRV-NEXT: 4 BranchConditional {{[0-9]+}} {{[0-9]+}} {{[0-9]+}}
94
+ ; CHECK-SPIRV-NEGATIVE-NOT: 5 LoopMerge {{[0-9]+}} {{[0-9]+}} 65536 2
79
95
for.cond11: ; preds = %for.inc16, %for.end9
80
96
%6 = load i32 , i32* %i10 , align 4
81
97
%cmp12 = icmp ne i32 %6 , 10
@@ -102,6 +118,7 @@ for.end18: ; preds = %for.cond11
102
118
; LoopControlMaxConcurrencyINTEL = 0x20000 (131072)
103
119
; CHECK-SPIRV: 5 LoopMerge {{[0-9]+}} {{[0-9]+}} 131072 2
104
120
; CHECK-SPIRV-NEXT: 4 BranchConditional {{[0-9]+}} {{[0-9]+}} {{[0-9]+}}
121
+ ; CHECK-SPIRV-NEGATIVE-NOT: 5 LoopMerge {{[0-9]+}} {{[0-9]+}} 131072 2
105
122
for.cond20: ; preds = %for.inc25, %for.end18
106
123
%9 = load i32 , i32* %i19 , align 4
107
124
%cmp21 = icmp ne i32 %9 , 10
@@ -128,6 +145,7 @@ for.end27: ; preds = %for.cond20
128
145
; LoopControlInitiationIntervalINTEL & LoopControlMaxConcurrencyINTEL = 0x10000 & 0x20000 = 0x30000 (196608)
129
146
; CHECK-SPIRV: 6 LoopMerge {{[0-9]+}} {{[0-9]+}} 196608 2 2
130
147
; CHECK-SPIRV: 4 BranchConditional {{[0-9]+}} {{[0-9]+}} {{[0-9]+}}
148
+ ; CHECK-SPIRV-NEGATIVE-NOT: 6 LoopMerge {{[0-9]+}} {{[0-9]+}} 196608 2 2
131
149
for.cond29: ; preds = %for.inc34, %for.end27
132
150
%12 = load i32 , i32* %i28 , align 4
133
151
%cmp30 = icmp ne i32 %12 , 10
@@ -175,6 +193,12 @@ attributes #0 = { convergent noinline nounwind optnone "correctly-rounded-divide
175
193
; CHECK-LLVM: br label %for.cond{{[0-9]+}}, !llvm.loop ![[MD_D:[0-9]+]]
176
194
; CHECK-LLVM: br label %for.cond{{[0-9]+}}, !llvm.loop ![[MD_E:[0-9]+]]
177
195
196
+ ; CHECK-LLVM-NEGATIVE: br label %for.cond{{[0-9]*}}, !llvm.loop ![[MD_A:[0-9]+]]
197
+ ; CHECK-LLVM-NEGATIVE: br label %for.cond{{[0-9]+}}, !llvm.loop ![[MD_B:[0-9]+]]
198
+ ; CHECK-LLVM-NEGATIVE-NOT: br label %for.cond{{[0-9]+}}, !llvm.loop ![[MD_C:[0-9]+]]
199
+ ; CHECK-LLVM-NEGATIVE-NOT: br label %for.cond{{[0-9]+}}, !llvm.loop ![[MD_D:[0-9]+]]
200
+ ; CHECK-LLVM-NEGATIVE-NOT: br label %for.cond{{[0-9]+}}, !llvm.loop ![[MD_E:[0-9]+]]
201
+
178
202
; CHECK-LLVM: ![[MD_A]] = distinct !{![[MD_A]], ![[MD_ivdep_enable:[0-9]+]]}
179
203
; CHECK-LLVM: ![[MD_ivdep_enable]] = !{!"llvm.loop.ivdep.enable"}
180
204
; CHECK-LLVM: ![[MD_B]] = distinct !{![[MD_B]], ![[MD_ivdep:[0-9]+]]}
@@ -184,3 +208,13 @@ attributes #0 = { convergent noinline nounwind optnone "correctly-rounded-divide
184
208
; CHECK-LLVM: ![[MD_D]] = distinct !{![[MD_D]], ![[MD_max_concurrency:[0-9]+]]}
185
209
; CHECK-LLVM: ![[MD_max_concurrency]] = !{!"llvm.loop.max_concurrency.count", i32 2}
186
210
; CHECK-LLVM: ![[MD_E]] = distinct !{![[MD_E]], ![[MD_ii:[0-9]+]], ![[MD_max_concurrency:[0-9]+]]}
211
+
212
+ ; CHECK-LLVM-NEGATIVE: ![[MD_A]] = distinct !{![[MD_A]], ![[MD_ivdep_enable:[0-9]+]]}
213
+ ; CHECK-LLVM-NEGATIVE: ![[MD_ivdep_enable]] = !{!"llvm.loop.ivdep.enable"}
214
+ ; CHECK-LLVM-NEGATIVE: ![[MD_B]] = distinct !{![[MD_B]], ![[MD_ivdep:[0-9]+]]}
215
+ ; CHECK-LLVM-NEGATIVE: ![[MD_ivdep]] = !{!"llvm.loop.ivdep.safelen", i32 2}
216
+ ; CHECK-LLVM-NEGATIVE-NOT: ![[MD_C]] = distinct !{![[MD_C]], ![[MD_ii:[0-9]+]]}
217
+ ; CHECK-LLVM-NEGATIVE-NOT: ![[MD_ii]] = !{!"llvm.loop.ii.count", i32 2}
218
+ ; CHECK-LLVM-NEGATIVE-NOT: ![[MD_D]] = distinct !{![[MD_D]], ![[MD_max_concurrency:[0-9]+]]}
219
+ ; CHECK-LLVM-NEGATIVE-NOT: ![[MD_max_concurrency]] = !{!"llvm.loop.max_concurrency.count", i32 2}
220
+ ; CHECK-LLVM-NEGATIVE-NOT: ![[MD_E]] = distinct !{![[MD_E]], ![[MD_ii:[0-9]+]], ![[MD_max_concurrency:[0-9]+]]}
0 commit comments