brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 2071e66 Raw
94 lines · c
1// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -emit-llvm -target-feature +sme -target-feature +sme2 %s -DUSE_FLATTEN -o - | FileCheck %s2// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -emit-llvm -target-feature +sme -target-feature +sme2 %s -DUSE_ALWAYS_INLINE_STMT -o - | FileCheck %s3 4// REQUIRES: aarch64-registered-target5 6extern void was_inlined(void);7 8#if defined(USE_FLATTEN)9    #define FN_ATTR __attribute__((flatten))10    #define STMT_ATTR11#elif defined(USE_ALWAYS_INLINE_STMT)12    #define FN_ATTR13    #define STMT_ATTR [[clang::always_inline]]14#else15    #error Expected USE_FLATTEN or USE_ALWAYS_INLINE_STMT to be defined.16#endif17 18void fn(void) { was_inlined(); }19void fn_streaming_compatible(void) __arm_streaming_compatible { was_inlined(); }20void fn_streaming(void) __arm_streaming { was_inlined(); }21__arm_locally_streaming void fn_locally_streaming(void) { was_inlined(); }22__arm_new("za") void fn_streaming_new_za(void) __arm_streaming { was_inlined(); }23__arm_new("zt0") void fn_streaming_new_zt0(void) __arm_streaming { was_inlined(); }24 25FN_ATTR26void caller(void) {27    STMT_ATTR fn();28    STMT_ATTR fn_streaming_compatible();29    STMT_ATTR fn_streaming();30    STMT_ATTR fn_locally_streaming();31    STMT_ATTR fn_streaming_new_za();32    STMT_ATTR fn_streaming_new_zt0();33}34// CHECK-LABEL: void @caller()35//  CHECK-NEXT: entry:36//  CHECK-NEXT:   call void @was_inlined37//  CHECK-NEXT:   call void @was_inlined38//  CHECK-NEXT:   call void @fn_streaming39//  CHECK-NEXT:   call void @fn_locally_streaming40//  CHECK-NEXT:   call void @fn_streaming_new_za41//  CHECK-NEXT:   call void @fn_streaming_new_zt042 43FN_ATTR void caller_streaming_compatible(void) __arm_streaming_compatible {44    STMT_ATTR fn();45    STMT_ATTR fn_streaming_compatible();46    STMT_ATTR fn_streaming();47    STMT_ATTR fn_locally_streaming();48    STMT_ATTR fn_streaming_new_za();49    STMT_ATTR fn_streaming_new_zt0();50}51// CHECK-LABEL: void @caller_streaming_compatible()52//  CHECK-NEXT: entry:53//  CHECK-NEXT:   call void @fn54//  CHECK-NEXT:   call void @was_inlined55//  CHECK-NEXT:   call void @fn_streaming56//  CHECK-NEXT:   call void @fn_locally_streaming57//  CHECK-NEXT:   call void @fn_streaming_new_za58//  CHECK-NEXT:   call void @fn_streaming_new_zt059 60FN_ATTR void caller_streaming(void) __arm_streaming {61    STMT_ATTR fn();62    STMT_ATTR fn_streaming_compatible();63    STMT_ATTR fn_streaming();64    STMT_ATTR fn_locally_streaming();65    STMT_ATTR fn_streaming_new_za();66    STMT_ATTR fn_streaming_new_zt0();67}68// CHECK-LABEL: void @caller_streaming()69//  CHECK-NEXT: entry:70//  CHECK-NEXT:   call void @fn71//  CHECK-NEXT:   call void @was_inlined72//  CHECK-NEXT:   call void @was_inlined73//  CHECK-NEXT:   call void @was_inlined74//  CHECK-NEXT:   call void @fn_streaming_new_za75//  CHECK-NEXT:   call void @fn_streaming_new_zt076 77FN_ATTR __arm_locally_streaming78void caller_locally_streaming(void) {79    STMT_ATTR fn();80    STMT_ATTR fn_streaming_compatible();81    STMT_ATTR fn_streaming();82    STMT_ATTR fn_locally_streaming();83    STMT_ATTR fn_streaming_new_za();84    STMT_ATTR fn_streaming_new_zt0();85}86// CHECK-LABEL: void @caller_locally_streaming()87//  CHECK-NEXT: entry:88//  CHECK-NEXT:   call void @fn89//  CHECK-NEXT:   call void @was_inlined90//  CHECK-NEXT:   call void @was_inlined91//  CHECK-NEXT:   call void @was_inlined92//  CHECK-NEXT:   call void @fn_streaming_new_za93//  CHECK-NEXT:   call void @fn_streaming_new_zt094