147 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// REQUIRES: aarch64-registered-target3// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -O1 -Werror -emit-llvm -o - %s | FileCheck %s4// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK5// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -S -disable-O0-optnone -Werror -Wall -o /dev/null %s6 7#include <arm_sme.h>8 9// CHECK-LABEL: @test_in_streaming_mode_streaming_compatible(10// CHECK-NEXT: entry:11// CHECK-NEXT: [[TMP0:%.*]] = tail call i1 @llvm.aarch64.sme.in.streaming.mode()12// CHECK-NEXT: ret i1 [[TMP0]]13//14// CPP-CHECK-LABEL: @_Z43test_in_streaming_mode_streaming_compatiblev(15// CPP-CHECK-NEXT: entry:16// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i1 @llvm.aarch64.sme.in.streaming.mode()17// CPP-CHECK-NEXT: ret i1 [[TMP0]]18//19bool test_in_streaming_mode_streaming_compatible(void) __arm_streaming_compatible {20 return __arm_in_streaming_mode();21}22 23// CHECK-LABEL: @test_in_streaming_mode_streaming(24// CHECK-NEXT: entry:25// CHECK-NEXT: ret i1 true26//27// CPP-CHECK-LABEL: @_Z32test_in_streaming_mode_streamingv(28// CPP-CHECK-NEXT: entry:29// CPP-CHECK-NEXT: ret i1 true30//31bool test_in_streaming_mode_streaming(void) __arm_streaming {32//33 return __arm_in_streaming_mode();34}35 36// CHECK-LABEL: @test_in_streaming_mode_non_streaming(37// CHECK-NEXT: entry:38// CHECK-NEXT: ret i1 false39//40// CPP-CHECK-LABEL: @_Z36test_in_streaming_mode_non_streamingv(41// CPP-CHECK-NEXT: entry:42// CPP-CHECK-NEXT: ret i1 false43//44bool test_in_streaming_mode_non_streaming(void) {45 return __arm_in_streaming_mode();46}47 48// CHECK-LABEL: @test_za_disable(49// CHECK-NEXT: entry:50// CHECK-NEXT: tail call void @__arm_za_disable() #[[ATTR7:[0-9]+]]51// CHECK-NEXT: ret void52//53// CPP-CHECK-LABEL: @_Z15test_za_disablev(54// CPP-CHECK-NEXT: entry:55// CPP-CHECK-NEXT: tail call void @__arm_za_disable() #[[ATTR7:[0-9]+]]56// CPP-CHECK-NEXT: ret void57//58void test_za_disable(void) __arm_streaming_compatible {59 __arm_za_disable();60}61 62// CHECK-LABEL: @test_has_sme(63// CHECK-NEXT: entry:64// CHECK-NEXT: [[TMP0:%.*]] = tail call aarch64_sme_preservemost_from_x2 { i64, i64 } @__arm_sme_state() #[[ATTR7]]65// CHECK-NEXT: [[TMP1:%.*]] = extractvalue { i64, i64 } [[TMP0]], 066// CHECK-NEXT: [[TOBOOL_I:%.*]] = icmp slt i64 [[TMP1]], 067// CHECK-NEXT: ret i1 [[TOBOOL_I]]68//69// CPP-CHECK-LABEL: @_Z12test_has_smev(70// CPP-CHECK-NEXT: entry:71// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call aarch64_sme_preservemost_from_x2 { i64, i64 } @__arm_sme_state() #[[ATTR7]]72// CPP-CHECK-NEXT: [[TMP1:%.*]] = extractvalue { i64, i64 } [[TMP0]], 073// CPP-CHECK-NEXT: [[TOBOOL_I:%.*]] = icmp slt i64 [[TMP1]], 074// CPP-CHECK-NEXT: ret i1 [[TOBOOL_I]]75//76bool test_has_sme(void) __arm_streaming_compatible {77 return __arm_has_sme();78}79 80// CHECK-LABEL: @test_svundef_za(81// CHECK-NEXT: entry:82// CHECK-NEXT: ret void83//84// CPP-CHECK-LABEL: @_Z15test_svundef_zav(85// CPP-CHECK-NEXT: entry:86// CPP-CHECK-NEXT: ret void87//88void test_svundef_za(void) __arm_streaming_compatible __arm_out("za") {89 svundef_za();90}91 92// CHECK-LABEL: @test_sc_memcpy(93// CHECK-NEXT: entry:94// CHECK-NEXT: [[CALL:%.*]] = tail call ptr @__arm_sc_memcpy(ptr noundef [[DEST:%.*]], ptr noundef [[SRC:%.*]], i64 noundef [[N:%.*]]) #[[ATTR7]]95// CHECK-NEXT: ret ptr [[CALL]]96//97// CPP-CHECK-LABEL: @_Z14test_sc_memcpyPvPKvm(98// CPP-CHECK-NEXT: entry:99// CPP-CHECK-NEXT: [[CALL:%.*]] = tail call ptr @__arm_sc_memcpy(ptr noundef [[DEST:%.*]], ptr noundef [[SRC:%.*]], i64 noundef [[N:%.*]]) #[[ATTR7]]100// CPP-CHECK-NEXT: ret ptr [[CALL]]101//102void *test_sc_memcpy(void *dest, const void *src, size_t n) __arm_streaming_compatible {103 return __arm_sc_memcpy(dest, src, n);104}105 106// CHECK-LABEL: @test_sc_memmove(107// CHECK-NEXT: entry:108// CHECK-NEXT: [[CALL:%.*]] = tail call ptr @__arm_sc_memmove(ptr noundef [[DEST:%.*]], ptr noundef [[SRC:%.*]], i64 noundef [[N:%.*]]) #[[ATTR7]]109// CHECK-NEXT: ret ptr [[CALL]]110//111// CPP-CHECK-LABEL: @_Z15test_sc_memmovePvPKvm(112// CPP-CHECK-NEXT: entry:113// CPP-CHECK-NEXT: [[CALL:%.*]] = tail call ptr @__arm_sc_memmove(ptr noundef [[DEST:%.*]], ptr noundef [[SRC:%.*]], i64 noundef [[N:%.*]]) #[[ATTR7]]114// CPP-CHECK-NEXT: ret ptr [[CALL]]115//116void *test_sc_memmove(void *dest, const void *src, size_t n) __arm_streaming_compatible {117 return __arm_sc_memmove(dest, src, n);118}119 120// CHECK-LABEL: @test_sc_memset(121// CHECK-NEXT: entry:122// CHECK-NEXT: [[CALL:%.*]] = tail call ptr @__arm_sc_memset(ptr noundef [[S:%.*]], i32 noundef [[C:%.*]], i64 noundef [[N:%.*]]) #[[ATTR7]]123// CHECK-NEXT: ret ptr [[CALL]]124//125// CPP-CHECK-LABEL: @_Z14test_sc_memsetPvim(126// CPP-CHECK-NEXT: entry:127// CPP-CHECK-NEXT: [[CALL:%.*]] = tail call ptr @__arm_sc_memset(ptr noundef [[S:%.*]], i32 noundef [[C:%.*]], i64 noundef [[N:%.*]]) #[[ATTR7]]128// CPP-CHECK-NEXT: ret ptr [[CALL]]129//130void *test_sc_memset(void *s, int c, size_t n) __arm_streaming_compatible {131 return __arm_sc_memset(s, c, n);132}133 134// CHECK-LABEL: @test_sc_memchr(135// CHECK-NEXT: entry:136// CHECK-NEXT: [[CALL:%.*]] = tail call ptr @__arm_sc_memchr(ptr noundef [[S:%.*]], i32 noundef [[C:%.*]], i64 noundef [[N:%.*]]) #[[ATTR7]]137// CHECK-NEXT: ret ptr [[CALL]]138//139// CPP-CHECK-LABEL: @_Z14test_sc_memchrPvim(140// CPP-CHECK-NEXT: entry:141// CPP-CHECK-NEXT: [[CALL:%.*]] = tail call ptr @__arm_sc_memchr(ptr noundef [[S:%.*]], i32 noundef [[C:%.*]], i64 noundef [[N:%.*]]) #[[ATTR7]]142// CPP-CHECK-NEXT: ret ptr [[CALL]]143//144void *test_sc_memchr(void *s, int c, size_t n) __arm_streaming_compatible {145 return __arm_sc_memchr(s, c, n);146}147