1 // Test all of the AArch64 fmv-features metadata without any dependency expansion. 2 // It is used to propagate the attribute string information from C/C++ source to LLVM IR. 3 4 // RUN: %clang --target=aarch64-linux-gnu --rtlib=compiler-rt -emit-llvm -S -o - %s | FileCheck %s 5 6 // CHECK: define dso_local i32 @fmv._Maes() #[[aes:[0-9]+]] { 7 // CHECK: define dso_local i32 @fmv._Mbf16() #[[bf16:[0-9]+]] { 8 __attribute__((target_clones("aes", "bf16"))) int fmv(void) { return 0; } 9 10 // CHECK: define dso_local i32 @fmv._Mbti() #[[bti:[0-9]+]] { 11 __attribute__((target_version("bti"))) int fmv(void) { return 0; } 12 13 // CHECK: define dso_local i32 @fmv._Mcrc() #[[crc:[0-9]+]] { 14 __attribute__((target_version("crc"))) int fmv(void) { return 0; } 15 16 // CHECK: define dso_local i32 @fmv._Mdit() #[[dit:[0-9]+]] { 17 __attribute__((target_version("dit"))) int fmv(void) { return 0; } 18 19 // CHECK: define dso_local i32 @fmv._Mdotprod() #[[dotprod:[0-9]+]] { 20 __attribute__((target_version("dotprod"))) int fmv(void) { return 0; } 21 22 // CHECK: define dso_local i32 @fmv._Mdpb() #[[dpb:[0-9]+]] { 23 __attribute__((target_version("dpb"))) int fmv(void) { return 0; } 24 25 // CHECK: define dso_local i32 @fmv._Mdpb2() #[[dpb2:[0-9]+]] { 26 __attribute__((target_version("dpb2"))) int fmv(void) { return 0; } 27 28 // CHECK: define dso_local i32 @fmv._Mf32mm() #[[f32mm:[0-9]+]] { 29 __attribute__((target_version("f32mm"))) int fmv(void) { return 0; } 30 31 // CHECK: define dso_local i32 @fmv._Mf64mm() #[[f64mm:[0-9]+]] { 32 __attribute__((target_version("f64mm"))) int fmv(void) { return 0; } 33 34 // CHECK: define dso_local i32 @fmv._Mfcma() #[[fcma:[0-9]+]] { 35 __attribute__((target_version("fcma"))) int fmv(void) { return 0; } 36 37 // CHECK: define dso_local i32 @fmv._Mflagm() #[[flagm:[0-9]+]] { 38 __attribute__((target_version("flagm"))) int fmv(void) { return 0; } 39 40 // CHECK: define dso_local i32 @fmv._Mflagm2() #[[flagm2:[0-9]+]] { 41 __attribute__((target_version("flagm2"))) int fmv(void) { return 0; } 42 43 // CHECK: define dso_local i32 @fmv._Mfp() #[[fp:[0-9]+]] { 44 __attribute__((target_version("fp"))) int fmv(void) { return 0; } 45 46 // CHECK: define dso_local i32 @fmv._Mfp16() #[[fp16:[0-9]+]] { 47 __attribute__((target_version("fp16"))) int fmv(void) { return 0; } 48 49 // CHECK: define dso_local i32 @fmv._Mfp16fml() #[[fp16fml:[0-9]+]] { 50 __attribute__((target_version("fp16fml"))) int fmv(void) { return 0; } 51 52 // CHECK: define dso_local i32 @fmv._Mfrintts() #[[frintts:[0-9]+]] { 53 __attribute__((target_version("frintts"))) int fmv(void) { return 0; } 54 55 // CHECK: define dso_local i32 @fmv._Mi8mm() #[[i8mm:[0-9]+]] { 56 __attribute__((target_version("i8mm"))) int fmv(void) { return 0; } 57 58 // CHECK: define dso_local i32 @fmv._Mjscvt() #[[jscvt:[0-9]+]] { 59 __attribute__((target_version("jscvt"))) int fmv(void) { return 0; } 60 61 // CHECK: define dso_local i32 @fmv._Mlse() #[[lse:[0-9]+]] { 62 __attribute__((target_version("lse"))) int fmv(void) { return 0; } 63 64 // CHECK: define dso_local i32 @fmv._Mmemtag() #[[memtag:[0-9]+]] { 65 __attribute__((target_version("memtag"))) int fmv(void) { return 0; } 66 67 // CHECK: define dso_local i32 @fmv._Mmops() #[[mops:[0-9]+]] { 68 __attribute__((target_version("mops"))) int fmv(void) { return 0; } 69 70 // CHECK: define dso_local i32 @fmv._Mrcpc() #[[rcpc:[0-9]+]] { 71 __attribute__((target_version("rcpc"))) int fmv(void) { return 0; } 72 73 // CHECK: define dso_local i32 @fmv._Mrcpc2() #[[rcpc2:[0-9]+]] { 74 __attribute__((target_version("rcpc2"))) int fmv(void) { return 0; } 75 76 // CHECK: define dso_local i32 @fmv._Mrcpc3() #[[rcpc3:[0-9]+]] { 77 __attribute__((target_version("rcpc3"))) int fmv(void) { return 0; } 78 79 // CHECK: define dso_local i32 @fmv._Mrdm() #[[rdm:[0-9]+]] { 80 __attribute__((target_version("rdm"))) int fmv(void) { return 0; } 81 82 // CHECK: define dso_local i32 @fmv._Mrng() #[[rng:[0-9]+]] { 83 __attribute__((target_version("rng"))) int fmv(void) { return 0; } 84 85 // CHECK: define dso_local i32 @fmv._Msb() #[[sb:[0-9]+]] { 86 __attribute__((target_version("sb"))) int fmv(void) { return 0; } 87 88 // CHECK: define dso_local i32 @fmv._Msha2() #[[sha2:[0-9]+]] { 89 __attribute__((target_version("sha2"))) int fmv(void) { return 0; } 90 91 // CHECK: define dso_local i32 @fmv._Msha3() #[[sha3:[0-9]+]] { 92 __attribute__((target_version("sha3"))) int fmv(void) { return 0; } 93 94 // CHECK: define dso_local i32 @fmv._Msimd() #[[simd:[0-9]+]] { 95 __attribute__((target_version("simd"))) int fmv(void) { return 0; } 96 97 // CHECK: define dso_local i32 @fmv._Msm4() #[[sm4:[0-9]+]] { 98 __attribute__((target_version("sm4"))) int fmv(void) { return 0; } 99 100 // CHECK: define dso_local i32 @fmv._Msme() #[[sme:[0-9]+]] { 101 __attribute__((target_version("sme"))) int fmv(void) { return 0; } 102 103 // CHECK: define dso_local i32 @fmv._Msme-f64f64() #[[sme_f64f64:[0-9]+]] { 104 __attribute__((target_version("sme-f64f64"))) int fmv(void) { return 0; } 105 106 // CHECK: define dso_local i32 @fmv._Msme-i16i64() #[[sme_i16i64:[0-9]+]] { 107 __attribute__((target_version("sme-i16i64"))) int fmv(void) { return 0; } 108 109 // CHECK: define dso_local i32 @fmv._Msme2() #[[sme2:[0-9]+]] { 110 __attribute__((target_version("sme2"))) int fmv(void) { return 0; } 111 112 // CHECK: define dso_local i32 @fmv._Mssbs() #[[ssbs:[0-9]+]] { 113 __attribute__((target_version("ssbs"))) int fmv(void) { return 0; } 114 115 // CHECK: define dso_local i32 @fmv._Msve() #[[sve:[0-9]+]] { 116 __attribute__((target_version("sve"))) int fmv(void) { return 0; } 117 118 // CHECK: define dso_local i32 @fmv._Msve2() #[[sve2:[0-9]+]] { 119 __attribute__((target_version("sve2"))) int fmv(void) { return 0; } 120 121 // CHECK: define dso_local i32 @fmv._Msve2-aes() #[[sve2_aes:[0-9]+]] { 122 __attribute__((target_version("sve2-aes"))) int fmv(void) { return 0; } 123 124 // CHECK: define dso_local i32 @fmv._Msve2-bitperm() #[[sve2_bitperm:[0-9]+]] { 125 __attribute__((target_version("sve2-bitperm"))) int fmv(void) { return 0; } 126 127 // CHECK: define dso_local i32 @fmv._Msve2-sha3() #[[sve2_sha3:[0-9]+]] { 128 __attribute__((target_version("sve2-sha3"))) int fmv(void) { return 0; } 129 130 // CHECK: define dso_local i32 @fmv._Msve2-sm4() #[[sve2_sm4:[0-9]+]] { 131 __attribute__((target_version("sve2-sm4"))) int fmv(void) { return 0; } 132 133 // CHECK: define dso_local i32 @fmv._Mwfxt() #[[wfxt:[0-9]+]] { 134 __attribute__((target_version("wfxt"))) int fmv(void) { return 0; } 135 136 // CHECK: define dso_local i32 @fmv._MaesMbf16MbtiMcrc() #[[unordered_features_with_duplicates:[0-9]+]] { 137 __attribute__((target_version("crc+bti+bti+bti+aes+aes+bf16"))) int fmv(void) { return 0; } 138 139 // CHECK-NOT: define dso_local i32 @fmv._M{{.*}} 140 __attribute__((target_version("non_existent_extension"))) int fmv(void); 141 142 // CHECK: define dso_local i32 @fmv.default() #[[default:[0-9]+]] { 143 __attribute__((target_version("default"))) int fmv(void); 144 145 int caller() { 146 return fmv(); 147 } 148 149 // CHECK: attributes #[[aes]] = {{.*}} "fmv-features"="aes" 150 // CHECK: attributes #[[bf16]] = {{.*}} "fmv-features"="bf16" 151 // CHECK: attributes #[[bti]] = {{.*}} "fmv-features"="bti" 152 // CHECK: attributes #[[crc]] = {{.*}} "fmv-features"="crc" 153 // CHECK: attributes #[[dit]] = {{.*}} "fmv-features"="dit" 154 // CHECK: attributes #[[dotprod]] = {{.*}} "fmv-features"="dotprod" 155 // CHECK: attributes #[[dpb]] = {{.*}} "fmv-features"="dpb" 156 // CHECK: attributes #[[dpb2]] = {{.*}} "fmv-features"="dpb2" 157 // CHECK: attributes #[[f32mm]] = {{.*}} "fmv-features"="f32mm" 158 // CHECK: attributes #[[f64mm]] = {{.*}} "fmv-features"="f64mm" 159 // CHECK: attributes #[[fcma]] = {{.*}} "fmv-features"="fcma" 160 // CHECK: attributes #[[flagm]] = {{.*}} "fmv-features"="flagm" 161 // CHECK: attributes #[[flagm2]] = {{.*}} "fmv-features"="flagm2" 162 // CHECK: attributes #[[fp]] = {{.*}} "fmv-features"="fp" 163 // CHECK: attributes #[[fp16]] = {{.*}} "fmv-features"="fp16" 164 // CHECK: attributes #[[fp16fml]] = {{.*}} "fmv-features"="fp16fml" 165 // CHECK: attributes #[[frintts]] = {{.*}} "fmv-features"="frintts" 166 // CHECK: attributes #[[i8mm]] = {{.*}} "fmv-features"="i8mm" 167 // CHECK: attributes #[[jscvt]] = {{.*}} "fmv-features"="jscvt" 168 // CHECK: attributes #[[lse]] = {{.*}} "fmv-features"="lse" 169 // CHECK: attributes #[[memtag]] = {{.*}} "fmv-features"="memtag" 170 // CHECK: attributes #[[mops]] = {{.*}} "fmv-features"="mops" 171 // CHECK: attributes #[[rcpc]] = {{.*}} "fmv-features"="rcpc" 172 // CHECK: attributes #[[rcpc2]] = {{.*}} "fmv-features"="rcpc2" 173 // CHECK: attributes #[[rcpc3]] = {{.*}} "fmv-features"="rcpc3" 174 // CHECK: attributes #[[rdm]] = {{.*}} "fmv-features"="rdm" 175 // CHECK: attributes #[[rng]] = {{.*}} "fmv-features"="rng" 176 // CHECK: attributes #[[sb]] = {{.*}} "fmv-features"="sb" 177 // CHECK: attributes #[[sha2]] = {{.*}} "fmv-features"="sha2" 178 // CHECK: attributes #[[sha3]] = {{.*}} "fmv-features"="sha3" 179 // CHECK: attributes #[[simd]] = {{.*}} "fmv-features"="simd" 180 // CHECK: attributes #[[sm4]] = {{.*}} "fmv-features"="sm4" 181 // CHECK: attributes #[[sme]] = {{.*}} "fmv-features"="sme" 182 // CHECK: attributes #[[sme_f64f64]] = {{.*}} "fmv-features"="sme-f64f64" 183 // CHECK: attributes #[[sme_i16i64]] = {{.*}} "fmv-features"="sme-i16i64" 184 // CHECK: attributes #[[sme2]] = {{.*}} "fmv-features"="sme2" 185 // CHECK: attributes #[[ssbs]] = {{.*}} "fmv-features"="ssbs" 186 // CHECK: attributes #[[sve]] = {{.*}} "fmv-features"="sve" 187 // CHECK: attributes #[[sve2]] = {{.*}} "fmv-features"="sve2" 188 // CHECK: attributes #[[sve2_aes]] = {{.*}} "fmv-features"="sve2-aes" 189 // CHECK: attributes #[[sve2_bitperm]] = {{.*}} "fmv-features"="sve2-bitperm" 190 // CHECK: attributes #[[sve2_sha3]] = {{.*}} "fmv-features"="sve2-sha3" 191 // CHECK: attributes #[[sve2_sm4]] = {{.*}} "fmv-features"="sve2-sm4" 192 // CHECK: attributes #[[wfxt]] = {{.*}} "fmv-features"="wfxt" 193 // CHECK: attributes #[[unordered_features_with_duplicates]] = {{.*}} "fmv-features"="aes,bf16,bti,crc" 194 // CHECK: attributes #[[default]] = {{.*}} "fmv-features" 195