Author: Egor Suvorov Date: 2023-03-05T18:22:10Z New Revision: 9fda8322243168cbfcb78c4cf80afa838473a573
URL: https://github.com/llvm/llvm-project/commit/9fda8322243168cbfcb78c4cf80afa838473a573 DIFF: https://github.com/llvm/llvm-project/commit/9fda8322243168cbfcb78c4cf80afa838473a573.diff LOG: [clang-tidy] altera-id-dependent-backward-branch: refactor test This is a preparation for future fixes that need more tests. * Put all "Inferred Assignments" testing at the end * Group together ID-dependent variable/member testing * Group together unused inferred assignments * Use a literal instead of `get_local_size` which may have special meaning * Create a new `struct` for each variable because analysis is done per field, not per field per instance. Depends on D145303 Reviewed By: carlosgalvezp Differential Revision: https://reviews.llvm.org/D145304 Added: Modified: clang-tools-extra/test/clang-tidy/checkers/altera/id-dependent-backward-branch.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/test/clang-tidy/checkers/altera/id-dependent-backward-branch.cpp b/clang-tools-extra/test/clang-tidy/checkers/altera/id-dependent-backward-branch.cpp index 0c7a20ad6a179..c0a75fae98d75 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/altera/id-dependent-backward-branch.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/altera/id-dependent-backward-branch.cpp @@ -1,9 +1,5 @@ // RUN: %check_clang_tidy %s altera-id-dependent-backward-branch %t -- -header-filter=.* "--" -cl-std=CL1.2 -c -typedef struct ExampleStruct { - int IDDepField; -} ExampleStruct; - void error() { // ==== Conditional Expressions ==== int accumulator = 0; @@ -32,39 +28,24 @@ void error() { accumulator++; } - ExampleStruct Example; - Example.IDDepField = get_local_id(0); - - // ==== Inferred Assignments ==== - int ThreadID2 = ThreadID * get_local_size(0); - - int ThreadID3 = Example.IDDepField; // OK: not used in any loops - - ExampleStruct UnusedStruct = { - ThreadID * 2 // OK: not used in any loops - }; - - for (int i = 0; i < ThreadID2; i++) { - // CHECK-NOTES: :[[@LINE-1]]:19: warning: backward branch (for loop) is ID-dependent due to variable reference to 'ThreadID2' and may cause performance degradation [altera-id-dependent-backward-branch] - // CHECK-NOTES: :[[@LINE-10]]:3: note: inferred assignment of ID-dependent value from ID-dependent variable ThreadID - accumulator++; - } - do { accumulator++; } while (j < ThreadID); // CHECK-NOTES: :[[@LINE-1]]:12: warning: backward branch (do loop) is ID-dependent due to variable reference to 'ThreadID' and may cause performance degradation [altera-id-dependent-backward-branch] - // CHECK-NOTES: :[[@LINE-30]]:3: note: assignment of ID-dependent variable ThreadID + // CHECK-NOTES: :[[@LINE-12]]:3: note: assignment of ID-dependent variable ThreadID + + struct { int IDDepField; } Example; + Example.IDDepField = get_local_id(0); for (int i = 0; i < Example.IDDepField; i++) { // CHECK-NOTES: :[[@LINE-1]]:19: warning: backward branch (for loop) is ID-dependent due to member reference to 'IDDepField' and may cause performance degradation [altera-id-dependent-backward-branch] - // CHECK-NOTES: :[[@LINE-25]]:3: note: assignment of ID-dependent field IDDepField + // CHECK-NOTES: :[[@LINE-4]]:3: note: assignment of ID-dependent field IDDepField accumulator++; } while (j < Example.IDDepField) { // CHECK-NOTES: :[[@LINE-1]]:10: warning: backward branch (while loop) is ID-dependent due to member reference to 'IDDepField' and may cause performance degradation [altera-id-dependent-backward-branch] - // CHECK-NOTES: :[[@LINE-31]]:3: note: assignment of ID-dependent field IDDepField + // CHECK-NOTES: :[[@LINE-10]]:3: note: assignment of ID-dependent field IDDepField accumulator++; } @@ -72,7 +53,22 @@ void error() { accumulator++; } while (j < Example.IDDepField); // CHECK-NOTES: :[[@LINE-1]]:12: warning: backward branch (do loop) is ID-dependent due to member reference to 'IDDepField' and may cause performance degradation [altera-id-dependent-backward-branch] - // CHECK-NOTES: :[[@LINE-39]]:3: note: assignment of ID-dependent field IDDepField + // CHECK-NOTES: :[[@LINE-18]]:3: note: assignment of ID-dependent field IDDepField + + // ==== Inferred Assignments ==== + int ThreadID2 = ThreadID * 2; + + for (int i = 0; i < ThreadID2; i++) { + // CHECK-NOTES: :[[@LINE-1]]:19: warning: backward branch (for loop) is ID-dependent due to variable reference to 'ThreadID2' and may cause performance degradation [altera-id-dependent-backward-branch] + // CHECK-NOTES: :[[@LINE-4]]:3: note: inferred assignment of ID-dependent value from ID-dependent variable ThreadID + accumulator++; + } + + // ==== Unused Inferred Assignments ==== + int UnusedThreadID = Example.IDDepField; // OK: not used in any loops + + struct { int IDDepField; } UnusedStruct; + UnusedStruct.IDDepField = ThreadID * 2; // OK: not used in any loops } void success() { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits