11297ff17SAlexandros Lamprineas // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals all --include-generated-funcs --global-value-regex ".*" --version 5 28930ba98SAlexandros Lamprineas // RUN: %clang_cc1 -triple aarch64-linux-gnu -emit-llvm %s -o - | FileCheck %s 38930ba98SAlexandros Lamprineas 48930ba98SAlexandros Lamprineas namespace Name { 58930ba98SAlexandros Lamprineas int __attribute((target_version("default"))) foo() { return 0; } 68930ba98SAlexandros Lamprineas } 78930ba98SAlexandros Lamprineas 88930ba98SAlexandros Lamprineas namespace Name { 98930ba98SAlexandros Lamprineas int __attribute((target_version("sve"))) foo() { return 1; } 108930ba98SAlexandros Lamprineas } 118930ba98SAlexandros Lamprineas 128930ba98SAlexandros Lamprineas int bar() { return Name::foo(); } 138930ba98SAlexandros Lamprineas 148930ba98SAlexandros Lamprineas namespace OtherName { 158930ba98SAlexandros Lamprineas int __attribute((target_version("sve"))) foo() { return 2; } 168930ba98SAlexandros Lamprineas } 178930ba98SAlexandros Lamprineas 188930ba98SAlexandros Lamprineas int baz() { return OtherName::foo(); } 198930ba98SAlexandros Lamprineas 20d1c911ffSAlexandros Lamprineas namespace Foo { 21d1c911ffSAlexandros Lamprineas int bar(); 22d1c911ffSAlexandros Lamprineas __attribute((target_version("default"))) int bar() { return 0; } 23d1c911ffSAlexandros Lamprineas __attribute((target_version("mops"))) int bar() { return 1; } 24d1c911ffSAlexandros Lamprineas } 25d1c911ffSAlexandros Lamprineas 268930ba98SAlexandros Lamprineas //. 278930ba98SAlexandros Lamprineas // CHECK: @__aarch64_cpu_features = external dso_local global { i64 } 288930ba98SAlexandros Lamprineas // CHECK: @_ZN4Name3fooEv = weak_odr ifunc i32 (), ptr @_ZN4Name3fooEv.resolver 29d1c911ffSAlexandros Lamprineas // CHECK: @_ZN3Foo3barEv = weak_odr ifunc i32 (), ptr @_ZN3Foo3barEv.resolver 308930ba98SAlexandros Lamprineas //. 31*6586c676SAlexandros Lamprineas // CHECK-LABEL: define dso_local noundef i32 @_ZN4Name3fooEv.default( 32d1c911ffSAlexandros Lamprineas // CHECK-SAME: ) #[[ATTR0:[0-9]+]] { 338930ba98SAlexandros Lamprineas // CHECK-NEXT: [[ENTRY:.*:]] 34*6586c676SAlexandros Lamprineas // CHECK-NEXT: ret i32 0 35*6586c676SAlexandros Lamprineas // 36*6586c676SAlexandros Lamprineas // 37*6586c676SAlexandros Lamprineas // CHECK-LABEL: define dso_local noundef i32 @_ZN4Name3fooEv._Msve( 38*6586c676SAlexandros Lamprineas // CHECK-SAME: ) #[[ATTR1:[0-9]+]] { 39*6586c676SAlexandros Lamprineas // CHECK-NEXT: [[ENTRY:.*:]] 408930ba98SAlexandros Lamprineas // CHECK-NEXT: ret i32 1 418930ba98SAlexandros Lamprineas // 428930ba98SAlexandros Lamprineas // 438930ba98SAlexandros Lamprineas // CHECK-LABEL: define dso_local noundef i32 @_Z3barv( 44*6586c676SAlexandros Lamprineas // CHECK-SAME: ) #[[ATTR2:[0-9]+]] { 458930ba98SAlexandros Lamprineas // CHECK-NEXT: [[ENTRY:.*:]] 468930ba98SAlexandros Lamprineas // CHECK-NEXT: [[CALL:%.*]] = call noundef i32 @_ZN4Name3fooEv() 478930ba98SAlexandros Lamprineas // CHECK-NEXT: ret i32 [[CALL]] 488930ba98SAlexandros Lamprineas // 498930ba98SAlexandros Lamprineas // 508930ba98SAlexandros Lamprineas // CHECK-LABEL: define dso_local noundef i32 @_ZN9OtherName3fooEv._Msve( 51*6586c676SAlexandros Lamprineas // CHECK-SAME: ) #[[ATTR1]] { 528930ba98SAlexandros Lamprineas // CHECK-NEXT: [[ENTRY:.*:]] 538930ba98SAlexandros Lamprineas // CHECK-NEXT: ret i32 2 548930ba98SAlexandros Lamprineas // 558930ba98SAlexandros Lamprineas // 568930ba98SAlexandros Lamprineas // CHECK-LABEL: define dso_local noundef i32 @_Z3bazv( 57*6586c676SAlexandros Lamprineas // CHECK-SAME: ) #[[ATTR2]] { 588930ba98SAlexandros Lamprineas // CHECK-NEXT: [[ENTRY:.*:]] 598930ba98SAlexandros Lamprineas // CHECK-NEXT: [[CALL:%.*]] = call noundef i32 @_ZN9OtherName3fooEv() 608930ba98SAlexandros Lamprineas // CHECK-NEXT: ret i32 [[CALL]] 618930ba98SAlexandros Lamprineas // 628930ba98SAlexandros Lamprineas // 63d1c911ffSAlexandros Lamprineas // CHECK-LABEL: define dso_local noundef i32 @_ZN3Foo3barEv.default( 64*6586c676SAlexandros Lamprineas // CHECK-SAME: ) #[[ATTR0]] { 65d1c911ffSAlexandros Lamprineas // CHECK-NEXT: [[ENTRY:.*:]] 66d1c911ffSAlexandros Lamprineas // CHECK-NEXT: ret i32 0 67d1c911ffSAlexandros Lamprineas // 68d1c911ffSAlexandros Lamprineas // 69d1c911ffSAlexandros Lamprineas // CHECK-LABEL: define dso_local noundef i32 @_ZN3Foo3barEv._Mmops( 70461a0d6cSAlexandros Lamprineas // CHECK-SAME: ) #[[ATTR4:[0-9]+]] { 71d1c911ffSAlexandros Lamprineas // CHECK-NEXT: [[ENTRY:.*:]] 72d1c911ffSAlexandros Lamprineas // CHECK-NEXT: ret i32 1 73d1c911ffSAlexandros Lamprineas // 74d1c911ffSAlexandros Lamprineas // 75a2d30991SAlexandros Lamprineas // CHECK-LABEL: define weak_odr ptr @_ZN4Name3fooEv.resolver() comdat { 76a2d30991SAlexandros Lamprineas // CHECK-NEXT: [[RESOLVER_ENTRY:.*:]] 77a2d30991SAlexandros Lamprineas // CHECK-NEXT: call void @__init_cpu_features_resolver() 78a2d30991SAlexandros Lamprineas // CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 796f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP1:%.*]] = and i64 [[TMP0]], 1073807616 806f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 1073807616 81a2d30991SAlexandros Lamprineas // CHECK-NEXT: [[TMP3:%.*]] = and i1 true, [[TMP2]] 82a2d30991SAlexandros Lamprineas // CHECK-NEXT: br i1 [[TMP3]], label %[[RESOLVER_RETURN:.*]], label %[[RESOLVER_ELSE:.*]] 83a2d30991SAlexandros Lamprineas // CHECK: [[RESOLVER_RETURN]]: 84a2d30991SAlexandros Lamprineas // CHECK-NEXT: ret ptr @_ZN4Name3fooEv._Msve 85a2d30991SAlexandros Lamprineas // CHECK: [[RESOLVER_ELSE]]: 86a2d30991SAlexandros Lamprineas // CHECK-NEXT: ret ptr @_ZN4Name3fooEv.default 87a2d30991SAlexandros Lamprineas // 88a2d30991SAlexandros Lamprineas // 89d1c911ffSAlexandros Lamprineas // CHECK-LABEL: define weak_odr ptr @_ZN3Foo3barEv.resolver() comdat { 90d1c911ffSAlexandros Lamprineas // CHECK-NEXT: [[RESOLVER_ENTRY:.*:]] 91d1c911ffSAlexandros Lamprineas // CHECK-NEXT: call void @__init_cpu_features_resolver() 92d1c911ffSAlexandros Lamprineas // CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 93d1c911ffSAlexandros Lamprineas // CHECK-NEXT: [[TMP1:%.*]] = and i64 [[TMP0]], 576460752303423488 94d1c911ffSAlexandros Lamprineas // CHECK-NEXT: [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 576460752303423488 95d1c911ffSAlexandros Lamprineas // CHECK-NEXT: [[TMP3:%.*]] = and i1 true, [[TMP2]] 96d1c911ffSAlexandros Lamprineas // CHECK-NEXT: br i1 [[TMP3]], label %[[RESOLVER_RETURN:.*]], label %[[RESOLVER_ELSE:.*]] 97d1c911ffSAlexandros Lamprineas // CHECK: [[RESOLVER_RETURN]]: 98d1c911ffSAlexandros Lamprineas // CHECK-NEXT: ret ptr @_ZN3Foo3barEv._Mmops 99d1c911ffSAlexandros Lamprineas // CHECK: [[RESOLVER_ELSE]]: 100d1c911ffSAlexandros Lamprineas // CHECK-NEXT: ret ptr @_ZN3Foo3barEv.default 101d1c911ffSAlexandros Lamprineas // 1028930ba98SAlexandros Lamprineas //. 1038930ba98SAlexandros Lamprineas // CHECK: [[META0:![0-9]+]] = !{i32 1, !"wchar_size", i32 4} 1048930ba98SAlexandros Lamprineas // CHECK: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"} 1058930ba98SAlexandros Lamprineas //. 106