90
90
; for (int i = 0; i != 10; ++i)
91
91
; a[i] = 0;
92
92
; }
93
+ ;
94
+ ; void max_reinvocation_delay() {
95
+ ; int a[10];
96
+ ; [[intel::max_reinvocation_delay(2)]]
97
+ ; for (int i = 0; i != 10; ++i)
98
+ ; a[i] = 0;
99
+ ; }
100
+
93
101
94
102
; TODO: This source code will result in different LLVM IR after
95
103
; rev [a47242e4b2c1c9] of https://github.com/intel/llvm (the
@@ -478,6 +486,40 @@ for.end: ; preds = %for.cond
478
486
ret void
479
487
}
480
488
489
+ ; Function Attrs: noinline nounwind optnone
490
+ define spir_func void @max_reinvocation_delay () #3 {
491
+ entry:
492
+ %a = alloca [10 x i32 ], align 4
493
+ %i = alloca i32 , align 4
494
+ store i32 0 , i32* %i , align 4
495
+ br label %for.cond
496
+
497
+ ; Per SPIR-V spec, LoopControlMaxReinvocationDelayINTELMask = 0x2000000 (33554432)
498
+ ; CHECK-SPIRV: 5 LoopMerge {{[0-9]+}} {{[0-9]+}} 33554432 2
499
+ ; CHECK-SPIRV-NEXT: 4 BranchConditional {{[0-9]+}} {{[0-9]+}} {{[0-9]+}}
500
+ ; CHECK-SPIRV-NEGATIVE-NOT: 5 LoopMerge {{[0-9]+}} {{[0-9]+}} 33554432 2
501
+ for.cond: ; preds = %for.inc, %entry
502
+ %0 = load i32 , i32* %i , align 4
503
+ %cmp = icmp ne i32 %0 , 10
504
+ br i1 %cmp , label %for.body , label %for.end
505
+
506
+ for.body: ; preds = %for.cond
507
+ %1 = load i32 , i32* %i , align 4
508
+ %idxprom = sext i32 %1 to i64
509
+ %arrayidx = getelementptr inbounds [10 x i32 ], [10 x i32 ]* %a , i64 0 , i64 %idxprom
510
+ store i32 0 , i32* %arrayidx , align 4
511
+ br label %for.inc
512
+
513
+ for.inc: ; preds = %for.body
514
+ %2 = load i32 , i32* %i , align 4
515
+ %inc = add nsw i32 %2 , 1
516
+ store i32 %inc , i32* %i , align 4
517
+ br label %for.cond , !llvm.loop !31
518
+
519
+ for.end: ; preds = %for.cond
520
+ ret void
521
+ }
522
+
481
523
attributes #0 = { "correctly-rounded-divide-sqrt-fp-math" ="false" "disable-tail-calls" ="false" "frame-pointer" ="all" "less-precise-fpmad" ="false" "min-legal-vector-width" ="0" "no-infs-fp-math" ="false" "no-jump-tables" ="false" "no-nans-fp-math" ="false" "no-signed-zeros-fp-math" ="false" "no-trapping-math" ="false" "stack-protector-buffer-size" ="8" "sycl-module-id" ="FPGALoopMergeInst.cpp" "uniform-work-group-size" ="true" "unsafe-fp-math" ="false" "use-soft-float" ="false" }
482
524
attributes #1 = { argmemonly nounwind willreturn }
483
525
attributes #2 = { inlinehint nounwind "correctly-rounded-divide-sqrt-fp-math" ="false" "disable-tail-calls" ="false" "frame-pointer" ="all" "less-precise-fpmad" ="false" "min-legal-vector-width" ="0" "no-infs-fp-math" ="false" "no-jump-tables" ="false" "no-nans-fp-math" ="false" "no-signed-zeros-fp-math" ="false" "no-trapping-math" ="false" "stack-protector-buffer-size" ="8" "unsafe-fp-math" ="false" "use-soft-float" ="false" }
@@ -520,6 +562,8 @@ attributes #4 = { nounwind }
520
562
!28 = !{!"llvm.loop.intel.speculated.iterations.count" , i32 4 }
521
563
!29 = distinct !{!29 , !30 }
522
564
!30 = !{!"llvm.loop.fusion.disable" }
565
+ !31 = distinct !{!31 , !32 }
566
+ !32 = !{!"llvm.loop.intel.max_reinvocation_delay.count" , i32 2 }
523
567
524
568
; CHECK-LLVM: br label %while.cond, !llvm.loop ![[MD_A:[0-9]+]]
525
569
; CHECK-LLVM: br label %while.cond{{[0-9]+}}, !llvm.loop ![[MD_B:[0-9]+]]
@@ -531,6 +575,7 @@ attributes #4 = { nounwind }
531
575
; CHECK-LLVM: br label %for.cond{{[0-9]*}}, !llvm.loop ![[MD_H:[0-9]+]]
532
576
; CHECK-LLVM: br label %for.cond{{[0-9]*}}, !llvm.loop ![[MD_I:[0-9]+]]
533
577
; CHECK-LLVM: br label %for.cond{{[0-9]*}}, !llvm.loop ![[MD_NF:[0-9]+]]
578
+ ; CHECK-LLVM: br label %for.cond{{[0-9]*}}, !llvm.loop ![[MD_MRD:[0-9]+]]
534
579
535
580
; CHECK-LLVM: ![[MD_A]] = distinct !{![[MD_A]], ![[MD_ivdep_enable:[0-9]+]]}
536
581
; CHECK-LLVM: ![[MD_ivdep_enable]] = !{!"llvm.loop.ivdep.enable"}
@@ -553,3 +598,5 @@ attributes #4 = { nounwind }
553
598
; CHECK-LLVM: ![[MD_spec_iterations]] = !{!"llvm.loop.intel.speculated.iterations.count", i32 4}
554
599
; CHECK-LLVM: ![[MD_NF]] = distinct !{![[MD_NF]], ![[MD_nofusion:[0-9]+]]}
555
600
; CHECK-LLVM: ![[MD_nofusion]] = !{!"llvm.loop.fusion.disable"}
601
+ ; CHECK-LLVM: ![[MD_MRD]] = distinct !{![[MD_MRD]], ![[MD_max_reinvocation_delay:[0-9]+]]}
602
+ ; CHECK-LLVM: ![[MD_max_reinvocation_delay]] = !{!"llvm.loop.intel.max_reinvocation_delay.count", i32 2}
0 commit comments