xref: /llvm-project/clang/test/CodeGenCXX/fmv-namespace.cpp (revision 6586c676b42aa9c7e78f9b1d419767a02793a70f)
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