1207e5cccSFangrui Song // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals --include-generated-funcs --global-value-regex ".*" 2207e5cccSFangrui Song // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature -v9.5a -emit-llvm -o - %s | FileCheck %s 3207e5cccSFangrui Song // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature -fmv -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK-NOFMV 4207e5cccSFangrui Song 5207e5cccSFangrui Song // The following is guarded because in NOFMV we get an error for redefining the default. 6207e5cccSFangrui Song #ifdef __HAVE_FUNCTION_MULTI_VERSIONING 7207e5cccSFangrui Song int explicit_default(void) { return 0; } 8207e5cccSFangrui Song __attribute__((target_version("jscvt"))) int explicit_default(void) { return 1; } 9207e5cccSFangrui Song __attribute__((target_clones("dotprod", "lse"))) int explicit_default(void) { return 2; } 10207e5cccSFangrui Song __attribute__((target_version("rdma"))) int explicit_default(void) { return 3; } 11207e5cccSFangrui Song 12207e5cccSFangrui Song int foo(void) { return explicit_default(); } 13207e5cccSFangrui Song #endif 14207e5cccSFangrui Song 15207e5cccSFangrui Song __attribute__((target_version("jscvt"))) int implicit_default(void) { return 1; } 16207e5cccSFangrui Song __attribute__((target_clones("dotprod", "lse"))) int implicit_default(void) { return 2; } 17207e5cccSFangrui Song __attribute__((target_version("rdma"))) int implicit_default(void) { return 3; } 18207e5cccSFangrui Song 19207e5cccSFangrui Song int bar(void) { return implicit_default(); } 20207e5cccSFangrui Song 21207e5cccSFangrui Song // These shouldn't generate anything. 22207e5cccSFangrui Song int unused_version_declarations(void); 23207e5cccSFangrui Song __attribute__((target_clones("dotprod", "lse"))) int unused_version_declarations(void); 24207e5cccSFangrui Song __attribute__((target_version("jscvt"))) int unused_version_declarations(void); 25207e5cccSFangrui Song 26207e5cccSFangrui Song // These should generate the default (mangled) version and the resolver. 27207e5cccSFangrui Song int default_def_with_version_decls(void) { return 0; } 28207e5cccSFangrui Song __attribute__((target_clones("dotprod", "lse"))) int default_def_with_version_decls(void); 29207e5cccSFangrui Song __attribute__((target_version("jscvt"))) int default_def_with_version_decls(void); 30207e5cccSFangrui Song 31207e5cccSFangrui Song //. 32207e5cccSFangrui Song // CHECK: @__aarch64_cpu_features = external dso_local global { i64 } 33207e5cccSFangrui Song // CHECK: @explicit_default = weak_odr ifunc i32 (), ptr @explicit_default.resolver 34207e5cccSFangrui Song // CHECK: @implicit_default = weak_odr ifunc i32 (), ptr @implicit_default.resolver 35207e5cccSFangrui Song // CHECK: @default_def_with_version_decls = weak_odr ifunc i32 (), ptr @default_def_with_version_decls.resolver 36207e5cccSFangrui Song //. 37207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 38207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default.default 39207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR0:[0-9]+]] { 40207e5cccSFangrui Song // CHECK-NEXT: entry: 41207e5cccSFangrui Song // CHECK-NEXT: ret i32 0 42207e5cccSFangrui Song // 43207e5cccSFangrui Song // 44207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 45207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default._Mjscvt 46207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR1:[0-9]+]] { 47207e5cccSFangrui Song // CHECK-NEXT: entry: 48207e5cccSFangrui Song // CHECK-NEXT: ret i32 1 49207e5cccSFangrui Song // 50207e5cccSFangrui Song // 51207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 52207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default._Mdotprod 53207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR2:[0-9]+]] { 54207e5cccSFangrui Song // CHECK-NEXT: entry: 55207e5cccSFangrui Song // CHECK-NEXT: ret i32 2 56207e5cccSFangrui Song // 57207e5cccSFangrui Song // 58207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 59207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default._Mlse 60207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR3:[0-9]+]] { 61207e5cccSFangrui Song // CHECK-NEXT: entry: 62207e5cccSFangrui Song // CHECK-NEXT: ret i32 2 63207e5cccSFangrui Song // 64207e5cccSFangrui Song // 65207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default.resolver() comdat { 66207e5cccSFangrui Song // CHECK-NEXT: resolver_entry: 67207e5cccSFangrui Song // CHECK-NEXT: call void @__init_cpu_features_resolver() 68207e5cccSFangrui Song // CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 69*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP1:%.*]] = and i64 [[TMP0]], 1048832 70*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 1048832 71207e5cccSFangrui Song // CHECK-NEXT: [[TMP3:%.*]] = and i1 true, [[TMP2]] 72207e5cccSFangrui Song // CHECK-NEXT: br i1 [[TMP3]], label [[RESOLVER_RETURN:%.*]], label [[RESOLVER_ELSE:%.*]] 73207e5cccSFangrui Song // CHECK: resolver_return: 74207e5cccSFangrui Song // CHECK-NEXT: ret ptr @explicit_default._Mjscvt 75207e5cccSFangrui Song // CHECK: resolver_else: 76207e5cccSFangrui Song // CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 77*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP5:%.*]] = and i64 [[TMP4]], 832 78*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP6:%.*]] = icmp eq i64 [[TMP5]], 832 79207e5cccSFangrui Song // CHECK-NEXT: [[TMP7:%.*]] = and i1 true, [[TMP6]] 80207e5cccSFangrui Song // CHECK-NEXT: br i1 [[TMP7]], label [[RESOLVER_RETURN1:%.*]], label [[RESOLVER_ELSE2:%.*]] 81207e5cccSFangrui Song // CHECK: resolver_return1: 82207e5cccSFangrui Song // CHECK-NEXT: ret ptr @explicit_default._Mrdm 83207e5cccSFangrui Song // CHECK: resolver_else2: 84207e5cccSFangrui Song // CHECK-NEXT: [[TMP8:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 85*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP9:%.*]] = and i64 [[TMP8]], 784 86*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP10:%.*]] = icmp eq i64 [[TMP9]], 784 87207e5cccSFangrui Song // CHECK-NEXT: [[TMP11:%.*]] = and i1 true, [[TMP10]] 88207e5cccSFangrui Song // CHECK-NEXT: br i1 [[TMP11]], label [[RESOLVER_RETURN3:%.*]], label [[RESOLVER_ELSE4:%.*]] 89207e5cccSFangrui Song // CHECK: resolver_return3: 90207e5cccSFangrui Song // CHECK-NEXT: ret ptr @explicit_default._Mdotprod 91207e5cccSFangrui Song // CHECK: resolver_else4: 92207e5cccSFangrui Song // CHECK-NEXT: [[TMP12:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 93207e5cccSFangrui Song // CHECK-NEXT: [[TMP13:%.*]] = and i64 [[TMP12]], 128 94207e5cccSFangrui Song // CHECK-NEXT: [[TMP14:%.*]] = icmp eq i64 [[TMP13]], 128 95207e5cccSFangrui Song // CHECK-NEXT: [[TMP15:%.*]] = and i1 true, [[TMP14]] 96207e5cccSFangrui Song // CHECK-NEXT: br i1 [[TMP15]], label [[RESOLVER_RETURN5:%.*]], label [[RESOLVER_ELSE6:%.*]] 97207e5cccSFangrui Song // CHECK: resolver_return5: 98207e5cccSFangrui Song // CHECK-NEXT: ret ptr @explicit_default._Mlse 99207e5cccSFangrui Song // CHECK: resolver_else6: 100207e5cccSFangrui Song // CHECK-NEXT: ret ptr @explicit_default.default 101207e5cccSFangrui Song // 102207e5cccSFangrui Song // 103207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 104207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default._Mrdm 105207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR4:[0-9]+]] { 106207e5cccSFangrui Song // CHECK-NEXT: entry: 107207e5cccSFangrui Song // CHECK-NEXT: ret i32 3 108207e5cccSFangrui Song // 109207e5cccSFangrui Song // 110207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 111207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@foo 112207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR0]] { 113207e5cccSFangrui Song // CHECK-NEXT: entry: 114207e5cccSFangrui Song // CHECK-NEXT: [[CALL:%.*]] = call i32 @explicit_default() 115207e5cccSFangrui Song // CHECK-NEXT: ret i32 [[CALL]] 116207e5cccSFangrui Song // 117207e5cccSFangrui Song // 118207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 119207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default._Mjscvt 120207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR1]] { 121207e5cccSFangrui Song // CHECK-NEXT: entry: 122207e5cccSFangrui Song // CHECK-NEXT: ret i32 1 123207e5cccSFangrui Song // 124207e5cccSFangrui Song // 125207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 126207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default._Mdotprod 127207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR2]] { 128207e5cccSFangrui Song // CHECK-NEXT: entry: 129207e5cccSFangrui Song // CHECK-NEXT: ret i32 2 130207e5cccSFangrui Song // 131207e5cccSFangrui Song // 132207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 133207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default._Mlse 134207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR3]] { 135207e5cccSFangrui Song // CHECK-NEXT: entry: 136207e5cccSFangrui Song // CHECK-NEXT: ret i32 2 137207e5cccSFangrui Song // 138207e5cccSFangrui Song // 139207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default.resolver() comdat { 140207e5cccSFangrui Song // CHECK-NEXT: resolver_entry: 141207e5cccSFangrui Song // CHECK-NEXT: call void @__init_cpu_features_resolver() 142207e5cccSFangrui Song // CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 143*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP1:%.*]] = and i64 [[TMP0]], 1048832 144*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 1048832 145207e5cccSFangrui Song // CHECK-NEXT: [[TMP3:%.*]] = and i1 true, [[TMP2]] 146207e5cccSFangrui Song // CHECK-NEXT: br i1 [[TMP3]], label [[RESOLVER_RETURN:%.*]], label [[RESOLVER_ELSE:%.*]] 147207e5cccSFangrui Song // CHECK: resolver_return: 148207e5cccSFangrui Song // CHECK-NEXT: ret ptr @implicit_default._Mjscvt 149207e5cccSFangrui Song // CHECK: resolver_else: 150207e5cccSFangrui Song // CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 151*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP5:%.*]] = and i64 [[TMP4]], 832 152*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP6:%.*]] = icmp eq i64 [[TMP5]], 832 153207e5cccSFangrui Song // CHECK-NEXT: [[TMP7:%.*]] = and i1 true, [[TMP6]] 154207e5cccSFangrui Song // CHECK-NEXT: br i1 [[TMP7]], label [[RESOLVER_RETURN1:%.*]], label [[RESOLVER_ELSE2:%.*]] 155207e5cccSFangrui Song // CHECK: resolver_return1: 156207e5cccSFangrui Song // CHECK-NEXT: ret ptr @implicit_default._Mrdm 157207e5cccSFangrui Song // CHECK: resolver_else2: 158207e5cccSFangrui Song // CHECK-NEXT: [[TMP8:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 159*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP9:%.*]] = and i64 [[TMP8]], 784 160*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP10:%.*]] = icmp eq i64 [[TMP9]], 784 161207e5cccSFangrui Song // CHECK-NEXT: [[TMP11:%.*]] = and i1 true, [[TMP10]] 162207e5cccSFangrui Song // CHECK-NEXT: br i1 [[TMP11]], label [[RESOLVER_RETURN3:%.*]], label [[RESOLVER_ELSE4:%.*]] 163207e5cccSFangrui Song // CHECK: resolver_return3: 164207e5cccSFangrui Song // CHECK-NEXT: ret ptr @implicit_default._Mdotprod 165207e5cccSFangrui Song // CHECK: resolver_else4: 166207e5cccSFangrui Song // CHECK-NEXT: [[TMP12:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 167207e5cccSFangrui Song // CHECK-NEXT: [[TMP13:%.*]] = and i64 [[TMP12]], 128 168207e5cccSFangrui Song // CHECK-NEXT: [[TMP14:%.*]] = icmp eq i64 [[TMP13]], 128 169207e5cccSFangrui Song // CHECK-NEXT: [[TMP15:%.*]] = and i1 true, [[TMP14]] 170207e5cccSFangrui Song // CHECK-NEXT: br i1 [[TMP15]], label [[RESOLVER_RETURN5:%.*]], label [[RESOLVER_ELSE6:%.*]] 171207e5cccSFangrui Song // CHECK: resolver_return5: 172207e5cccSFangrui Song // CHECK-NEXT: ret ptr @implicit_default._Mlse 173207e5cccSFangrui Song // CHECK: resolver_else6: 174207e5cccSFangrui Song // CHECK-NEXT: ret ptr @implicit_default.default 175207e5cccSFangrui Song // 176207e5cccSFangrui Song // 177207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 178207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default._Mrdm 179207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR4]] { 180207e5cccSFangrui Song // CHECK-NEXT: entry: 181207e5cccSFangrui Song // CHECK-NEXT: ret i32 3 182207e5cccSFangrui Song // 183207e5cccSFangrui Song // 184207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 185207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@bar 186207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR0]] { 187207e5cccSFangrui Song // CHECK-NEXT: entry: 188207e5cccSFangrui Song // CHECK-NEXT: [[CALL:%.*]] = call i32 @implicit_default() 189207e5cccSFangrui Song // CHECK-NEXT: ret i32 [[CALL]] 190207e5cccSFangrui Song // 191207e5cccSFangrui Song // 192207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 193207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@default_def_with_version_decls.default 194207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR0]] { 195207e5cccSFangrui Song // CHECK-NEXT: entry: 196207e5cccSFangrui Song // CHECK-NEXT: ret i32 0 197207e5cccSFangrui Song // 198207e5cccSFangrui Song // 199207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone 200207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default.default 201461a0d6cSAlexandros Lamprineas // CHECK-SAME: () #[[ATTR6:[0-9]+]] { 202207e5cccSFangrui Song // CHECK-NEXT: entry: 203207e5cccSFangrui Song // CHECK-NEXT: ret i32 2 204207e5cccSFangrui Song // 205207e5cccSFangrui Song // 206207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@default_def_with_version_decls.resolver() comdat { 207207e5cccSFangrui Song // CHECK-NEXT: resolver_entry: 208207e5cccSFangrui Song // CHECK-NEXT: call void @__init_cpu_features_resolver() 209207e5cccSFangrui Song // CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 210*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP1:%.*]] = and i64 [[TMP0]], 1048832 211*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 1048832 212207e5cccSFangrui Song // CHECK-NEXT: [[TMP3:%.*]] = and i1 true, [[TMP2]] 213207e5cccSFangrui Song // CHECK-NEXT: br i1 [[TMP3]], label [[RESOLVER_RETURN:%.*]], label [[RESOLVER_ELSE:%.*]] 214207e5cccSFangrui Song // CHECK: resolver_return: 215207e5cccSFangrui Song // CHECK-NEXT: ret ptr @default_def_with_version_decls._Mjscvt 216207e5cccSFangrui Song // CHECK: resolver_else: 217207e5cccSFangrui Song // CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 218*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP5:%.*]] = and i64 [[TMP4]], 784 219*6f013dbcSAlexandros Lamprineas // CHECK-NEXT: [[TMP6:%.*]] = icmp eq i64 [[TMP5]], 784 220207e5cccSFangrui Song // CHECK-NEXT: [[TMP7:%.*]] = and i1 true, [[TMP6]] 221207e5cccSFangrui Song // CHECK-NEXT: br i1 [[TMP7]], label [[RESOLVER_RETURN1:%.*]], label [[RESOLVER_ELSE2:%.*]] 222207e5cccSFangrui Song // CHECK: resolver_return1: 223207e5cccSFangrui Song // CHECK-NEXT: ret ptr @default_def_with_version_decls._Mdotprod 224207e5cccSFangrui Song // CHECK: resolver_else2: 225207e5cccSFangrui Song // CHECK-NEXT: [[TMP8:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8 226207e5cccSFangrui Song // CHECK-NEXT: [[TMP9:%.*]] = and i64 [[TMP8]], 128 227207e5cccSFangrui Song // CHECK-NEXT: [[TMP10:%.*]] = icmp eq i64 [[TMP9]], 128 228207e5cccSFangrui Song // CHECK-NEXT: [[TMP11:%.*]] = and i1 true, [[TMP10]] 229207e5cccSFangrui Song // CHECK-NEXT: br i1 [[TMP11]], label [[RESOLVER_RETURN3:%.*]], label [[RESOLVER_ELSE4:%.*]] 230207e5cccSFangrui Song // CHECK: resolver_return3: 231207e5cccSFangrui Song // CHECK-NEXT: ret ptr @default_def_with_version_decls._Mlse 232207e5cccSFangrui Song // CHECK: resolver_else4: 233207e5cccSFangrui Song // CHECK-NEXT: ret ptr @default_def_with_version_decls.default 234207e5cccSFangrui Song // 235207e5cccSFangrui Song // 236207e5cccSFangrui Song // CHECK-NOFMV: Function Attrs: noinline nounwind optnone 237207e5cccSFangrui Song // CHECK-NOFMV-LABEL: define {{[^@]+}}@implicit_default 238207e5cccSFangrui Song // CHECK-NOFMV-SAME: () #[[ATTR0:[0-9]+]] { 239207e5cccSFangrui Song // CHECK-NOFMV-NEXT: entry: 240207e5cccSFangrui Song // CHECK-NOFMV-NEXT: ret i32 2 241207e5cccSFangrui Song // 242207e5cccSFangrui Song // 243207e5cccSFangrui Song // CHECK-NOFMV: Function Attrs: noinline nounwind optnone 244207e5cccSFangrui Song // CHECK-NOFMV-LABEL: define {{[^@]+}}@bar 245207e5cccSFangrui Song // CHECK-NOFMV-SAME: () #[[ATTR0]] { 246207e5cccSFangrui Song // CHECK-NOFMV-NEXT: entry: 247207e5cccSFangrui Song // CHECK-NOFMV-NEXT: [[CALL:%.*]] = call i32 @implicit_default() 248207e5cccSFangrui Song // CHECK-NOFMV-NEXT: ret i32 [[CALL]] 249207e5cccSFangrui Song // 250207e5cccSFangrui Song // 251207e5cccSFangrui Song // CHECK-NOFMV: Function Attrs: noinline nounwind optnone 252207e5cccSFangrui Song // CHECK-NOFMV-LABEL: define {{[^@]+}}@default_def_with_version_decls 253207e5cccSFangrui Song // CHECK-NOFMV-SAME: () #[[ATTR0]] { 254207e5cccSFangrui Song // CHECK-NOFMV-NEXT: entry: 255207e5cccSFangrui Song // CHECK-NOFMV-NEXT: ret i32 0 256207e5cccSFangrui Song // 257207e5cccSFangrui Song //. 258207e5cccSFangrui Song // CHECK: [[META0:![0-9]+]] = !{i32 1, !"wchar_size", i32 4} 259207e5cccSFangrui Song // CHECK: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"} 260207e5cccSFangrui Song //. 261207e5cccSFangrui Song // CHECK-NOFMV: [[META0:![0-9]+]] = !{i32 1, !"wchar_size", i32 4} 262207e5cccSFangrui Song // CHECK-NOFMV: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"} 263207e5cccSFangrui Song //. 264