Index: test/CodeGen/pragma-do-while-unroll.cpp =================================================================== --- /dev/null +++ test/CodeGen/pragma-do-while-unroll.cpp @@ -0,0 +1,37 @@ +// RUN: %clang_cc1 -O3 -funroll-loops -S -emit-llvm %s -o - | FileCheck %s +int test(int a[], int n) { + int i = 0; + int sum = 0; + +#pragma unroll 3 + do + //CHECK: do.body: + //CHECK: store i32 %add + //CHECK: store i32 %add.1 + //CHECK: store i32 %add.2 + //CHECK-NOT: store i32 %add.3 + { + a[i] = a[i] + 1; + sum = sum + a[i]; + i++; + } while (i < n); + + i = 0; + +#pragma unroll 5 + do + //CHECK: do.body{{[0-9]+}}: + //CHECK: store i32 %add{{[0-9]+}} + //CHECK: store i32 %add{{[0-9]+}}.1 + //CHECK: store i32 %add{{[0-9]+}}.2 + //CHECK: store i32 %add{{[0-9]+}}.3 + //CHECK: store i32 %add{{[0-9]+}}.4 + //CHECK-NOT: store i32 %add{{[0-9]+}}.5 + { + a[i] = a[i] + 1; + sum = sum + a[i]; + i++; + } while (i < n); + + return sum; +} Index: test/CodeGen/pragma-do-while.cpp =================================================================== --- /dev/null +++ test/CodeGen/pragma-do-while.cpp @@ -0,0 +1,31 @@ +// RUN: %clang_cc1 -O3 -fno-unroll-loops -S -emit-llvm %s -o - | FileCheck %s +int test(int a[], int n) { + int i = 0; + int sum = 0; + +//CHECK-NOT: llvm.loop + +#pragma unroll 4 + do + //CHECK: do.body: + //CHECK: llvm.loop + { + a[i] = a[i] + 1; + sum = sum + a[i]; + i++; + } while (i < n); + + i = 0; + +#pragma unroll 8 + do + //CHECK: do.body{{[0-9]+}}: + //CHECK: llvm.loop + { + a[i] = a[i] + 1; + sum = sum + a[i]; + i++; + } while (i < n); + + return sum; +}