@@ -285,17 +285,24 @@ void zoo() {
285
285
[[intel::max_interleaving (1 )]]
286
286
[[intel::loop_coalesce]] for (int i = 0 ; i != 10 ; ++i)
287
287
a[i] = 0 ;
288
- [[intel::max_interleaving (1 )]]
289
- // expected-error@+2 {{duplicate Intel FPGA loop attribute 'max_interleaving'}}
288
+ [[intel::max_interleaving (1 )]] // expected-note {{previous attribute is here}}
289
+ [[intel::max_interleaving (1 )]] // OK.
290
+ // expected-error@+2 {{conflicting loop attribute 'max_interleaving'}}
290
291
[[intel::speculated_iterations (1 )]]
291
292
[[intel::max_interleaving (0 )]] for (int i = 0 ; i != 10 ; ++i)
292
293
a[i] = 0 ;
293
- [[intel::speculated_iterations (1 )]]
294
- // expected-error@+2 {{duplicate Intel FPGA loop attribute 'speculated_iterations'}}
294
+ [[intel::speculated_iterations (1 )]] // expected-note {{previous attribute is here}}
295
+ // expected-error@+2 {{conflicting loop attribute 'speculated_iterations'}}
295
296
[[intel::loop_coalesce]]
296
297
[[intel::speculated_iterations (2 )]] for (int i = 0 ; i != 10 ; ++i)
297
298
a[i] = 0 ;
298
299
300
+ [[intel::speculated_iterations (1 )]] // expected-note {{previous attribute is here}}
301
+ [[intel::speculated_iterations (1 )]] // OK
302
+ // expected-error@+1 {{conflicting loop attribute 'speculated_iterations'}}
303
+ [[intel::speculated_iterations (2 )]] for (int i = 0 ; i != 10 ; ++i)
304
+ a[i] = 0 ;
305
+
299
306
[[intel::ivdep]]
300
307
// expected-warning@+2 {{ignoring redundant Intel FPGA loop attribute 'ivdep': safelen INF >= safelen INF}}
301
308
// expected-note@-2 {{previous attribute is here}}
@@ -359,10 +366,15 @@ void zoo() {
359
366
a[i] = 0 ;
360
367
361
368
[[intel::max_reinvocation_delay (1 )]]
362
- // expected-error@+1{{duplicate Intel FPGA loop attribute 'max_reinvocation_delay'}}
363
369
[[intel::max_reinvocation_delay (1 )]] for (int i = 0 ; i != 10 ; ++i)
364
370
a[i] = 0 ;
365
371
372
+ [[intel::max_reinvocation_delay (10 )]] // expected-note {{previous attribute is here}}
373
+ [[intel::max_reinvocation_delay (10 )]] // OK
374
+ // expected-error@+1 {{conflicting loop attribute 'max_reinvocation_delay'}}
375
+ [[intel::max_reinvocation_delay (20 )]] for (int i = 0 ; i != 10 ; ++i)
376
+ a[i] = 0 ;
377
+
366
378
[[intel::enable_loop_pipelining]]
367
379
// expected-error@+1 {{duplicate Intel FPGA loop attribute 'enable_loop_pipelining'}}
368
380
[[intel::enable_loop_pipelining]] for (int i = 0 ; i != 10 ; ++i)
@@ -501,11 +513,14 @@ void max_interleaving_dependent() {
501
513
[[intel::max_interleaving (C)]] for (int i = 0 ; i != 10 ; ++i)
502
514
a[i] = 0 ;
503
515
504
- // expected-error@+2 {{duplicate Intel FPGA loop attribute 'max_interleaving'}}
505
- [[intel::max_interleaving (C)]]
516
+ // expected-error@+2 {{conflicting loop attribute 'max_interleaving'}}
517
+ [[intel::max_interleaving (C)]] // expected-note {{previous attribute is here}}
506
518
[[intel::max_interleaving (D)]] for (int i = 0 ; i != 10 ; ++i)
507
519
a[i] = 0 ;
508
520
521
+ [[intel::max_interleaving (D)]]
522
+ [[intel::max_interleaving (D)]] for (int i = 0 ; i != 10 ; ++i)
523
+ a[i] = 0 ;
509
524
}
510
525
511
526
template <int A, int B, int C, int D>
@@ -515,14 +530,18 @@ void speculated_iterations_dependent() {
515
530
[[intel::speculated_iterations (C)]] for (int i = 0 ; i != 10 ; ++i)
516
531
a[i] = 0 ;
517
532
518
- // expected-error@+2 {{duplicate Intel FPGA loop attribute 'speculated_iterations'}}
519
- [[intel::speculated_iterations (A)]]
533
+ // expected-error@+2 {{conflicting loop attribute 'speculated_iterations'}}
534
+ [[intel::speculated_iterations (A)]] // expected-note {{previous attribute is here}}
520
535
[[intel::speculated_iterations (B)]] for (int i = 0 ; i != 10 ; ++i)
521
536
a[i] = 0 ;
522
537
523
538
// speculated_iterations attribute accepts value 0.
524
539
[[intel::speculated_iterations (D)]] for (int i = 0 ; i != 10 ; ++i)
525
540
a[i] = 0 ;
541
+
542
+ [[intel::speculated_iterations (B)]]
543
+ [[intel::speculated_iterations (B)]] for (int i = 0 ; i != 10 ; ++i)
544
+ a[i] = 0 ;
526
545
}
527
546
528
547
template <int A, int B, int C>
@@ -593,10 +612,14 @@ void max_reinvocation_delay_dependent() {
593
612
[[intel::max_reinvocation_delay (C)]] for (int i = 0 ; i != 10 ; ++i)
594
613
a[i] = 0 ;
595
614
596
- // expected-error@+2 {{duplicate Intel FPGA loop attribute 'max_reinvocation_delay'}}
597
- [[intel::max_reinvocation_delay (A)]]
615
+ // expected-error@+2 {{conflicting loop attribute 'max_reinvocation_delay'}}
616
+ [[intel::max_reinvocation_delay (A)]] // expected-note {{previous attribute is here}}
598
617
[[intel::max_reinvocation_delay (B)]] for (int i = 0 ; i != 10 ; ++i)
599
618
a[i] = 0 ;
619
+
620
+ [[intel::max_reinvocation_delay (A)]]
621
+ [[intel::max_reinvocation_delay (A)]] for (int i = 0 ; i != 10 ; ++i)
622
+ a[i] = 0 ;
600
623
}
601
624
602
625
void check_max_concurrency_expression () {
0 commit comments