Mercurial > hg > CbC > CbC_llvm
view clang/test/Misc/loop-opt-setup.c @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | 1d019706d866 |
children | c4bab56944e8 |
line wrap: on
line source
// This tests loop unrolling and loop deletion (enabled under -O1) // RUN: %clang_cc1 -std=c11 -O1 -fno-unroll-loops -S -o - %s -emit-llvm | FileCheck %s // RUN: %clang_cc1 -std=c99 -O1 -fno-unroll-loops -S -o - %s -emit-llvm | FileCheck %s --check-prefix C99 extern int a[16]; int b = 0; int foo(void) { #pragma unroll for (int i = 0; i < 16; ++i) a[i] = b += 2; return b; } // Check br i1 to make sure that the loop is fully unrolled // CHECK-LABEL: foo // CHECK-NOT: br i1 void Helper() { const int *nodes[5]; int num_active = 5; while (num_active) #pragma clang loop unroll(full) for (int i = 0; i < 5; ++i) if (nodes[i]) --num_active; } // Check br i1 to make sure the loop is gone, there will still be a label branch for the infinite loop. // In C99, there was no forward progress requirement, so we expect the infinite loop to still exist, // but for C11 and onwards, the infinite loop can be deleted. // CHECK-LABEL: Helper // C99: br label // C99-NOT: br i1 // C99: br label // CHECK: entry: // CHECK-NOT: br i1 // CHECK-NEXT: ret void