]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/lifetime2.c
Vendor import of clang trunk r290819:
[FreeBSD/FreeBSD.git] / test / CodeGen / lifetime2.c
1 // RUN: %clang -S -emit-llvm -o - -O2 %s | FileCheck %s -check-prefixes=CHECK,O2
2 // RUN: %clang -S -emit-llvm -o - -O0 %s | FileCheck %s -check-prefixes=CHECK,O0
3
4 extern int bar(char *A, int n);
5
6 // CHECK-LABEL: @foo
7 // O0-NOT: @llvm.lifetime.start
8 int foo (int n) {
9   if (n) {
10 // O2: @llvm.lifetime.start
11     char A[100];
12     return bar(A, 1);
13   } else {
14 // O2: @llvm.lifetime.start
15     char A[100];
16     return bar(A, 2);
17   }
18 }
19
20 // CHECK-LABEL: @no_goto_bypass
21 void no_goto_bypass() {
22   // O2: @llvm.lifetime.start(i64 1
23   char x;
24 l1:
25   bar(&x, 1);
26   // O2: @llvm.lifetime.start(i64 5
27   // O2: @llvm.lifetime.end(i64 5
28   char y[5];
29   bar(y, 5);
30   goto l1;
31   // Infinite loop
32   // O2-NOT: @llvm.lifetime.end(i64 1
33 }
34
35 // CHECK-LABEL: @goto_bypass
36 void goto_bypass() {
37   {
38     // O2-NOT: @llvm.lifetime.start(i64 1
39     // O2-NOT: @llvm.lifetime.end(i64 1
40     char x;
41   l1:
42     bar(&x, 1);
43   }
44   goto l1;
45 }
46
47 // CHECK-LABEL: @no_switch_bypass
48 void no_switch_bypass(int n) {
49   switch (n) {
50   case 1: {
51     // O2: @llvm.lifetime.start(i64 1
52     // O2: @llvm.lifetime.end(i64 1
53     char x;
54     bar(&x, 1);
55     break;
56   }
57   case 2:
58     n = n;
59     // O2: @llvm.lifetime.start(i64 5
60     // O2: @llvm.lifetime.end(i64 5
61     char y[5];
62     bar(y, 5);
63     break;
64   }
65 }
66
67 // CHECK-LABEL: @switch_bypass
68 void switch_bypass(int n) {
69   switch (n) {
70   case 1:
71     n = n;
72     // O2-NOT: @llvm.lifetime.start(i64 1
73     // O2-NOT: @llvm.lifetime.end(i64 1
74     char x;
75     bar(&x, 1);
76     break;
77   case 2:
78     bar(&x, 1);
79     break;
80   }
81 }
82
83 // CHECK-LABEL: @indirect_jump
84 void indirect_jump(int n) {
85   char x;
86   // O2-NOT: @llvm.lifetime
87   void *T[] = {&&L};
88   goto *T[n];
89 L:
90   bar(&x, 1);
91 }