126 lines · c
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=CHECK2// 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=CHECK3 4#include <immintrin.h>5 6void test_incsspd(int a) {7 // CHECK-LABEL: @test_incsspd8 // CHECK: call void @llvm.x86.incsspd(i32 %{{[0-9]+}})9 _incsspd(a);10}11 12#ifdef __x86_64__13void test_incsspq(int a) {14 // X86_64-LABEL: @test_incsspq15 // X86_64: call void @llvm.x86.incsspq(i64 %{{[a-z0-9.]+}})16 _incsspq(a);17}18 19void test_inc_ssp(unsigned int a) {20 // X86_64-LABEL: @test_inc_ssp21 // X86_64: call void @llvm.x86.incsspq(i64 %{{[a-z0-9.]+}})22 _inc_ssp(a);23}24#else25 26void test_inc_ssp(unsigned int a) {27 // I386-LABEL: @test_inc_ssp28 // I386: call void @llvm.x86.incsspd(i32 %{{[0-9]+}})29 _inc_ssp(a);30}31 32#endif33 34unsigned int test_rdsspd(unsigned int a) {35 // CHECK-LABEL: @test_rdsspd36 // CHECK: call i32 @llvm.x86.rdsspd(i32 %{{[a-z0-9.]+}})37 return _rdsspd(a);38}39 40unsigned int test_rdsspd_i32(void) {41 // CHECK-LABEL: @test_rdsspd_i3242 // CHECK: call i32 @llvm.x86.rdsspd(i32 %{{[a-z0-9.]+}})43 return _rdsspd_i32();44}45 46#ifdef __x86_64__47unsigned long long test_rdsspq(unsigned long long a) {48 // X86_64-LABEL: @test_rdsspq49 // X86_64: call i64 @llvm.x86.rdsspq(i64 %{{[a-z0-9.]+}})50 return _rdsspq(a);51}52 53unsigned long long test_rdsspq_i64(void) {54 // X86_64-LABEL: @test_rdsspq_i6455 // X86_64: call i64 @llvm.x86.rdsspq(i64 %{{[a-z0-9.]+}})56 return _rdsspq_i64();57}58 59unsigned long long test_get_ssp(void) {60 // X86_64-LABEL: @test_get_ssp61 // X86_64: call i64 @llvm.x86.rdsspq(i64 0)62 return _get_ssp();63}64 65#else66 67unsigned int test_get_ssp(void) {68 // I386-LABEL: @test_get_ssp69 // I386: call i32 @llvm.x86.rdsspd(i32 0)70 return _get_ssp();71}72 73#endif74 75void test_saveprevssp(void) {76 // CHECK-LABEL: @test_saveprevssp77 // CHECK: call void @llvm.x86.saveprevssp()78 _saveprevssp();79}80 81void test_rstorssp(void * __p) {82 // CHECK-LABEL: @test_rstorssp83 // CHECK: call void @llvm.x86.rstorssp(ptr %{{[a-z0-9.]+}})84 _rstorssp(__p);85}86 87void test_wrssd(unsigned int __a, void * __p) {88 // CHECK-LABEL: @test_wrssd89 // CHECK: call void @llvm.x86.wrssd(i32 %{{[a-z0-9.]+}}, ptr %{{[a-z0-9.]+}})90 _wrssd(__a, __p);91}92 93#ifdef __x86_64__94void test_wrssq(unsigned long long __a, void * __p) {95 // X86_64-LABEL: @test_wrssq96 // X86_64: call void @llvm.x86.wrssq(i64 %{{[a-z0-9.]+}}, ptr %{{[a-z0-9.]+}})97 _wrssq(__a, __p);98}99#endif100 101void test_wrussd(unsigned int __a, void * __p) {102 // CHECK-LABEL: @test_wrussd103 // CHECK: call void @llvm.x86.wrussd(i32 %{{[a-z0-9.]+}}, ptr %{{[a-z0-9.]+}})104 _wrussd(__a, __p);105}106 107#ifdef __x86_64__108void test_wrussq(unsigned long long __a, void * __p) {109 // X86_64-LABEL: @test_wrussq110 // X86_64: call void @llvm.x86.wrussq(i64 %{{[a-z0-9.]+}}, ptr %{{[a-z0-9.]+}})111 _wrussq(__a, __p);112}113#endif114 115void test_setssbsy(void) {116 // CHECK-LABEL: @test_setssbsy117 // CHECK: call void @llvm.x86.setssbsy()118 _setssbsy();119}120 121void test_clrssbsy(void * __p) {122 // CHECK-LABEL: @test_clrssbsy123 // CHECK: call void @llvm.x86.clrssbsy(ptr %{{[a-z0-9.]+}})124 _clrssbsy(__p);125}126