brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.0 KiB · c62b026 Raw
336 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals all --include-generated-funcs --global-value-regex ".*" --version 52// RUN: %clang_cc1 -std=c++11 -triple aarch64-linux-gnu -emit-llvm %s -o - | FileCheck %s3 4int __attribute__((target_version("sme-f64f64+bf16"))) foo(int) { return 1; }5int __attribute__((target_version("default"))) foo(int) { return 2; }6int __attribute__((target_version("sm4+bf16"))) foo(void) { return 3; }7int __attribute__((target_version("default"))) foo(void) { return 4; }8 9struct MyClass {10  int __attribute__((target_version("dotprod"))) goo(int);11  int __attribute__((target_version("crc"))) goo(int);12  int __attribute__((target_version("default"))) goo(int);13 14  // This should generate one target version but no resolver.15  int __attribute__((target_version("default"))) unused_with_forward_default_decl(void);16  int __attribute__((target_version("mops"))) unused_with_forward_default_decl(void);17 18  // This should also generate one target version but no resolver.19  int unused_with_implicit_forward_default_decl(void);20  int __attribute__((target_version("dotprod"))) unused_with_implicit_forward_default_decl(void);21 22  // This should also generate one target version but no resolver.23  int __attribute__((target_version("aes"))) unused_with_default_decl(void);24  int __attribute__((target_version("default"))) unused_with_default_decl(void);25 26  // This should generate two target versions and the resolver.27  int __attribute__((target_version("sve"))) unused_with_default_def(void);28  int __attribute__((target_version("default"))) unused_with_default_def(void);29 30  // This should also generate two target versions and the resolver.31  int __attribute__((target_version("fp16"))) unused_with_implicit_default_def(void);32  int unused_with_implicit_default_def(void);33 34  // This should also generate two target versions and the resolver.35  int unused_with_implicit_forward_default_def(void);36  int __attribute__((target_version("lse"))) unused_with_implicit_forward_default_def(void);37 38  // This should generate a target version despite the default not being declared.39  int __attribute__((target_version("rdm"))) unused_without_default(void);40};41 42int __attribute__((target_version("default"))) MyClass::goo(int) { return 1; }43int __attribute__((target_version("crc"))) MyClass::goo(int) { return 2; }44int __attribute__((target_version("dotprod"))) MyClass::goo(int) { return 3; }45 46int __attribute__((target_version("mops"))) MyClass::unused_with_forward_default_decl(void) { return 0; }47int __attribute__((target_version("dotprod"))) MyClass::unused_with_implicit_forward_default_decl(void) { return 0; }48int __attribute__((target_version("aes"))) MyClass::unused_with_default_decl(void) { return 0; }49int __attribute__((target_version("sve"))) MyClass::unused_with_default_def(void) { return 0; }50int __attribute__((target_version("default"))) MyClass::unused_with_default_def(void) { return 1; }51int __attribute__((target_version("fp16"))) MyClass::unused_with_implicit_default_def(void) { return 0; }52int MyClass::unused_with_implicit_default_def(void) { return 1; }53int MyClass::unused_with_implicit_forward_default_def(void) { return 0; }54int __attribute__((target_version("lse"))) MyClass::unused_with_implicit_forward_default_def(void) { return 1; }55int __attribute__((target_version("rdm"))) MyClass::unused_without_default(void) { return 0; }56 57int bar() {58  MyClass m;59  return m.goo(1) + foo(1) + foo();60}61 62//.63// CHECK: @__aarch64_cpu_features = external dso_local global { i64 }64// CHECK: @_Z3fooi = weak_odr ifunc i32 (i32), ptr @_Z3fooi.resolver65// CHECK: @_Z3foov = weak_odr ifunc i32 (), ptr @_Z3foov.resolver66// CHECK: @_ZN7MyClass3gooEi = weak_odr ifunc i32 (ptr, i32), ptr @_ZN7MyClass3gooEi.resolver67// CHECK: @_ZN7MyClass23unused_with_default_defEv = weak_odr ifunc i32 (ptr), ptr @_ZN7MyClass23unused_with_default_defEv.resolver68// CHECK: @_ZN7MyClass32unused_with_implicit_default_defEv = weak_odr ifunc i32 (ptr), ptr @_ZN7MyClass32unused_with_implicit_default_defEv.resolver69// CHECK: @_ZN7MyClass40unused_with_implicit_forward_default_defEv = weak_odr ifunc i32 (ptr), ptr @_ZN7MyClass40unused_with_implicit_forward_default_defEv.resolver70//.71// CHECK-LABEL: define dso_local noundef i32 @_Z3fooi._Mbf16Msme-f64f64(72// CHECK-SAME: i32 noundef [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {73// CHECK-NEXT:  [[ENTRY:.*:]]74// CHECK-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 475// CHECK-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 476// CHECK-NEXT:    ret i32 177//78//79// CHECK-LABEL: define dso_local noundef i32 @_Z3fooi.default(80// CHECK-SAME: i32 noundef [[TMP0:%.*]]) #[[ATTR1:[0-9]+]] {81// CHECK-NEXT:  [[ENTRY:.*:]]82// CHECK-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 483// CHECK-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 484// CHECK-NEXT:    ret i32 285//86//87// CHECK-LABEL: define dso_local noundef i32 @_Z3foov._Mbf16Msm4(88// CHECK-SAME: ) #[[ATTR2:[0-9]+]] {89// CHECK-NEXT:  [[ENTRY:.*:]]90// CHECK-NEXT:    ret i32 391//92//93// CHECK-LABEL: define dso_local noundef i32 @_Z3foov.default(94// CHECK-SAME: ) #[[ATTR1]] {95// CHECK-NEXT:  [[ENTRY:.*:]]96// CHECK-NEXT:    ret i32 497//98//99// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass3gooEi.default(100// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]], i32 noundef [[TMP0:%.*]]) #[[ATTR1]] {101// CHECK-NEXT:  [[ENTRY:.*:]]102// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8103// CHECK-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 4104// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8105// CHECK-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 4106// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8107// CHECK-NEXT:    ret i32 1108//109//110// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass3gooEi._Mcrc(111// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]], i32 noundef [[TMP0:%.*]]) #[[ATTR3:[0-9]+]] {112// CHECK-NEXT:  [[ENTRY:.*:]]113// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8114// CHECK-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 4115// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8116// CHECK-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 4117// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8118// CHECK-NEXT:    ret i32 2119//120//121// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass3gooEi._Mdotprod(122// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]], i32 noundef [[TMP0:%.*]]) #[[ATTR4:[0-9]+]] {123// CHECK-NEXT:  [[ENTRY:.*:]]124// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8125// CHECK-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 4126// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8127// CHECK-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 4128// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8129// CHECK-NEXT:    ret i32 3130//131//132// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass32unused_with_forward_default_declEv._Mmops(133// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]]) #[[ATTR5:[0-9]+]] {134// CHECK-NEXT:  [[ENTRY:.*:]]135// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8136// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8137// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8138// CHECK-NEXT:    ret i32 0139//140//141// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass41unused_with_implicit_forward_default_declEv._Mdotprod(142// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]]) #[[ATTR4]] {143// CHECK-NEXT:  [[ENTRY:.*:]]144// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8145// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8146// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8147// CHECK-NEXT:    ret i32 0148//149//150// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass24unused_with_default_declEv._Maes(151// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]]) #[[ATTR6:[0-9]+]] {152// CHECK-NEXT:  [[ENTRY:.*:]]153// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8154// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8155// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8156// CHECK-NEXT:    ret i32 0157//158//159// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass23unused_with_default_defEv._Msve(160// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]]) #[[ATTR7:[0-9]+]] {161// CHECK-NEXT:  [[ENTRY:.*:]]162// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8163// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8164// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8165// CHECK-NEXT:    ret i32 0166//167//168// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass23unused_with_default_defEv.default(169// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]]) #[[ATTR1]] {170// CHECK-NEXT:  [[ENTRY:.*:]]171// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8172// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8173// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8174// CHECK-NEXT:    ret i32 1175//176//177// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass32unused_with_implicit_default_defEv._Mfp16(178// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]]) #[[ATTR8:[0-9]+]] {179// CHECK-NEXT:  [[ENTRY:.*:]]180// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8181// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8182// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8183// CHECK-NEXT:    ret i32 0184//185//186// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass32unused_with_implicit_default_defEv.default(187// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]]) #[[ATTR1]] {188// CHECK-NEXT:  [[ENTRY:.*:]]189// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8190// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8191// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8192// CHECK-NEXT:    ret i32 1193//194//195// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass40unused_with_implicit_forward_default_defEv.default(196// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]]) #[[ATTR1]] {197// CHECK-NEXT:  [[ENTRY:.*:]]198// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8199// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8200// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8201// CHECK-NEXT:    ret i32 0202//203//204// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass40unused_with_implicit_forward_default_defEv._Mlse(205// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]]) #[[ATTR9:[0-9]+]] {206// CHECK-NEXT:  [[ENTRY:.*:]]207// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8208// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8209// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8210// CHECK-NEXT:    ret i32 1211//212//213// CHECK-LABEL: define dso_local noundef i32 @_ZN7MyClass22unused_without_defaultEv._Mrdm(214// CHECK-SAME: ptr noundef nonnull align 1 dereferenceable(1) [[THIS:%.*]]) #[[ATTR10:[0-9]+]] {215// CHECK-NEXT:  [[ENTRY:.*:]]216// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8217// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8218// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8219// CHECK-NEXT:    ret i32 0220//221//222// CHECK-LABEL: define dso_local noundef i32 @_Z3barv(223// CHECK-SAME: ) #[[ATTR11:[0-9]+]] {224// CHECK-NEXT:  [[ENTRY:.*:]]225// CHECK-NEXT:    [[M:%.*]] = alloca [[STRUCT_MYCLASS:%.*]], align 1226// CHECK-NEXT:    [[CALL:%.*]] = call noundef i32 @_ZN7MyClass3gooEi(ptr noundef nonnull align 1 dereferenceable(1) [[M]], i32 noundef 1)227// CHECK-NEXT:    [[CALL1:%.*]] = call noundef i32 @_Z3fooi(i32 noundef 1)228// CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 [[CALL]], [[CALL1]]229// CHECK-NEXT:    [[CALL2:%.*]] = call noundef i32 @_Z3foov()230// CHECK-NEXT:    [[ADD3:%.*]] = add nsw i32 [[ADD]], [[CALL2]]231// CHECK-NEXT:    ret i32 [[ADD3]]232//233//234// CHECK-LABEL: define weak_odr ptr @_Z3fooi.resolver(235// CHECK-SAME: ) #[[ATTR_RESOLVER:[0-9]+]] comdat {236// CHECK-NEXT:  [[RESOLVER_ENTRY:.*:]]237// CHECK-NEXT:    call void @__init_cpu_features_resolver()238// CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8239// CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[TMP0]], 36033195199759104240// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 36033195199759104241// CHECK-NEXT:    [[TMP3:%.*]] = and i1 true, [[TMP2]]242// CHECK-NEXT:    br i1 [[TMP3]], label %[[RESOLVER_RETURN:.*]], label %[[RESOLVER_ELSE:.*]]243// CHECK:       [[RESOLVER_RETURN]]:244// CHECK-NEXT:    ret ptr @_Z3fooi._Mbf16Msme-f64f64245// CHECK:       [[RESOLVER_ELSE]]:246// CHECK-NEXT:    ret ptr @_Z3fooi.default247//248//249// CHECK-LABEL: define weak_odr ptr @_Z3foov.resolver(250// CHECK-SAME: ) #[[ATTR_RESOLVER]] comdat {251// CHECK-NEXT:  [[RESOLVER_ENTRY:.*:]]252// CHECK-NEXT:    call void @__init_cpu_features_resolver()253// CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8254// CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[TMP0]], 134218528255// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 134218528256// CHECK-NEXT:    [[TMP3:%.*]] = and i1 true, [[TMP2]]257// CHECK-NEXT:    br i1 [[TMP3]], label %[[RESOLVER_RETURN:.*]], label %[[RESOLVER_ELSE:.*]]258// CHECK:       [[RESOLVER_RETURN]]:259// CHECK-NEXT:    ret ptr @_Z3foov._Mbf16Msm4260// CHECK:       [[RESOLVER_ELSE]]:261// CHECK-NEXT:    ret ptr @_Z3foov.default262//263//264// CHECK-LABEL: define weak_odr ptr @_ZN7MyClass3gooEi.resolver(265// CHECK-SAME: ) #[[ATTR_RESOLVER]] comdat {266// CHECK-NEXT:  [[RESOLVER_ENTRY:.*:]]267// CHECK-NEXT:    call void @__init_cpu_features_resolver()268// CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8269// CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[TMP0]], 1024270// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 1024271// CHECK-NEXT:    [[TMP3:%.*]] = and i1 true, [[TMP2]]272// CHECK-NEXT:    br i1 [[TMP3]], label %[[RESOLVER_RETURN:.*]], label %[[RESOLVER_ELSE:.*]]273// CHECK:       [[RESOLVER_RETURN]]:274// CHECK-NEXT:    ret ptr @_ZN7MyClass3gooEi._Mcrc275// CHECK:       [[RESOLVER_ELSE]]:276// CHECK-NEXT:    [[TMP4:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8277// CHECK-NEXT:    [[TMP5:%.*]] = and i64 [[TMP4]], 784278// CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[TMP5]], 784279// CHECK-NEXT:    [[TMP7:%.*]] = and i1 true, [[TMP6]]280// CHECK-NEXT:    br i1 [[TMP7]], label %[[RESOLVER_RETURN1:.*]], label %[[RESOLVER_ELSE2:.*]]281// CHECK:       [[RESOLVER_RETURN1]]:282// CHECK-NEXT:    ret ptr @_ZN7MyClass3gooEi._Mdotprod283// CHECK:       [[RESOLVER_ELSE2]]:284// CHECK-NEXT:    ret ptr @_ZN7MyClass3gooEi.default285//286//287// CHECK-LABEL: define weak_odr ptr @_ZN7MyClass23unused_with_default_defEv.resolver(288// CHECK-SAME: ) #[[ATTR_RESOLVER]] comdat {289// CHECK-NEXT:  [[RESOLVER_ENTRY:.*:]]290// CHECK-NEXT:    call void @__init_cpu_features_resolver()291// CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8292// CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[TMP0]], 1073807616293// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 1073807616294// CHECK-NEXT:    [[TMP3:%.*]] = and i1 true, [[TMP2]]295// CHECK-NEXT:    br i1 [[TMP3]], label %[[RESOLVER_RETURN:.*]], label %[[RESOLVER_ELSE:.*]]296// CHECK:       [[RESOLVER_RETURN]]:297// CHECK-NEXT:    ret ptr @_ZN7MyClass23unused_with_default_defEv._Msve298// CHECK:       [[RESOLVER_ELSE]]:299// CHECK-NEXT:    ret ptr @_ZN7MyClass23unused_with_default_defEv.default300//301//302// CHECK-LABEL: define weak_odr ptr @_ZN7MyClass32unused_with_imp303// CHECK-SAME: ) #[[ATTR_RESOLVER]] comdat {304// CHECK-NEXT:  [[RESOLVER_ENTRY:.*:]]305// CHECK-NEXT:    call void @__init_cpu_features_resolver()306// CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8307// CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[TMP0]], 65792308// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 65792309// CHECK-NEXT:    [[TMP3:%.*]] = and i1 true, [[TMP2]]310// CHECK-NEXT:    br i1 [[TMP3]], label %[[RESOLVER_RETURN:.*]], label %[[RESOLVER_ELSE:.*]]311// CHECK:       [[RESOLVER_RETURN]]:312// CHECK-NEXT:    ret ptr @_ZN7MyClass32unused_with_implicit_default_defEv._Mfp16313// CHECK:       [[RESOLVER_ELSE]]:314// CHECK-NEXT:    ret ptr @_ZN7MyClass32unused_with_implicit_default_defEv.default315//316//317// CHECK-LABEL: define weak_odr ptr @_ZN7MyClass40unused_with_implicit_forward_default_defEv.resolver(318// CHECK-SAME: ) #[[ATTR_RESOLVER]] comdat {319// CHECK-NEXT:  [[RESOLVER_ENTRY:.*:]]320// CHECK-NEXT:    call void @__init_cpu_features_resolver()321// CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8322// CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[TMP0]], 128323// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 128324// CHECK-NEXT:    [[TMP3:%.*]] = and i1 true, [[TMP2]]325// CHECK-NEXT:    br i1 [[TMP3]], label %[[RESOLVER_RETURN:.*]], label %[[RESOLVER_ELSE:.*]]326// CHECK:       [[RESOLVER_RETURN]]:327// CHECK-NEXT:    ret ptr @_ZN7MyClass40unused_with_implicit_forward_default_defEv._Mlse328// CHECK:       [[RESOLVER_ELSE]]:329// CHECK-NEXT:    ret ptr @_ZN7MyClass40unused_with_implicit_forward_default_defEv.default330//331// CHECK: attributes #[[ATTR_RESOLVER]] = { disable_sanitizer_instrumentation }332//.333// CHECK: [[META0:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}334// CHECK: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}335//.336