1 | // RUN: %clang_cc1 -ffreestanding %s -triple=i386-unknown-unknown -target-feature +shstk -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=I386 --check-prefix=CHECK |
2 | // RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +shstk -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=X86_64 --check-prefix=CHECK |
3 | |
4 | #include <immintrin.h> |
5 | |
6 | void test_incsspd(int a) { |
7 | // CHECK-LABEL: @test_incsspd |
8 | // CHECK: call void @llvm.x86.incsspd(i32 %{{[0-9]+}}) |
9 | _incsspd(a); |
10 | } |
11 | |
12 | #ifdef __x86_64__ |
13 | void test_incsspq(int a) { |
14 | // X86_64-LABEL: @test_incsspq |
15 | // X86_64: call void @llvm.x86.incsspq(i64 %{{[a-z0-9.]+}}) |
16 | _incsspq(a); |
17 | } |
18 | |
19 | void test_inc_ssp(unsigned int a) { |
20 | // X86_64-LABEL: @test_inc_ssp |
21 | // X86_64: call void @llvm.x86.incsspq(i64 %{{[a-z0-9.]+}}) |
22 | _inc_ssp(a); |
23 | } |
24 | #else |
25 | |
26 | void test_inc_ssp(unsigned int a) { |
27 | // I386-LABEL: @test_inc_ssp |
28 | // I386: call void @llvm.x86.incsspd(i32 %{{[0-9]+}}) |
29 | _inc_ssp(a); |
30 | } |
31 | |
32 | #endif |
33 | |
34 | unsigned int test_rdsspd(unsigned int a) { |
35 | // CHECK-LABEL: @test_rdsspd |
36 | // CHECK: call i32 @llvm.x86.rdsspd(i32 %{{[a-z0-9.]+}}) |
37 | return _rdsspd(a); |
38 | } |
39 | |
40 | #ifdef __x86_64__ |
41 | unsigned long long test_rdsspq(unsigned long long a) { |
42 | // X86_64-LABEL: @test_rdsspq |
43 | // X86_64: call i64 @llvm.x86.rdsspq(i64 %{{[a-z0-9.]+}}) |
44 | return _rdsspq(a); |
45 | } |
46 | |
47 | unsigned long long test_get_ssp(void) { |
48 | // X86_64-LABEL: @test_get_ssp |
49 | // X86_64: call i64 @llvm.x86.rdsspq(i64 0) |
50 | return _get_ssp(); |
51 | } |
52 | |
53 | #else |
54 | |
55 | unsigned int test_get_ssp(void) { |
56 | // I386-LABEL: @test_get_ssp |
57 | // I386: call i32 @llvm.x86.rdsspd(i32 0) |
58 | return _get_ssp(); |
59 | } |
60 | |
61 | #endif |
62 | |
63 | void test_saveprevssp() { |
64 | // CHECK-LABEL: @test_saveprevssp |
65 | // CHECK: call void @llvm.x86.saveprevssp() |
66 | _saveprevssp(); |
67 | } |
68 | |
69 | void test_rstorssp(void * __p) { |
70 | // CHECK-LABEL: @test_rstorssp |
71 | // CHECK: call void @llvm.x86.rstorssp(i8* %{{[a-z0-9.]+}}) |
72 | _rstorssp(__p); |
73 | } |
74 | |
75 | void test_wrssd(unsigned int __a, void * __p) { |
76 | // CHECK-LABEL: @test_wrssd |
77 | // CHECK: call void @llvm.x86.wrssd(i32 %{{[a-z0-9.]+}}, i8* %{{[a-z0-9.]+}}) |
78 | _wrssd(__a, __p); |
79 | } |
80 | |
81 | #ifdef __x86_64__ |
82 | void test_wrssq(unsigned long long __a, void * __p) { |
83 | // X86_64-LABEL: @test_wrssq |
84 | // X86_64: call void @llvm.x86.wrssq(i64 %{{[a-z0-9.]+}}, i8* %{{[a-z0-9.]+}}) |
85 | _wrssq(__a, __p); |
86 | } |
87 | #endif |
88 | |
89 | void test_wrussd(unsigned int __a, void * __p) { |
90 | // CHECK-LABEL: @test_wrussd |
91 | // CHECK: call void @llvm.x86.wrussd(i32 %{{[a-z0-9.]+}}, i8* %{{[a-z0-9.]+}}) |
92 | _wrussd(__a, __p); |
93 | } |
94 | |
95 | #ifdef __x86_64__ |
96 | void test_wrussq(unsigned long long __a, void * __p) { |
97 | // X86_64-LABEL: @test_wrussq |
98 | // X86_64: call void @llvm.x86.wrussq(i64 %{{[a-z0-9.]+}}, i8* %{{[a-z0-9.]+}}) |
99 | _wrussq(__a, __p); |
100 | } |
101 | #endif |
102 | |
103 | void test_setssbsy() { |
104 | // CHECK-LABEL: @test_setssbsy |
105 | // CHECK: call void @llvm.x86.setssbsy() |
106 | _setssbsy(); |
107 | } |
108 | |
109 | void test_clrssbsy(void * __p) { |
110 | // CHECK-LABEL: @test_clrssbsy |
111 | // CHECK: call void @llvm.x86.clrssbsy(i8* %{{[a-z0-9.]+}}) |
112 | _clrssbsy(__p); |
113 | } |
114 | |