// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump %s | FileCheck %s using size_t = unsigned long long; // CHECK: LoopHintAttr {{.*}} Implicit unroll UnrollCount Numeric // CHECK: LoopHintAttr {{.*}} Implicit unroll UnrollCount Numeric // CHECK: LoopHintAttr {{.*}} Implicit unroll Unroll Disable // CHECK: LoopHintAttr {{.*}} Implicit unroll Unroll Disable template int value_dependent(int n) { constexpr int N = 100; auto init = [=]() { return Flag ? n : 0UL; }; auto cond = [=](size_t ix) { return Flag ? ix != 0 : ix < 10; }; auto iter = [=](size_t ix) { return Flag ? ix & ~(1ULL << __builtin_clzll(ix)) : ix + 1; }; #pragma unroll Flag ? 1 : N for (size_t ix = init(); cond(ix); ix = iter(ix)) { n *= n; } #pragma unroll Flag ? 0 : N for (size_t ix = init(); cond(ix); ix = iter(ix)) { n *= n; } return n; } void test_value_dependent(int n) { value_dependent(n); }