brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.8 KiB · 2e8b871 Raw
246 lines · c
1// RUN: %clang_cc1 -std=c89 -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=C99 %s2// RUN: %clang_cc1 -std=c99 -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=C99 %s3// RUN: %clang_cc1 -std=c11 -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=C11 %s4// RUN: %clang_cc1 -std=c18 -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=C11 %s5// RUN: %clang_cc1 -std=c2x -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=C11 %s6//7// Check -ffinite-loops option in combination with various standard versions.8// RUN: %clang_cc1 -std=c89 -ffinite-loops -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=FINITE %s9// RUN: %clang_cc1 -std=c99 -ffinite-loops -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=FINITE %s10// RUN: %clang_cc1 -std=c11 -ffinite-loops -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=FINITE %s11// RUN: %clang_cc1 -std=c18 -ffinite-loops -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=FINITE %s12// RUN: %clang_cc1 -std=c2x -ffinite-loops -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=FINITE %s13//14// Check -fno-finite-loops option in combination with various standard versions.15// RUN: %clang_cc1 -std=c89 -fno-finite-loops -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=C99 %s16// RUN: %clang_cc1 -std=c99 -fno-finite-loops -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=C99 %s17// RUN: %clang_cc1 -std=c11 -fno-finite-loops -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=C99 %s18// RUN: %clang_cc1 -std=c18 -fno-finite-loops -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=C99 %s19// RUN: %clang_cc1 -std=c2x -fno-finite-loops -triple=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix=CHECK --check-prefix=C99 %s20 21int a = 0;22int b = 0;23 24// CHECK: datalayout25//26// CHECK-NOT: mustprogress27// CHECK-LABEL: @f0(28// CHECK-NEXT:  entry:29// CHECK-NEXT:    br label %for.cond30// CHECK:       for.cond:31// C99-NOT:       br {{.*}}!llvm.loop32// C11-NOT:       br {{.*}}!llvm.loop33// FINITE-NOR:    br {{.*}}!llvm.loop34//35void f0(void) {36  for (; ;) ;37}38 39// CHECK-NOT: mustprogress40// CHECK-LABEL: @f1(41// CHECK-NEXT:  entry:42// CHECK-NEXT:    br label %for.cond43// CHECK:       for.cond:44// CHECK-NEXT:    br i1 true, label %for.body, label %for.end45// CHECK:       for.body:46// C99-NOT:       br {{.*}}, !llvm.loop47// C11-NOT:       br {{.*}}, !llvm.loop48// FINITE-NOT:    br {{.*}}, !llvm.loop49// CHECK:       for.end:50// CHECK-NEXT:    ret void51//52void f1(void) {53  for (; 1;) {54  }55}56 57// CHECK-NOT: mustprogress58// CHECK-LABEL: @f2(59// CHECK-NEXT:  entry:60// CHECK-NEXT:    br label %for.cond61// CHECK:       for.cond:62// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr @a, align 463// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr @b, align 464// CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]65// CHECK-NEXT:    br i1 [[CMP]], label %for.body, label %for.end66// CHECK:       for.body:67// C99-NOT:       br {{.*}} !llvm.loop68// C11:           br label %for.cond, !llvm.loop [[LOOP1:!.*]]69// FINITE:        br label %for.cond, !llvm.loop [[LOOP1:!.*]]70// CHECK:       for.end:71// CHECK-NEXT:    ret void72//73void f2(void) {74  for (; a == b;) {75  }76}77 78// CHECK-NOT: mustprogress79// CHECK-LABEL: @F(80// CHECK-NEXT:  entry:81// CHECK-NEXT:    br label %for.cond82// CHECK:       for.cond:83// CHECK-NEXT:    br i1 true, label %for.body, label %for.end84// CHECK:       for.body:85// C99-NOT:       br {{.*}}, !llvm.loop86// C11-NOT:       br {{.*}}, !llvm.loop87// FINITE-NOT:    br {{.*}}, !llvm.loop88// CHECK:       for.end:89// CHECK-NEXT:    br label %for.cond190// CHECK:       for.cond1:91// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr @a, align 492// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr @b, align 493// CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]94// CHECK-NEXT:    br i1 [[CMP]], label %for.body2, label %for.end395// CHECK:       for.body2:96// C99-NOT:       br {{.*}}, !llvm.loop97// C11:           br label %for.cond1, !llvm.loop [[LOOP2:!.*]]98// FINITE:        br label %for.cond1, !llvm.loop [[LOOP2:!.*]]99// CHECK:       for.end3:100// CHECK-NEXT:    ret void101//102void F(void) {103  for (; 1;) {104  }105  for (; a == b;) {106  }107}108 109// CHECK-NOT: mustprogress110// CHECK-LABEL: @w1(111// CHECK-NEXT:  entry:112// CHECK-NEXT:    br label %while.body113// CHECK:       while.body:114// C99-NOT:       br {{.*}}, !llvm.loop115// C11-NOT:       br {{.*}}, !llvm.loop116// FINITE-NOT:    br {{.*}}, !llvm.loop117//118void w1(void) {119  while (1) {120  }121}122 123// CHECK-NOT: mustprogress124// CHECK-LABEL: @w2(125// CHECK-NEXT:  entry:126// CHECK-NEXT:    br label %while.cond127// CHECK:       while.cond:128// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr @a, align 4129// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr @b, align 4130// CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]131// CHECK-NEXT:    br i1 [[CMP]], label %while.body, label %while.end132// CHECK:       while.body:133// C99-NOT:       br {{.*}}, !llvm.loop134// C11:           br label %while.cond, !llvm.loop [[LOOP3:!.*]]135// FINITE:        br label %while.cond, !llvm.loop [[LOOP3:!.*]]136// CHECK:       while.end:137// CHECK-NEXT:    ret void138//139void w2(void) {140  while (a == b) {141  }142}143 144// CHECK-NOT: mustprogress145// CHECK-LABEL: @W(146// CHECK-NEXT:  entry:147// CHECK-NEXT:    br label [[WHILE_COND:%.*]]148// CHECK:       while.cond:149// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr @a, align 4150// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr @b, align 4151// CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]152// CHECK-NEXT:    br i1 [[CMP]], label %while.body, label %while.end153// CHECK:       while.body:154// C99-NOT:       br {{.*}} !llvm.loop155// C11-NEXT:      br label %while.cond, !llvm.loop [[LOOP4:!.*]]156// FINITE-NEXT:   br label %while.cond, !llvm.loop [[LOOP4:!.*]]157// CHECK:       while.end:158// CHECK-NEXT:    br label %while.body2159// CHECK:       while.body2:160// C99-NOT:       br {{.*}} !llvm.loop161// C11-NOT:       br {{.*}} !llvm.loop162// FINITE-NOT:    br {{.*}} !llvm.loop163//164void W(void) {165  while (a == b) {166  }167  while (1) {168  }169}170 171// CHECK-NOT: mustprogress172// CHECK-LABEL: @d1(173// CHECK-NEXT:  entry:174// CHECK-NEXT:    br label %do.body175// CHECK:       do.body:176// CHECK-NEXT:    br label %do.cond177// CHECK:       do.cond:178// C99-NOT:       br {{.*}}, !llvm.loop179// C11-NOT:       br {{.*}}, !llvm.loop180// FINITE-NOT:    br {{.*}}, !llvm.loop181// CHECK:       do.end:182// CHECK-NEXT:    ret void183//184void d1(void) {185  do {186  } while (1);187}188 189// CHECK-NOT: mustprogress190// CHECK-LABEL: @d2(191// CHECK-NEXT:  entry:192// CHECK-NEXT:    br label %do.body193// CHECK:       do.body:194// CHECK-NEXT:    br label %do.cond195// CHECK:       do.cond:196// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr @a, align 4197// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr @b, align 4198// CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]199// C99-NOT:       br {{.*}}, !llvm.loop200// C11:           br i1 [[CMP]], label %do.body, label %do.end, !llvm.loop [[LOOP5:!.*]]201// FINITE:        br i1 [[CMP]], label %do.body, label %do.end, !llvm.loop [[LOOP5:!.*]]202// CHECK:       do.end:203// CHECK-NEXT:    ret void204//205void d2(void) {206  do {207  } while (a == b);208}209 210// CHECK-NOT: mustprogress211// CHECK-LABEL: @D(212// CHECK-NEXT:  entry:213// CHECK-NEXT:    br label %do.body214// CHECK:       do.body:215// CHECK-NEXT:    br label %do.cond216// CHECK:       do.cond:217// CHECK-NOT:     br label {{.*}}, !llvm.loop218// CHECK:       do.end:219// CHECK-NEXT:    br label %do.body1220// CHECK:       do.body1:221// CHECK-NEXT:    br label %do.cond2222// CHECK:       do.cond2:223// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr @a, align 4224// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr @b, align 4225// CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]226// C99-NOT:       br {{.*}}, !llvm.loop227// C11:           br i1 [[CMP]], label %do.body1, label %do.end3, !llvm.loop [[LOOP6:!.*]]228// FINITE:        br i1 [[CMP]], label %do.body1, label %do.end3, !llvm.loop [[LOOP6:!.*]]229// CHECK:       do.end3:230// CHECK-NEXT:    ret void231//232void D(void) {233  do {234  } while (1);235  do {236  } while (a == b);237}238 239// C11: [[LOOP1]] = distinct !{[[LOOP1]], [[MP:!.*]]}240// C11: [[MP]] = !{!"llvm.loop.mustprogress"}241// C11: [[LOOP2]] = distinct !{[[LOOP2]], [[MP]]}242// C11: [[LOOP3]] = distinct !{[[LOOP3]], [[MP]]}243// C11: [[LOOP4]] = distinct !{[[LOOP4]], [[MP]]}244// C11: [[LOOP5]] = distinct !{[[LOOP5]], [[MP]]}245// C11: [[LOOP6]] = distinct !{[[LOOP6]], [[MP]]}246