38 lines · cpp
1// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +sme2 -x c++ -std=c++20 -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK2 3struct TestStruct;4 5__arm_new("za", "zt0") void test(TestStruct& TS,6 void (TestStruct::*streaming_member_ptr)() __arm_streaming,7 void (TestStruct::*streaming_compat_member)() __arm_streaming_compatible,8 void (TestStruct::*arm_in_member)() __arm_in("za", "zt0"),9 void (TestStruct::*arm_inout_member)() __arm_inout("za", "zt0"),10 void (TestStruct::*arm_preserves_member)() __arm_preserves("za", "zt0"),11 void (TestStruct::*arm_agnostic_member)() __arm_agnostic("sme_za_state")) {12 13 // CHECK: call void %{{.*}} [[STREAMING_MEMBER_CALL_ATTRS:#.+]]14 (TS.*streaming_member_ptr)();15 16 // CHECK: call void %{{.*}} [[STREAMING_COMPAT_MEMBER_CALL_ATTRS:#.+]]17 (TS.*streaming_compat_member)();18 19 // CHECK: call void %{{.*}} [[ARM_IN_MEMBER_CALL_ATTRS:#.+]]20 (TS.*arm_in_member)();21 22 // CHECK: call void %{{.*}} [[ARM_INOUT_MEMBER_CALL_ATTRS:#.+]]23 (TS.*arm_inout_member)();24 25 // CHECK: call void %{{.*}} [[ARM_PRESERVES_MEMBER_CALL_ATTRS:#.+]]26 (TS.*arm_preserves_member)();27 28 // CHECK: call void %{{.*}} [[ARM_AGNOSTIC_MEMBER_CALL_ATTRS:#.+]]29 (TS.*arm_agnostic_member)();30}31 32// CHECK: attributes [[STREAMING_MEMBER_CALL_ATTRS]] = { "aarch64_pstate_sm_enabled" }33// CHECK: attributes [[STREAMING_COMPAT_MEMBER_CALL_ATTRS]] = { "aarch64_pstate_sm_compatible" }34// CHECK: attributes [[ARM_IN_MEMBER_CALL_ATTRS]] = { "aarch64_in_za" "aarch64_in_zt0" }35// CHECK: attributes [[ARM_INOUT_MEMBER_CALL_ATTRS]] = { "aarch64_inout_za" "aarch64_inout_zt0" }36// CHECK: attributes [[ARM_PRESERVES_MEMBER_CALL_ATTRS]] = { "aarch64_preserves_za" "aarch64_preserves_zt0" }37// CHECK: attributes [[ARM_AGNOSTIC_MEMBER_CALL_ATTRS]] = { "aarch64_za_state_agnostic" }38