mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 19:45:40 -04:00

This patch adds #pragma clang loop pipeline and #pragma clang loop pipeline_initiation_interval for debugging or reducing compile time purposes. It is possible to disable SWP for concrete loops to save compilation time or to find bugs by not doing SWP to certain loops. It is possible to set value of initiation interval to concrete number to save compilation time by not doing extra pipeliner passes or to check created schedule for specific initiation interval. Patch by Alexey Lapshin. llvm-svn: 350414
48 lines
1.6 KiB
C++
48 lines
1.6 KiB
C++
// RUN: %clang_cc1 -triple hexagon -std=c++11 -emit-llvm -o - %s | FileCheck %s
|
|
|
|
void pipeline_disabled(int *List, int Length, int Value) {
|
|
// CHECK-LABEL: define {{.*}} @_Z17pipeline_disabled
|
|
#pragma clang loop pipeline(disable)
|
|
for (int i = 0; i < Length; i++) {
|
|
// CHECK: br label {{.*}}, !llvm.loop ![[LOOP_1:.*]]
|
|
List[i] = Value;
|
|
}
|
|
}
|
|
|
|
void pipeline_not_disabled(int *List, int Length, int Value) {
|
|
// CHECK-LABEL: define {{.*}} @_Z21pipeline_not_disabled
|
|
for (int i = 0; i < Length; i++) {
|
|
List[i] = Value;
|
|
}
|
|
}
|
|
|
|
void pipeline_initiation_interval(int *List, int Length, int Value) {
|
|
// CHECK-LABEL: define {{.*}} @_Z28pipeline_initiation_interval
|
|
#pragma clang loop pipeline_initiation_interval(10)
|
|
for (int i = 0; i < Length; i++) {
|
|
// CHECK: br label {{.*}}, !llvm.loop ![[LOOP_3:.*]]
|
|
List[i] = Value;
|
|
}
|
|
}
|
|
|
|
void pipeline_disabled_on_nested_loop(int *List, int Length, int Value) {
|
|
// CHECK-LABEL: define {{.*}} @_Z32pipeline_disabled_on_nested_loop
|
|
for (int i = 0; i < Length; i++) {
|
|
#pragma clang loop pipeline(disable)
|
|
for (int j = 0; j < Length; j++) {
|
|
// CHECK: br label {{.*}}, !llvm.loop ![[LOOP_4:.*]]
|
|
List[i * Length + j] = Value;
|
|
}
|
|
}
|
|
}
|
|
|
|
// CHECK: ![[LOOP_1]] = distinct !{![[LOOP_1]], ![[PIPELINE_DISABLE:.*]]}
|
|
// CHECK: ![[PIPELINE_DISABLE]] = !{!"llvm.loop.pipeline.disable", i1 true}
|
|
|
|
// CHECK-NOT:llvm.loop.pipeline
|
|
|
|
// CHECK: ![[LOOP_3]] = distinct !{![[LOOP_3]], ![[PIPELINE_II_10:.*]]}
|
|
// CHECK: ![[PIPELINE_II_10]] = !{!"llvm.loop.pipeline.initiationinterval", i32 10}
|
|
|
|
// CHECK: ![[LOOP_4]] = distinct !{![[LOOP_4]], ![[PIPELINE_DISABLE]]}
|