12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// RUN: %clang_cc1 -ast-print %s -o - | FileCheck %s
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// FIXME: A bug in ParsedAttributes causes the order of the attributes to be
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// reversed. The checks are consequently in the reverse order below.
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CHECK: #pragma clang loop interleave_count(8)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CHECK-NEXT: #pragma clang loop vectorize_width(4)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void test(int *List, int Length) {
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int i = 0;
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#pragma clang loop vectorize_width(4)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#pragma clang loop interleave_count(8)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CHECK-NEXT: while (i < Length)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  while (i < Length) {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    List[i] = i * 2;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    i++;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CHECK: #pragma clang loop interleave(disable)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CHECK-NEXT: #pragma clang loop vectorize(enable)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#pragma clang loop vectorize(enable)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#pragma clang loop interleave(disable)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CHECK-NEXT: while (i - 1 < Length)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  while (i - 1 < Length) {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    List[i] = i * 2;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    i++;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CHECK: #pragma clang loop interleave(enable)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CHECK-NEXT: #pragma clang loop vectorize(disable)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#pragma clang loop vectorize(disable)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#pragma clang loop interleave(enable)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CHECK-NEXT: while (i - 2 < Length)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  while (i - 2 < Length) {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    List[i] = i * 2;
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    i++;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)