1ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// RUN: %clang_cc1 -emit-pch -o %t.a %s 2ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// RUN: %clang_cc1 -include-pch %t.a %s -ast-print -o - | FileCheck %s 3ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 4ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// FIXME: A bug in ParsedAttributes causes the order of the attributes to be 5ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// reversed. The checks are consequently in the reverse order below. 6ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 7ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: #pragma clang loop unroll_count(16) 8ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: #pragma clang loop interleave_count(8) 9ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: #pragma clang loop vectorize_width(4) 10ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: #pragma clang loop unroll(disable) 11ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: #pragma clang loop interleave(disable) 12ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: #pragma clang loop vectorize(enable) 13ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: #pragma clang loop unroll(enable) 14ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: #pragma clang loop interleave(enable) 15ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: #pragma clang loop vectorize(disable) 16ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 17ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#ifndef HEADER 18ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define HEADER 19ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 20ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass pragma_test { 21ef8225444452a1486bd721f3285301fe84643b00Stephen Hinespublic: 22ef8225444452a1486bd721f3285301fe84643b00Stephen Hines inline void run1(int *List, int Length) { 23ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int i = 0; 24ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma clang loop vectorize_width(4) 25ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma clang loop interleave_count(8) 26ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma clang loop unroll_count(16) 27ef8225444452a1486bd721f3285301fe84643b00Stephen Hines while (i < Length) { 28ef8225444452a1486bd721f3285301fe84643b00Stephen Hines List[i] = i; 29ef8225444452a1486bd721f3285301fe84643b00Stephen Hines i++; 30ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 31ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 32ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 33ef8225444452a1486bd721f3285301fe84643b00Stephen Hines inline void run2(int *List, int Length) { 34ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int i = 0; 35ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma clang loop vectorize(enable) 36ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma clang loop interleave(disable) 37ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma clang loop unroll(disable) 38ef8225444452a1486bd721f3285301fe84643b00Stephen Hines while (i - 1 < Length) { 39ef8225444452a1486bd721f3285301fe84643b00Stephen Hines List[i] = i; 40ef8225444452a1486bd721f3285301fe84643b00Stephen Hines i++; 41ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 42ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 43ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 44ef8225444452a1486bd721f3285301fe84643b00Stephen Hines inline void run3(int *List, int Length) { 45ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int i = 0; 46ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma clang loop vectorize(disable) 47ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma clang loop interleave(enable) 48ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma clang loop unroll(enable) 49ef8225444452a1486bd721f3285301fe84643b00Stephen Hines while (i - 3 < Length) { 50ef8225444452a1486bd721f3285301fe84643b00Stephen Hines List[i] = i; 51ef8225444452a1486bd721f3285301fe84643b00Stephen Hines i++; 52ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 53ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 54ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}; 55ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 56ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#else 57ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 58ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesvoid test() { 59ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int List[100]; 60ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 61ef8225444452a1486bd721f3285301fe84643b00Stephen Hines pragma_test pt; 62ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 63ef8225444452a1486bd721f3285301fe84643b00Stephen Hines pt.run1(List, 100); 64ef8225444452a1486bd721f3285301fe84643b00Stephen Hines pt.run2(List, 100); 65ef8225444452a1486bd721f3285301fe84643b00Stephen Hines pt.run3(List, 100); 66ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} 67ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 68ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#endif 69