Alex Lorenz | 34ac9b5 | 2014-08-19 17:32:30 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -fprofile-instr-generate -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name loopmacro.c %s | FileCheck %s |
| 2 | |
| 3 | # define HASH_BITS 15 |
| 4 | #define MIN_MATCH 3 |
| 5 | #define H_SHIFT ((HASH_BITS+MIN_MATCH-1)/MIN_MATCH) |
| 6 | #define WMASK 0xFFFF |
| 7 | #define HASH_MASK 0xFFFF |
| 8 | #define UPDATE_HASH(h,c) (h = (((h)<<H_SHIFT) ^ (c)) & HASH_MASK) |
| 9 | #define INSERT_STRING(s, match_head) \ |
| 10 | (UPDATE_HASH(ins_h, window[(s) + MIN_MATCH-1]), \ |
| 11 | prev[(s) & WMASK] = match_head = head[ins_h], \ |
| 12 | head[ins_h] = (s)) |
| 13 | |
Justin Bogner | 4da909b | 2015-02-03 21:35:49 +0000 | [diff] [blame] | 14 | int main() { // CHECK: File 0, [[@LINE]]:12 -> [[@LINE+12]]:2 = #0 |
Alex Lorenz | 34ac9b5 | 2014-08-19 17:32:30 +0000 | [diff] [blame] | 15 | int strstart = 0; |
| 16 | int hash_head = 2; |
| 17 | int prev_length = 5; |
| 18 | int ins_h = 1; |
| 19 | int prev[32] = { 0 }; |
| 20 | int head[32] = { 0 }; |
| 21 | int window[1024] = { 0 }; |
Justin Bogner | 4da909b | 2015-02-03 21:35:49 +0000 | [diff] [blame] | 22 | do { // CHECK-NEXT: File 0, [[@LINE]]:6 -> [[@LINE+3]]:30 = (#0 + #1) |
Alex Lorenz | 34ac9b5 | 2014-08-19 17:32:30 +0000 | [diff] [blame] | 23 | strstart++; |
Justin Bogner | 4da909b | 2015-02-03 21:35:49 +0000 | [diff] [blame] | 24 | INSERT_STRING(strstart, hash_head); // CHECK-NEXT: Expansion,File 0, [[@LINE]]:7 -> [[@LINE]]:20 = (#0 + #1) (Expanded file = 1) |
Alex Lorenz | 34ac9b5 | 2014-08-19 17:32:30 +0000 | [diff] [blame] | 25 | } while (--prev_length != 0); |
| 26 | } |
Justin Bogner | 4da909b | 2015-02-03 21:35:49 +0000 | [diff] [blame] | 27 | // CHECK-NEXT: File 0, 24:21 -> 24:29 = (#0 + #1) |
| 28 | // CHECK-NEXT: File 0, 24:21 -> 24:29 = (#0 + #1) |
| 29 | // CHECK-NEXT: File 0, 24:21 -> 24:29 = (#0 + #1) |
| 30 | // CHECK-NEXT: File 0, 24:31 -> 24:40 = (#0 + #1) |
| 31 | // CHECK-NEXT: File 1, 10:4 -> 12:23 = (#0 + #1) |
| 32 | // CHECK-NEXT: Expansion,File 1, 10:5 -> 10:16 = (#0 + #1) (Expanded file = 2) |
| 33 | // CHECK-NEXT: File 1, 10:17 -> 10:22 = (#0 + #1) |
| 34 | // CHECK-NEXT: File 1, 10:17 -> 10:22 = (#0 + #1) |
| 35 | // CHECK-NEXT: File 1, 10:24 -> 10:32 = (#0 + #1) |
| 36 | // CHECK-NEXT: File 1, 10:33 -> 10:36 = (#0 + #1) |
| 37 | // CHECK-NEXT: File 1, 10:46 -> 10:49 = (#0 + #1) |
| 38 | // CHECK-NEXT: File 2, 8:26 -> 8:66 = (#0 + #1) |
| 39 | // CHECK-NEXT: Expansion,File 2, 8:38 -> 8:45 = (#0 + #1) (Expanded file = 3) |
| 40 | // CHECK-NEXT: File 3, 5:18 -> 5:53 = (#0 + #1) |