annotate clang/test/CodeGen/mangle.c @ 150:1d019706d866

LLVM10
author anatofuz
date Thu, 13 Feb 2020 15:10:13 +0900
parents
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 -triple i386-pc-linux-gnu -emit-llvm -o - %s | FileCheck %s
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 // CHECK: @foo
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 // Make sure we mangle overloadable, even in C system headers.
anatofuz
parents:
diff changeset
6 # 1 "somesystemheader.h" 1 3 4
anatofuz
parents:
diff changeset
7 // CHECK: @_Z2f0i
anatofuz
parents:
diff changeset
8 void __attribute__((__overloadable__)) f0(int a) {}
anatofuz
parents:
diff changeset
9 // CHECK: @_Z2f0l
anatofuz
parents:
diff changeset
10 void __attribute__((__overloadable__)) f0(long b) {}
anatofuz
parents:
diff changeset
11
anatofuz
parents:
diff changeset
12 // Unless it's unmarked.
anatofuz
parents:
diff changeset
13 // CHECK: @f0
anatofuz
parents:
diff changeset
14 void f0(float b) {}
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 // CHECK: @bar
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 // These should get merged.
anatofuz
parents:
diff changeset
19 void foo() __asm__("bar");
anatofuz
parents:
diff changeset
20 void foo2() __asm__("bar");
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 int nux __asm__("foo");
anatofuz
parents:
diff changeset
23 extern float nux2 __asm__("foo");
anatofuz
parents:
diff changeset
24
anatofuz
parents:
diff changeset
25 int test() {
anatofuz
parents:
diff changeset
26 foo();
anatofuz
parents:
diff changeset
27 foo2();
anatofuz
parents:
diff changeset
28
anatofuz
parents:
diff changeset
29 return nux + nux2;
anatofuz
parents:
diff changeset
30 }
anatofuz
parents:
diff changeset
31
anatofuz
parents:
diff changeset
32
anatofuz
parents:
diff changeset
33 // Function becomes a variable.
anatofuz
parents:
diff changeset
34 void foo3() __asm__("var");
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 void test2() {
anatofuz
parents:
diff changeset
37 foo3();
anatofuz
parents:
diff changeset
38 }
anatofuz
parents:
diff changeset
39 int foo4 __asm__("var") = 4;
anatofuz
parents:
diff changeset
40
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 // Variable becomes a function
anatofuz
parents:
diff changeset
43 extern int foo5 __asm__("var2");
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 void test3() {
anatofuz
parents:
diff changeset
46 foo5 = 1;
anatofuz
parents:
diff changeset
47 }
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 void foo6() __asm__("var2");
anatofuz
parents:
diff changeset
50 void foo6() {
anatofuz
parents:
diff changeset
51 }
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53
anatofuz
parents:
diff changeset
54
anatofuz
parents:
diff changeset
55 int foo7 __asm__("foo7") __attribute__((used));
anatofuz
parents:
diff changeset
56 float foo8 __asm__("foo7") = 42;
anatofuz
parents:
diff changeset
57
anatofuz
parents:
diff changeset
58 // PR4412
anatofuz
parents:
diff changeset
59 int func(void);
anatofuz
parents:
diff changeset
60 extern int func (void) __asm__ ("FUNC");
anatofuz
parents:
diff changeset
61
anatofuz
parents:
diff changeset
62 // CHECK: @FUNC
anatofuz
parents:
diff changeset
63 int func(void) {
anatofuz
parents:
diff changeset
64 return 42;
anatofuz
parents:
diff changeset
65 }
anatofuz
parents:
diff changeset
66
anatofuz
parents:
diff changeset
67 // CHECK: @_Z4foo9Dv4_f
anatofuz
parents:
diff changeset
68 typedef __attribute__(( vector_size(16) )) float float4;
anatofuz
parents:
diff changeset
69 void __attribute__((__overloadable__)) foo9(float4 f) {}
anatofuz
parents:
diff changeset
70
anatofuz
parents:
diff changeset
71 // Intrinsic calls.
anatofuz
parents:
diff changeset
72 extern int llvm_cas(volatile int*, int, int)
anatofuz
parents:
diff changeset
73 __asm__("llvm.atomic.cmp.swap.i32.p0i32");
anatofuz
parents:
diff changeset
74
anatofuz
parents:
diff changeset
75 int foo10(volatile int* add, int from, int to) {
anatofuz
parents:
diff changeset
76 // CHECK: call i32 @llvm.atomic.cmp.swap.i32.p0i32
anatofuz
parents:
diff changeset
77 return llvm_cas(add, from, to);
anatofuz
parents:
diff changeset
78 }