1 /* Copyright (C) 2021 Free Software Foundation, Inc. 2 Contributed by Oracle. 3 4 This file is part of GNU Binutils. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3, or (at your option) 9 any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, 51 Franklin Street - Fifth Floor, Boston, 19 MA 02110-1301, USA. */ 20 21 #ifndef _COMP_COM_H 22 #define _COMP_COM_H 23 24 #include <sys/types.h> 25 #include <nl_types.h> 26 27 /* 28 * This file describes format for the compiler-commentary 29 * section to be added to .o's and propagated to the a.out. It reflects 30 * information the compiler can expose to the user about his or her 31 * program. The section should be generated for all compiles where 32 * the user has specified -g on the compile line. 33 * 34 * In the analyzer, display of the messages will be governed by a user UI 35 * that sets a vis_bits bitmap, and matches it against a show_bits 36 * bitmap table, which is maintained separately from the producer 37 * code. For any message, if (vis_bits&show_bits) is non-zero, the 38 * message is shown. If zero, the message is not shown. A similar 39 * mechanism would be used for a stand-alone source or disassembly browser. 40 * 41 * 42 * The .compcom Section 43 * -------------------- 44 * The section will be named ".compcom"; it is generated for each 45 * .o, and aggregated into a single section in the a.out. In that 46 * section, each .o's data is separate, and the tools will loop 47 * over the data for each .o in order to find the subsection for 48 * the particular .o being annotated. 49 * 50 * 51 * Since the header is fixed-length, and the total size of the section 52 * can be easily determined as: 53 * 54 * sizeof(stuct compcomhdr) 55 * + msgcount * sizeof(struct compmsg) 56 * + paramcount * sizeof(int32_t) 57 * + stringlen 58 * 59 * there is no need to have the size in the header. 60 */ 61 62 typedef struct 63 { /* Header describing the section */ 64 int32_t srcname; /* index into strings of source file path */ 65 int32_t version; /* a version number for the .compcom format */ 66 int32_t msgcount; /* count of messages in the section */ 67 int32_t paramcount; /* count of parameters in the section */ 68 int32_t stringcount; /* count of strings in the section */ 69 int32_t stringlen; /* count of total bytes in strings */ 70 } compcomhdr; 71 72 /* 73 * The data for the .o after the header as: 74 * 75 * compmsg msgs[msgcount]; the array of messages 76 * int32_t param[paramcount]; the parameters used in the messages 77 * parameters are either integers or 78 * string-indices 79 * char msgstrings[stringlen]; the strings used in the messages 80 */ 81 82 /* 83 * Message Classes and Visualization Bits 84 * -------------------------------------- 85 * Each of the messages above may belong to zero or more visualization 86 * classes, governed by a table using zero or more of the following symbolic 87 * names for the classes: 88 */ 89 typedef enum { 90 CCMV_WANT = 0x000, /* High-priority RFE -- used only for human */ 91 /* reading of message list */ 92 CCMV_UNIMPL = 0x000, /* Unimplemented -- used only for human */ 93 /* reading of message list */ 94 CCMV_OBS = 0x000, /* Obsolete -- to be replaced by a different */ 95 /* message with different parameters -- */ 96 /* used only for human reading of message */ 97 /* list */ 98 CCMV_VER = 0x001, /* Versioning messages */ 99 CCMV_WARN = 0x002, /* Warning messages */ 100 CCMV_PAR = 0x004, /* Parallelization messages */ 101 CCMV_QUERY = 0x008, /* Compiler queries */ 102 CCMV_LOOP = 0x010, /* Loop detail messages */ 103 CCMV_PIPE = 0x020, /* Pipelining messages */ 104 CCMV_INLINE = 0x040, /* Inlining information */ 105 CCMV_MEMOPS = 0x080, /* Messages concerning memory operations */ 106 CCMV_FE = 0x100, /* Front-end messages (all compilers) */ 107 CCMV_CG = 0x200, /* Code-generator messages (all compilers) */ 108 CCMV_BASIC = 0x400, /* for default messages */ 109 CCMV_ALL = 0x7FFFFFFF /* for all messages */ 110 } COMPCLASS_ID; 111 112 typedef enum ccm_msgid 113 { 114 /* Group: Versioning Messages */ 115 /* All of these are global to the .o, and will */ 116 /* have lineno = pcoffset = 0 */ 117 118 CCM_MODDATE=0x00100, /* Source file <s1>, last modified on date <s2> */ 119 CCM_COMPVER, /* Component <s1>, version <s2> */ 120 /* [Emitted for each component of the compiler.] */ 121 CCM_COMPDATE, /* Compilation date <s1> */ 122 /* [<s1> is an I18n string with the date and time] */ 123 CCM_COMPOPT, /* Compilation options <s1> */ 124 /* [As specified by the user] */ 125 CCM_ACOMPOPT, /* Actual Compilation options <s1> */ 126 /* [As expanded by the driver] */ 127 128 /* Group: Warning Messages */ 129 CCM_VAR_ALIAS=0x00200, /* Variable <v1> aliased to <v2> */ 130 CCM_FBIRDIFF, /* Profile feedback data inconsistent with */ 131 /* intermediate representation file; check compiler */ 132 /* version, flags and source file */ 133 CCM_OPTRED_SWAP, /* Optimization level for <p1> reduced from <i2> to */ 134 /* <i3> due to insufficient swap space */ 135 CCM_OPTRED_CPLX, /* Optimization level for <p1> reduced from <i2> to */ 136 /* <i3> due to program complexity */ 137 CCM_UNKNOWN, /* Unexpected compiler comment <i1> */ 138 139 /* Group: Parallelization Messages */ 140 CCM_UNPAR_CALL=0x00400, /* Loop below not parallelized because it contains a */ 141 /* call to <p1> */ 142 143 /* CCMV_WANT: Don't generate CCM_PAR_SER; always use CCM_PAR_SER_VER */ 144 CCM_PAR_SER, /* Both serial and parallel versions generated for */ 145 /* loop below */ 146 CCM_PAR_SER_VER, /* Both serial and parallel versions generated for */ 147 /* loop below; with parallel version used if <s1>, */ 148 /* serial otherwise */ 149 CCM_PAR_DRECTV, /* Loop below parallelized by explicit user */ 150 /* directive */ 151 CCM_APAR, /* Loop below autoparallelized */ 152 CCM_AUTOPAR, /* Loop below autoparallelized; equivalent */ 153 /* explict directive is <s1> */ 154 CCM_UNPAR_DD, /* Loop below could not be parallelized because of a */ 155 /* data dependency on <v1>, <v2>, ... */ 156 /* [The number of parameters will determine how many */ 157 /* names appear, and the formatter will get the */ 158 /* commas right.] */ 159 CCM_UNPAR_DDA, /* Loop below could not be parallelized because of a */ 160 /* data dependency or aliasing of <v1>, <v2>, ... */ 161 CCM_UNPAR_ANONDD, /* Loop below could not be parallelized because of */ 162 /* an anonymous data dependency */ 163 CCM_UNPAR_ANONDDA, /* Loop below could not be parallelized because of */ 164 /* an anonymous data dependency or aliasing */ 165 CCM_PAR_WORK, /* Loop below parallelized, but might not contain */ 166 /* enough work to be efficiently run in parallel */ 167 CCM_UNPAR_EXIT, /* Loop below not parallelized because it contains */ 168 /* multiple exit points */ 169 CCM_UNPAR_STRNG, /* Loop below not parallelized because it contains a */ 170 /* strange flow of control */ 171 CCM_UNPAR_IO, /* Loop below not parallelized because it contains */ 172 /* I/O or other MT-unsafe calls */ 173 CCM_PAR_BODY_NAME, /* Parallel loop-body code is in function <p1> */ 174 CCM_UNPAR_NLOOPIDX, /* Loop below not parallelized because loop index */ 175 /* not found */ 176 CCM_UNPAR_DRECTV, /* Loop below not parallelized because of explicit */ 177 /* user directive */ 178 CCM_UNPAR_NOTPROFIT, /* Loop below not parallelized because it was not */ 179 /* profitable to do so */ 180 CCM_UNPAR_NEST, /* Loop below not parallelized because it was */ 181 /* nested in a parallel loop */ 182 CCM_UNPAR, /* Loop below not parallelized */ 183 CCM_UNPAR_NOAUTO, /* Loop below not parallelized because */ 184 /* autoparallelization is not enabled */ 185 CCM_PR_L_VAR, /* Private variables in loop below: */ 186 /* <v1>, <v2>, ... */ 187 /* [The number of parameters will determine how many */ 188 /* names appear, and the formatter will get the */ 189 /* commas right.] */ 190 CCM_SH_L_VAR, /* Shared variables in loop below: */ 191 /* <v1>, <v2>, ... */ 192 CCM_TP_L_VAR, /* Threadprivate variables in loop below: */ 193 /* <v1>, <v2>, ... */ 194 CCM_RV_L_VAR, /* Reduction variables in loop below: */ 195 /* <v1>, <v2>, ... */ 196 CCM_IM_L_VAR, /* Implicit variables in loop below: */ 197 /* <v1>, <v2>, ... */ 198 CCM_PR_O_VAR, /* Private variables in OpenMP construct below: */ 199 /* <v1>, <v2>, ... */ 200 CCM_SH_O_VAR, /* Shared variables in OpenMP construct below: */ 201 /* <v1>, <v2>, ... */ 202 CCM_TP_O_VAR, /* Threadprivate variables in OpenMP construct */ 203 /* below: <v1>, <v2>, ... */ 204 CCM_RV_O_VAR, /* Reduction variables in OpenMP construct below: */ 205 /* <v1>, <v2>, ... */ 206 CCM_IM_O_VAR, /* Implicit variables in OpenMP construct below: */ 207 /* <v1>, <v2>, ... */ 208 CCM_UNPAR_IN_OMP, /* Loop below not parallelized because it is inside */ 209 /* an OpenMP region */ 210 CCM_FP_O_VAR, /* Firstprivate variables in OpenMP construct below: */ 211 /* <v1>, <v2>, ... */ 212 CCM_LP_O_VAR, /* Lastprivate variables in OpenMP construct below: */ 213 /* <v1>, <v2>, ... */ 214 CCM_CP_O_VAR, /* Copyprivate variables in OpenMP construct below: */ 215 /* <v1>, <v2>, ... */ 216 CCM_PR_OAS_VAR, /* Variables autoscoped as PRIVATE in OpenMP */ 217 /* construct below: <v1>, <v2>, ... */ 218 CCM_SH_OAS_VAR, /* Variables autoscoped as SHARED in OpenMP */ 219 /* construct below: <v1>, <v2>, ... */ 220 CCM_FP_OAS_VAR, /* Variables autoscoped as FIRSTPRIVATE in OpenMP */ 221 /* construct below: <v1>, <v2>, ... */ 222 CCM_LP_OAS_VAR, /* Variables autoscoped as LASTPRIVATE in OpenMP */ 223 /* construct below: <v1>, <v2>, ... */ 224 CCM_RV_OAS_VAR, /* Variables autoscoped as REDUCTION in OpenMP */ 225 /* construct below: <v1>, <v2>, ... */ 226 CCM_FAIL_OAS_VAR, /* Variables cannot be autoscoped in OpenMP */ 227 /* construct below: <v1>, <v2>, ... */ 228 CCM_SERIALIZE_OAS, /* OpenMP parallel region below is serialized */ 229 /* because autoscoping has failed */ 230 CCM_UNPAR_CALL_2, /* <l1> not parallelized because it contains calls */ 231 /* to: <p2>, <p3>, ... */ 232 CCM_PAR_DRECTV_2, /* <l1> parallelized by explicit user directive */ 233 CCM_APAR_2, /* <l1> autoparallelized */ 234 CCM_AUTOPAR_2, /* <l1> autoparallelized; equivalent */ 235 /* explict directive is <s2> */ 236 CCM_UNPAR_DD_2, /* <l1> could not be parallelized because of */ 237 /* data dependences on: <v2>, <v3>, ... */ 238 /* [The number of parameters will determine how many */ 239 /* names appear, and the formatter will get the */ 240 /* commas right.] */ 241 CCM_UNPAR_DDA_2, /* <l1> could not be parallelized because of a */ 242 /* data dependence or aliasing of: <v2>, <v3>, ... */ 243 CCM_UNPAR_ANONDD_2, /* <l1> could not be parallelized because of an */ 244 /* anonymous data dependence */ 245 CCM_UNPAR_ANONDDA_2, /* <l1> could not be parallelized because of an */ 246 /* anonymous data dependence or aliasing */ 247 CCM_PAR_WORK_2, /* <l1> parallelized, but might not contain */ 248 /* enough work to run efficiently in parallel */ 249 CCM_UNPAR_EXIT_2, /* <l1> not parallelized because it contains */ 250 /* multiple exit points */ 251 CCM_UNPAR_STRANGE_2, /* <l1> not parallelized because it contains a */ 252 /* strange flow of control */ 253 CCM_UNPAR_IO_2, /* <l1> not parallelized because it contains */ 254 /* I/O or other MT-unsafe calls */ 255 CCM_PAR_BODY_NAME_2, /* <l1> parallel loop-body code placed in */ 256 /* function <p2> along with <i3> inner loops */ 257 CCM_UNPAR_NLOOPIDX_2, /* <l1> not parallelized because loop index not */ 258 /* found */ 259 CCM_UNPAR_DRECTV_2, /* <l1> not parallelized because of explicit */ 260 /* user directive */ 261 CCM_UNPAR_NOTPROFIT_2, /* <l1> not parallelized because it was not */ 262 /* profitable to do so */ 263 CCM_UNPAR_NEST_2, /* <l1> not parallelized because it was */ 264 /* nested within a parallel loop */ 265 CCM_UNPAR_2, /* <l1> not parallelized */ 266 CCM_UNPAR_NOAUTO_2, /* <l1> not parallelized because */ 267 /* autoparallelization is not enabled */ 268 CCM_PR_L_VAR_2, /* Private variables in <l1>: */ 269 /* <v2>, <v3>, ... */ 270 /* [The number of parameters will determine how many */ 271 /* names appear, and the formatter will get the */ 272 /* commas right.] */ 273 CCM_SH_L_VAR_2, /* Shared variables in <l1>: */ 274 /* <v2>, <v3>, ... */ 275 CCM_TP_L_VAR_2, /* Threadprivate variables in <l1>: */ 276 /* <v2>, <v3>, ... */ 277 CCM_RV_L_VAR_2, /* Reduction variables of operator <s1> in <l2>: */ 278 /* <v3>, <v4>, ... */ 279 CCM_IM_L_VAR_2, /* Implicit variables in <l1>: */ 280 /* <v2>, <v3>, ... */ 281 CCM_PR_O_VAR_2, /* Private variables in <r1>: */ 282 /* <v2>, <v3>, ... */ 283 CCM_SH_O_VAR_2, /* Shared variables in <r1>: */ 284 /* <v2>, <v3>, ... */ 285 CCM_TP_O_VAR_2, /* Threadprivate variables in <r1>: */ 286 /* <v2>, <v3>, ... */ 287 CCM_RV_O_VAR_2, /* Reduction variables of operator <s1> in <r2>: */ 288 /* <v3>, <v4>, ... */ 289 CCM_IM_O_VAR_2, /* Implicit variables in <r1>: */ 290 /* <v2>, <v3>, ... */ 291 CCM_UNPAR_IN_OMP_2, /* <l1> not parallelized because it is inside */ 292 /* OpenMP region <r2> */ 293 CCM_FP_O_VAR_2, /* Firstprivate variables in <r1>: */ 294 /* <v2>, <v3>, ... */ 295 CCM_LP_O_VAR_2, /* Lastprivate variables in <r1>: */ 296 /* <v2>, <v3>, ... */ 297 CCM_CP_O_VAR_2, /* Copyprivate variables in <r1>: */ 298 /* <v2>, <v3>, ... */ 299 CCM_PR_OAS_VAR_2, /* Variables autoscoped as PRIVATE in <r1>: */ 300 /* <v2>, <v3>, ... */ 301 CCM_SH_OAS_VAR_2, /* Variables autoscoped as SHARED in <r1>: */ 302 /* <v2>, <v3>, ... */ 303 CCM_FP_OAS_VAR_2, /* Variables autoscoped as FIRSTPRIVATE in <r1>: */ 304 /* <v2>, <v3>, ... */ 305 CCM_LP_OAS_VAR_2, /* Variables autoscoped as LASTPRIVATE in <r1>: */ 306 /* <v2>, <v3>, ... */ 307 CCM_RV_OAS_VAR_2, /* Variables autoscoped as REDUCTION of operator */ 308 /* <s1> in <r2>: <v3>, <v4>, ... */ 309 CCM_FAIL_OAS_VAR_2, /* Variables treated as shared because they cannot */ 310 /* be autoscoped in <r1>: <v2>, <v3>, ... */ 311 CCM_SERIALIZE_OAS_2, /* <r1> will be executed by a single thread because */ 312 /* autoscoping for some variables was not successful */ 313 314 /* Group: Parallelization Questions asked of the user */ 315 /* How will the user answer these questions? */ 316 CCM_QPERMVEC=0x00800, /* Is <v1> a permutation vector during execution of */ 317 /* <l2>? */ 318 CCM_QEXPR, /* Is expression <s1> true for <l2>? */ 319 CCM_QSAFECALL, /* Is subroutine <p1> MP-safe as used in <l2>? */ 320 321 /* Group: Loop Optimization Messages */ 322 CCM_LCOST=0x01000, /* Loop below estimated to cost <i1> cycles per */ 323 /* iteration */ 324 CCM_UNROLL, /* Loop below unrolled <i1> times */ 325 /* CCMV_WANT: the next one should be replaced by CCM_IMIX2 */ 326 CCM_IMIX, /* Loop below has <i1> loads, <i2> stores, */ 327 /* <i3> prefetches, <i4> FPadds, <i5> FPmuls, and */ 328 /* <i6> FPdivs per iteration */ 329 CCM_SPILLS, /* Loop below required <i1> integer register spills, */ 330 /* <i2> FP register spills, and used */ 331 /* <i3> integer registers and <i4> FP registers */ 332 CCM_LFISSION, /* Loop below fissioned into <i1> loops */ 333 CCM_LPEEL, /* Loop below had iterations peeled off for better */ 334 /* unrolling and/or parallelization */ 335 CCM_LBLOCKED, /* Loop below blocked by <i1> for improved cache */ 336 /* performance */ 337 CCM_LTILED, /* Loop below tiled for better performance */ 338 CCM_LUNRJAM, /* Loop below unrolled and jammed */ 339 CCM_LWHILE2DO, /* Bounds test for loop below moved to top of loop */ 340 CCM_L2CALL, /* Loop below replaced by a call to <p1> */ 341 CCM_LDEAD, /* Loop below deleted as dead code */ 342 CCM_LINTRCHNG, /* Loop below interchanged with loop on line <i1> */ 343 CCM_FUSEDTO, /* Loop below fused with loop on line <i1> */ 344 CCM_FUSEDFROM, /* Loop from line <i1> fused with loop below */ 345 CCM_VECINTRNSC, /* Loop below transformed to use calls to vector */ 346 /* intrinsic <p1>, <p2>, ... */ 347 /* [The number of parameters will determine how many */ 348 /* names appear, and the formatter will get the */ 349 /* commas right.] */ 350 CCM_LSTRIPMINE, /* Loop below strip-mined */ 351 CCM_LNEST2LOOPS, /* Loop below collapsed with loop on line <i1> */ 352 CCM_LREVERSE, /* Loop below has had its iteration direction */ 353 /* reversed */ 354 CCM_IMIX2, /* Loop below has <i1> loads, <i2> stores, */ 355 /* <i3> prefetches, <i4> FPadds, <i5> FPmuls, */ 356 /* <i6> FPdivs, <i7> FPsubs, and <i8> FPsqrts per */ 357 /* iteration */ 358 CCM_LUNRFULL, /* Loop below fully unrolled */ 359 CCM_ELIM_NOAMORTINST, /* Loop below was eliminated as it contains no */ 360 /* non-amortizable instructions */ 361 CCM_COMP_DALIGN, /* Performance of loop below could be improved */ 362 /* by compiling with -dalign */ 363 CCM_INTIMIX, /* Loop below has <i1> int-loads, <i2> int-stores, */ 364 /* <i3> alu-ops, <i4> muls, <i5> int-divs and */ 365 /* <i6> shifts per iteration */ 366 CCM_LMULTI_VERSION, /* <l1> multi-versioned. Specialized version */ 367 /* is <l2> */ 368 CCM_LCOST_2, /* <l1> estimated to cost <i2> cycles per iteration */ 369 CCM_UNROLL_2, /* <l1> unrolled <i2> times */ 370 371 /* CCMV_WANT: the next one should be replaced by CCM_IMIX2_B or CCM_IMIX3_B */ 372 CCM_IMIX_B, /* <l1> has <i2> loads, <i3> stores, */ 373 /* <i4> prefetches, <i5> FPadds, <i6> FPmuls, and */ 374 /* <i7> FPdivs per iteration */ 375 CCM_SPILLS_2, /* <l1> required <i2> integer register spills, */ 376 /* <i3> FP register spills, and used */ 377 /* <i4> integer registers and <i5> FP registers */ 378 CCM_LFISSION_2, /* <l1> fissioned into <i2> loops, generating: */ 379 /* <l3>, <l4>, ... */ 380 /* [The number of parameters will determine how many */ 381 /* names appear, and the formatter will get the */ 382 /* commas right.] */ 383 CCM_LFISSION_FRAG, /* <l1> contains code from lines: <i2>, <i3>, ... */ 384 CCM_LPEEL_2, /* <l1> had iterations peeled off for better */ 385 /* unrolling and/or parallelization */ 386 CCM_LBLOCKED_2, /* <l1> blocked by <i2> for improved memory */ 387 /* hierarchy performance, new inner loop <l3> */ 388 CCM_LOUTER_UNROLL, /* <l1> is outer-unrolled <i2> times as part */ 389 /* of unroll and jam */ 390 CCM_LJAMMED, /* All <i1> copies of <l2> are fused together */ 391 /* as part of unroll and jam */ 392 CCM_LWHILE2DO_2, /* Bounds test for <l1> moved to top of loop */ 393 CCM_L2CALL_2, /* <l1> replaced by a call to <p2> */ 394 CCM_LDEAD_2, /* <l1> deleted as dead code */ 395 CCM_LINTRCHNG_2, /* <l1> interchanged with <l2> */ 396 CCM_LINTRCHNG_ORDER, /* For loop nest below, the final order of loops */ 397 /* after interchanging and subsequent */ 398 /* transformations is: <l1>, <l2>, ... */ 399 /* [The number of parameters will determine how many */ 400 /* names appear, and the formatter will get the */ 401 /* commas right.] */ 402 CCM_FUSED_2, /* <l1> fused with <l2>, new loop <l3> */ 403 CCM_VECINTRNSC_2, /* <l1> transformed to use calls to vector */ 404 /* intrinsics: <p2>, <p3>, ... */ 405 CCM_LSTRIPMINE_2, /* <l1> strip-mined by <i2>, new inner loop <l3> */ 406 CCM_LNEST2LOOPS_2, /* <l1> collapsed with <l2>, new loop <l3> */ 407 CCM_LREVERSE_2, /* <l1> has had its iteration direction reversed */ 408 CCM_IMIX2_B, /* <l1> has <i2> loads, <i3> stores, */ 409 /* <i4> prefetches, <i5> FPadds, <i6> FPmuls, */ 410 /* <i7> FPdivs, <i8> FPsubs, and <i9> FPsqrts per */ 411 /* iteration */ 412 CCM_LUNRFULL_2, /* <l1> fully unrolled */ 413 CCM_ELIM_NOAMORTINST_2, /* <l1> was eliminated as it contains no */ 414 /* non-amortizable instructions */ 415 CCM_COMP_DALIGN_2, /* Performance of <l1> could be improved by */ 416 /* compiling with -dalign */ 417 CCM_INTIMIX_2, /* <l1> has <i2> int-loads, <i3> int-stores, */ 418 /* <i4> alu-ops, <i5> muls, <i6> int-divs and */ 419 /* <i7> shifts per iteration */ 420 CCM_OMP_REGION, /* Source OpenMP region below has tag <r1> */ 421 CCM_LMICROVECTORIZE, /* <l1> is micro-vectorized */ 422 CCM_LMULTI_VERSION_2, /* <l1> multi-versioned for <s2>. */ 423 /* Specialized version is <l3> */ 424 CCM_LCLONED, /* <l1> cloned for <s2>. Clone is <l3> */ 425 CCM_LUNSWITCHED, /* <l1> is unswitched. New loops */ 426 /* are <l2> and <l3> */ 427 CCM_LRESWITCHED, /* Loops <l1> and <l2> and their surrounding */ 428 /* conditional code have been merged to */ 429 /* form loop <l3> */ 430 CCM_LSKEWBLOCKED, /* <l1> skew-blocked by <i2> with slope */ 431 /* <i3> for improved memory hierarchy */ 432 /* performance, new inner loop <l4> */ 433 CCM_IVSUB, /* Induction variable substitution performed on <l1> */ 434 CCM_ONEITER_REPLACED, /* <l1> determined to have a trip count of 1; */ 435 /* converted to straight-line code */ 436 CCM_IMIX3_B, /* <l1> has <i2> loads, <i3> stores, */ 437 /* <i4> prefetches, <i5> FPadds, <i6> FPmuls, */ 438 /* <i7> FPmuladds, <i8> FPdivs, and <i9> FPsqrts per */ 439 /* iteration */ 440 441 /* Group: Pipelining Messages */ 442 CCM_PIPELINE=0x02000, /* Loop below pipelined */ 443 CCM_PIPESTATS, /* Loop below scheduled with steady-state cycle */ 444 /* count = <i1> */ 445 CCM_NOPIPE_CALL, /* Loop could not be pipelined because it contains */ 446 /* calls */ 447 CCM_NOPIPE_INTCC, /* Loop could not be pipelined because it sets */ 448 /* multiple integer condition codes. */ 449 CCM_NOPIPE_MBAR, /* Loop could not be pipelined because it contains a */ 450 /* memory barrier instruction */ 451 CCM_NOPIPE_MNMX, /* Loop could not be pipelined because it contains */ 452 /* a minimum or a maximum operation */ 453 CCM_NOPIPE_U2FLT, /* Loop could not be pipelined because it contains */ 454 /* an unsigned to float conversion */ 455 CCM_NOPIPE_GOT, /* Loop could not be pipelined because it sets the */ 456 /* Global Offset Table pointer */ 457 CCM_NOPIPE_IDIV, /* Loop could not be pipelined because it contains */ 458 /* an integer divide */ 459 CCM_NOPIPE_PRFTCH, /* Loop could not be pipelined because it contains */ 460 /* a prefetch operation */ 461 CCM_NOPIPE_EXIT, /* Loop could not be pipelined because it contains */ 462 /* an exit operation */ 463 CCM_NOPIPE_REG, /* Loop could not be pipelined because it contains */ 464 /* instructions that set the %gsr or %fsr register */ 465 CCM_NOPIPE_UNS, /* Loop could not be pipelined because it has an */ 466 /* unsigned loop counter */ 467 CCM_NOPIPE_UNSUIT, /* Loop was unsuitable for pipelining */ 468 CCM_NOPIPE_INTRINSIC, /* Loop could not be pipelined because it has an */ 469 /* intrinsic call to <p1> */ 470 CCM_NOPIPE_BIG, /* Loop could not be pipelined as it is too big */ 471 CCM_NOPIPE_INVINTPR, /* Loop could not be pipelined as it contains too */ 472 /* many loop invariant integers = <i1> */ 473 CCM_NOPIPE_INVFLTPR, /* Loop could not be pipelined as it contains too */ 474 /* many loop invariant floats = <i1> */ 475 CCM_NOPIPE_INVDBLPR, /* Loop could not be pipelined as it contains too */ 476 /* many loop invariant doubles = <i1> */ 477 CCM_PIPE_SCHEDAFIPR, /* Loop below was adversely affected by high */ 478 /* integer register pressure = <i1> */ 479 CCM_PIPE_SCHEDAFDPR, /* Loop below was adversely affected by high */ 480 /* double register pressure = <i1> */ 481 CCM_PIPE_SCHEDAFFPR, /* Loop below was adversely affected by high */ 482 /* float register pressure = <i1> */ 483 CCM_NOPIPE_INTPR, /* Loop could not be pipelined due to high */ 484 /* integer register pressure = <i1> */ 485 CCM_NOPIPE_DBLPR, /* Loop could not be pipelined due to high */ 486 /* double register pressure = <i1> */ 487 CCM_NOPIPE_FLTPR, /* Loop could not be pipelined due to high */ 488 /* float register pressure = <i1> */ 489 CCM_PIPELINE_2, /* <l1> pipelined */ 490 CCM_PIPESTATS_2, /* <l1> scheduled with steady-state cycle */ 491 /* count = <i2> */ 492 CCM_NOPIPE_CALL_2, /* <l1> could not be pipelined because it contains */ 493 /* calls */ 494 CCM_NOPIPE_INTCC_2, /* <l1> could not be pipelined because it sets */ 495 /* multiple integer condition codes. */ 496 CCM_NOPIPE_MBAR_2, /* <l1> could not be pipelined because it contains */ 497 /* a memory barrier instruction */ 498 CCM_NOPIPE_MNMX_2, /* <l1> could not be pipelined because it contains */ 499 /* a minimum or a maximum operation */ 500 CCM_NOPIPE_U2FLT_2, /* <l1> could not be pipelined because it contains */ 501 /* an unsigned to float conversion */ 502 CCM_NOPIPE_GOT_2, /* <l1> could not be pipelined because it sets the */ 503 /* Global Offset Table pointer */ 504 CCM_NOPIPE_IDIV_2, /* <l1> could not be pipelined because it contains */ 505 /* an integer divide */ 506 CCM_NOPIPE_PRFTCH_2, /* <l1> could not be pipelined because it contains */ 507 /* a prefetch operation */ 508 CCM_NOPIPE_EXIT_2, /* <l1> could not be pipelined because it contains */ 509 /* an exit operation */ 510 CCM_NOPIPE_REG_2, /* <l1> could not be pipelined because it contains */ 511 /* instructions that set the %gsr or %fsr register */ 512 CCM_NOPIPE_UNS_2, /* <l1> could not be pipelined because it has an */ 513 /* unsigned loop counter */ 514 CCM_NOPIPE_UNSUIT_2, /* <l1> is unsuitable for pipelining */ 515 CCM_NOPIPE_INTRINSIC_2, /* <l1> could not be pipelined because it contains */ 516 /* a call to intrinsic <p2> */ 517 CCM_NOPIPE_BIG_2, /* <l1> could not be pipelined as it is too big */ 518 CCM_NOPIPE_INVINTPR_2, /* <l1> could not be pipelined as it contains too */ 519 /* many loop invariant integers = <i2> */ 520 CCM_NOPIPE_INVFLTPR_2, /* <l1> could not be pipelined as it contains too */ 521 /* many loop invariant floats = <i2> */ 522 CCM_NOPIPE_INVDBLPR_2, /* <l1> could not be pipelined as it contains too */ 523 /* many loop invariant doubles = <i2> */ 524 CCM_PIPE_SCHEDAFIPR_2, /* <l1> was adversely affected by high */ 525 /* integer register pressure = <i2> */ 526 CCM_PIPE_SCHEDAFDPR_2, /* <l1> was adversely affected by high */ 527 /* double register pressure = <i2> */ 528 CCM_PIPE_SCHEDAFFPR_2, /* <l1> was adversely affected by high */ 529 /* float register pressure = <i2> */ 530 CCM_NOPIPE_INTPR_2, /* <l1> could not be pipelined due to high */ 531 /* integer register pressure = <i2> */ 532 CCM_NOPIPE_DBLPR_2, /* <l1> could not be pipelined due to high */ 533 /* double register pressure = <i2> */ 534 CCM_NOPIPE_FLTPR_2, /* <l1> could not be pipelined due to high */ 535 /* float register pressure = <i2> */ 536 537 /* Group: Inlining Messages */ 538 CCM_INLINE=0x04000, /* Function <p1> inlined from source file <s2> into */ 539 /* the code for the following line */ 540 CCM_INLINE2, /* Function <p1> inlined from source file <s2> into */ 541 /* inline copy of function <p3> */ 542 CCM_INLINE_TMPLT, /* Function <p1> inlined from template file <s2> */ 543 /* into the code for the following line */ 544 CCM_INLINE_TMPLT2, /* Function <p1> inlined from template file <s2> */ 545 /* into inline copy of function <p3> */ 546 CCM_INLINE_OUT_COPY, /* Out-of-line copy of inlined function <p1> from */ 547 /* source file <s2> generated */ 548 CCM_NINLINE_REC, /* Recursive function <p1> inlined only up to */ 549 /* depth <i2> */ 550 CCM_NINLINE_NEST, /* Function <p1> not inlined because inlining is */ 551 /* already nested too deeply */ 552 CCM_NINLINE_CMPLX, /* Function <p1> not inlined because it contains */ 553 /* too many operations */ 554 CCM_NINLINE_FB, /* Function <p1> not inlined because the */ 555 /* profile-feedback execution count is too low */ 556 CCM_NINLINE_PAR, /* Function <p1> not inlined because it contains */ 557 /* explicit parallel pragmas */ 558 CCM_NINLINE_OPT, /* Function <p1> not inlined because it is */ 559 /* compiled with optimization level <= 2 */ 560 CCM_NINLINE_USR, /* Function <p1> not inlined because either command */ 561 /* line option or source code pragma prohibited it, */ 562 /* or it's not safe to inline it */ 563 CCM_NINLINE_AUTO, /* Function <p1> not inlined because doing so */ 564 /* would make automatic storage for <p2> too large */ 565 CCM_NINLINE_CALLS, /* Function <p1> not inlined because it contains */ 566 /* too many calls */ 567 CCM_NINLINE_ACTUAL, /* Function <p1> not inlined because it has more */ 568 /* actual parameters than formal parameters */ 569 CCM_NINLINE_FORMAL, /* Function <p1> not inlined because it has more */ 570 /* formal parameters than actual parameters */ 571 CCM_NINLINE_TYPE, /* Function <p1> not inlined because formal */ 572 /* argument type does not match actual type */ 573 CCM_NINLINE_ATYPE, /* Function <p1> not inlined because array formal */ 574 /* argument does not match reshaped array actual */ 575 /* argument type */ 576 CCM_NINLINE_RETTYPE, /* Function <p1> not inlined because return type */ 577 /* does not match */ 578 CCM_NINLINE_EXCPT, /* Function <p1> not inlined because it */ 579 /* guarded by an exception handler */ 580 CCM_NINLINE_UNSAFE, /* Function <p1> not inlined because it might be */ 581 /* unsafe (call alloca(), etc) */ 582 CCM_NINLINE_ALIAS, /* Function <p1> not inlined because inlining it */ 583 /* will make the alias analysis in the calling */ 584 /* function more conservative */ 585 CCM_NINLINE_FEMARK, /* Function <p1> not inlined because it contains */ 586 /* setjmp/longjmp, or indirect goto, etc */ 587 CCM_NINLINE_RAREX, /* Function <p1> not inlined because it is known */ 588 /* to be rarely executed */ 589 CCM_CLONING, /* Function <p1> from source file <s2> cloned, */ 590 /* creating cloned function <p3>; constant */ 591 /* parameters propagated to clone */ 592 CCM_INLINE_B, /* Function <p1> inlined from source file <s2> into */ 593 /* the code for the following line. <i3> loops */ 594 /* inlined */ 595 CCM_INLINE2_B, /* Function <p1> inlined from source file <s2> into */ 596 /* inline copy of function <p3>. <i4> loops inlined */ 597 CCM_INLINE_LOOP, /* Loop in function <p1>, line <i2> has */ 598 /* tag <l3> */ 599 CCM_NINLINE_MULTIENTRY, /* Function <p1> not inlined because it */ 600 /* contains an ENTRY statement */ 601 CCM_NINLINE_VARARGS, /* Function <p1> not inlined because variable */ 602 /* argument routines cannot be inlined */ 603 CCM_NINLINE_UNSEEN_BODY, /* Function <p1> not inlined because the compiler */ 604 /* has not seen the body of the function. Use */ 605 /* -xcrossfile or -xipo in order to inline it */ 606 CCM_NINLINE_UPLEVEL, /* Function <p1> not inlined because it is a */ 607 /* nested routine containing references to */ 608 /* variables defined in an outer function */ 609 CCM_NINLINE_CMDLINE, /* Function <p1> not inlined because either */ 610 /* -xinline or source code pragma prohibited it */ 611 CCM_NINLINE_CALL_CMPLX, /* Call to <p1> not inlined because of the */ 612 /* complexity of the calling routine */ 613 CCM_NINLINE_LANG_MISMATCH, /* Call to <p1> not inlined because it is in */ 614 /* a different language */ 615 CCM_NINLINE_RTN_WEAK, /* Function <p1> not inlined because it */ 616 /* is marked weak */ 617 CCM_NINLINE_CALL_WEAKFILE, /* Call to <p1> not inlined because it is */ 618 /* in a different file and it contains a */ 619 /* call to a weak routine */ 620 CCM_NINLINE_CALL_TRYCATCH, /* Call to <p1> not inlined because it is */ 621 /* in a different file and contains an */ 622 /* explicit try/catch */ 623 CCM_NINLINE_CALL_REGP, /* Call to <p1> not inlined because it would */ 624 /* cause excessive register pressure */ 625 CCM_NINLINE_RTN_REGP, /* Function <p1> not inlined because it would */ 626 /* cause excessive register pressure */ 627 CCM_NINLINE_CALL_XPENSV, /* Call to <p1> not inlined because analysis */ 628 /* exceeds the compilation time limit */ 629 CCM_NINLINE_READONLYIR, /* Function <p1> not inlined because it is in a file */ 630 /* specified as read-only by -xipo_archive=readonly */ 631 /* and it contains calls to static functions */ 632 CCM_NINLINE_CALL_THUNK, /* Call to <p1> not inlined because it is in a */ 633 /* compiler-generated function that does not */ 634 /* permit inlining */ 635 CCM_NINLINE_CALL_XTARGETS, /* Indirect callsite has too many targets; */ 636 /* callsite marked do not inline */ 637 CCM_NINLINE_SELFTAIL_RECURSIVE, /* Function <p1> not inlined because */ 638 /* of a recursive tail-call to itself */ 639 CCM_NINLINE_PRAGMA, /* Function <p1> not inlined because it contains */ 640 /* explicit parallel or alias pragmas */ 641 CCM_NINLINE_CMPLX2, /* Function <p1> not inlined because it contains too */ 642 /* many operations. Increase max_inst_hard in order */ 643 /* to inline it: -xinline_param=max_inst_hard:n */ 644 CCM_NINLINE_RARE, /* Function <p1> not inlined because the call */ 645 /* is rarely executed */ 646 CCM_NINLINE_PAR2, /* Function <p1> not inlined because it is called */ 647 /* within a region guarded by an explicit */ 648 /* parallel pragmas */ 649 CCM_NINLINE_G_LIMIT, /* Function <p1> not inlined because it would exceed */ 650 /* the permitted global code size growth limit. Try */ 651 /* to increase max_growth in order to inline it: */ 652 /* -xinline_param=max_growth:n */ 653 CCM_NINLINE_L_LIMIT, /* Function <p1> not inlined because it would exceed */ 654 /* the maximum function size growth limit. Increase */ 655 /* max_function_inst in order to inline it: */ 656 /* -xinline_param=max_function_inst:n */ 657 CCM_NINLINE_REC2, /* Recursive function <p1> is inlined only up to */ 658 /* <i2> levels and up to <i3> size. Increase */ 659 /* max_recursive_deptha or max_recursive_inst in */ 660 /* order to inline it: */ 661 /* -xinline_param=max_recursive_depth:n, */ 662 /* -xinline_param=max_recursive_inst:n */ 663 CCM_NINLINE_FB2, /* Function <p1> not inlined because the */ 664 /* profile-feedback execution count is too */ 665 /* low. Decrease min_counter in order to inline it: */ 666 /* -xinline_param:min_counter:n */ 667 CCM_NINLINE_CS_CMPLX, /* Function <p1> not inlined because called */ 668 /* function's size is too big. Increase */ 669 /* max_inst_soft in order to inline it: */ 670 /* -xinline_param=max_inst_soft:n */ 671 CCM_NINLINE_R_EXCPT, /* Function <p1> not inlined because it contains */ 672 /* an exception handler */ 673 CCM_NINLINE_ASM, /* Function <p1> not inlined because */ 674 /* it contains asm statements */ 675 CCM_NINLINE_R_READONLYIR, /* Function <p1> not inlined because it is in a file */ 676 /* specified as read-only by -xipo_archive=readonly */ 677 /* and it is a static function */ 678 CCM_NINLINE_C_READONLYIR, /* Call to <p1> not inlined because the calling */ 679 /* function is in a file specified as read-only */ 680 /* by -xipo_archive=readonly */ 681 CCM_NINLINE_NEVERRETURN, /* Function <p1> not inlined because it */ 682 /* never returns */ 683 684 /* Group: Messages Concerning Memory Operations */ 685 /* Notes: */ 686 /* a. In all of these, <s1> is a string that is something like */ 687 /* "A(i+5*k)" or "structure.field", giving the high-level */ 688 /* construct that is being loaded or stored. */ 689 /* */ 690 /* b. In all of these, <x2> refers to an instruction offset, */ 691 /* expressed as a 32-bit signed integer. It is assumed */ 692 /* that any prefetches will be within this range of the */ 693 /* load/store they are prefetching for. */ 694 CCM_MPREFETCH=0x08000, /* Prefetch of <s1> inserted */ 695 /* [This message has a lineno for the source, */ 696 /* but no instaddr for the disassembly.] */ 697 CCM_MPREFETCH_LD, /* Prefetch of <s1> inserted for load at <x2> */ 698 /* [This message has lineno = -1, */ 699 /* and is for disassembly only] */ 700 CCM_MPREFETCH_ST, /* Prefetch of <s1> inserted for store at <x2> */ 701 /* [This message has lineno = -1, */ 702 /* and is for disassembly only] */ 703 CCM_MPREFETCH_FB, /* Prefetch of <s1> inserted based on feedback data */ 704 /* [This message has a lineno for the source, */ 705 /* but no instaddr for the disassembly.] */ 706 CCM_MPREFETCH_FB_LD, /* Prefetch of <s1> inserted for load at <x2> based */ 707 /* on feedback data */ 708 /* [This message has lineno = -1, */ 709 /* and is for disassembly only] */ 710 CCM_MPREFETCH_FB_ST, /* Prefetch of <s1> inserted for store at <x2> based */ 711 /* on feedback data */ 712 /* [This message has lineno = -1, */ 713 /* and is for disassembly only] */ 714 CCM_MLOAD, /* Load below refers to <s1> */ 715 /* [This message has lineno = -1, */ 716 /* and is for disassembly only] */ 717 CCM_MSTORE, /* Store below refers to <s1> */ 718 /* [This message has lineno = -1, */ 719 /* and is for disassembly only] */ 720 CCM_MLOAD_P, /* Load below refers to <s1>, and was prefetched */ 721 /* at <x2> */ 722 /* [This message has lineno = -1, */ 723 /* and is for disassembly only] */ 724 CCM_MSTORE_P, /* Store below refers to <s1>, and was prefetched */ 725 /* at <x2> */ 726 /* [This message has lineno = -1, */ 727 /* and is for disassembly only] */ 728 729 /* Group: Front-end messages [all compilers] */ 730 /* Group: F95 Front-end Messages */ 731 CCM_COPYIN=0x10000, /* Parameter <i1> caused a copyin in the following */ 732 /* call */ 733 CCM_COPYOUT, /* Parameter <i1> caused a copyout in the following */ 734 /* call */ 735 CCM_COPYINOUT, /* Parameter <i1> caused both a copyin and copyout */ 736 /* in the following call */ 737 CCM_PADDING, /* Padding of <i1> bytes inserted before */ 738 /* array <v2> */ 739 CCM_PADCOMMON, /* Padding of <i1> bytes inserted before */ 740 /* array <v2> in common block <v3> */ 741 CCM_ALIGN_EQ, /* Variable/array <v1> can not be double-aligned, */ 742 /* because it is equivalenced */ 743 CCM_ALIGN_PERF, /* Alignment of variables in common block may cause */ 744 /* performance degradation */ 745 CCM_ALIGN_STRUCT, /* Alignment of component <s1> in numeric sequence */ 746 /* structure <s2> may cause performance degradation */ 747 CCM_TMP_COPY, /* Argument <v1> copied to a temporary */ 748 CCM_TMP_COPYM, /* Argument <v1> might be copied to a temporary; */ 749 /* runtime decision made */ 750 CCM_PROC_MISMATCH, /* Argument <i1> to subprogram <p2> differs from */ 751 /* reference on line <i3> */ 752 CCM_PROC_MISMATCH2, /* Scalar argument <i1> to subprogram <p2> is */ 753 /* referred to as an array on line <i3> */ 754 CCM_PROC_MISMATCH3, /* Return type/rank from subprogram <p1> differs */ 755 /* from return on line <i2> */ 756 CCM_DO_EXPR, /* DO statement bounds lead to no executions of the */ 757 /* loop */ 758 CCM_AUTO_BND, /* The bounds for automatic variable <v1> are not */ 759 /* available at all entry points; zero-length */ 760 /* variable might be allocated */ 761 CCM_LIT_PAD, /* The character string literal <s1> padded */ 762 /* to the length specified for the dummy argument */ 763 CCM_ARRAY_LOOP, /* Array statement below generated a loop */ 764 CCM_ARRAY_LOOPNEST, /* Array statement below generated <i1> nested loops */ 765 CCM_ALIGN_PERF2, /* Alignment of variable <v1> in common block <v2> */ 766 /* may cause a performance degradation */ 767 CCM_ALIGN_PERF3, /* Alignment of variable <v1> in blank common may */ 768 /* cause a performance degradation */ 769 CCM_IO_LOOP_ARRAY, /* I/O implied do item below generated an array */ 770 /* section */ 771 772 /* Group: C++ Front-end Messages */ 773 CCM_TMPCONST, /* Implicit invocation of class <s1> constructor for */ 774 /* temporary */ 775 CCM_TMPDEST, /* Implicit invocation of class <s1> destructor for */ 776 /* temporary */ 777 CCM_DBL_CONST, /* Double constant <s1> used in float expression */ 778 CCM_MINLINE, /* Function <p1> inlined from source file <s2> by */ 779 /* front-end */ 780 /* [This refers to front-end inlining, */ 781 /* not the backend inlining above.] */ 782 CCM_MINLINE2, /* Function <p1> from source file <s2> inlined into */ 783 /* inline copy of method <p3> by front-end */ 784 /* [This refers to front-end inlining, */ 785 /* not the backend inlining above.] */ 786 CCM_MINLINE3, /* Function <p1> not inlined because it uses keyword */ 787 /* <s2> */ 788 CCM_MINLINE4, /* Function <p1> not inlined because it is too */ 789 /* complex */ 790 CCM_TMP_COPYOUT, /* Argument <v1> copied from a temporary */ 791 CCM_TMP_COPYOUTM, /* Argument <v1> might be copied from a temporary; */ 792 /* runtime decision made */ 793 CCM_TMP_COPYINOUT, /* Argument <v1> copied in and out of a temporary */ 794 CCM_TMP_COPYINOUTM, /* Argument <v1> might be copied in and out of */ 795 /* a temporary; runtime decision made */ 796 797 /* Group: C Front-end Messages */ 798 /* Group: NJC Front-end Messages */ 799 /* Group: Updated F95 Front-end Messages */ 800 CCM_ARRAY_LOOP_2, /* Array statement below generated loop <l1> */ 801 CCM_ARRAY_LOOPNEST_2, /* Array statement below generated <i1> nested */ 802 /* loops: <l2>, <l3>, ... */ 803 /* [The number of parameters will determine how many */ 804 /* names appear, and the formatter will get the */ 805 /* commas right.] */ 806 CCM_IO_LOOP_ARRAY_2, /* I/O implied do item below generated an array */ 807 /* section: <l1> */ 808 CCM_USER_LOOP, /* Source loop below has tag <l1> */ 809 CCM_FOUND_LOOP, /* Discovered loop below has tag <l1> */ 810 CCM_MFUNCTION_LOOP, /* Copy in M-function of loop below has tag <l1> */ 811 812 /* Group: Code-generator Messages */ 813 CCM_FSIMPLE=0x20000, /* Transformations for fsimple=<i1> applied */ 814 CCM_STACK, /* Function <p1> requires <i2> Mbytes of stack */ 815 /* storage */ 816 CCM_TAILRECUR, /* Recursive tail call in <p1> optimized to jump to */ 817 /* entry point */ 818 CCM_TAILCALL, /* Call to function <p1> was tail-call optimized */ 819 CCM_NI_EXIT_OR_PSEUDO, /* Template could not be early inlined because it */ 820 /* contains the pseudo instruction <s1> */ 821 CCM_NI_BAD_UNARY_OPC, /* Template could not be early inlined because it */ 822 /* contains the instruction opcode <s1> */ 823 CCM_NI_INT_LDD_ON_V9, /* Template could not be early inlined because it */ 824 /* contains integer ldd instructions, which are */ 825 /* deprecated in the v9 architecture */ 826 CCM_NI_LATE_INL_OPC, /* Template could not be early inlined because it */ 827 /* contains the instruction opcode <s1> */ 828 CCM_NI_BAD_IMM_OP, /* Template could not be early inlined because the */ 829 /* relocation or immediate operand <s1> is not well */ 830 /* understood by the optimizer */ 831 CCM_NI_BAD_STATELEAF, /* Template could not be early inlined because it */ 832 /* references the state register <s1> */ 833 CCM_NI_BAD_ASR_19, /* Template could not be early inlined because */ 834 /* %asr19 is not supported in pre v8plus code */ 835 CCM_NI_BAD_FSR_USE, /* Template could not be early inlined because */ 836 /* references to %fsr can only be optimized when the */ 837 /* -iaopts flag is used */ 838 CCM_NI_BAD_REGISTER, /* Template could not be early inlined because it */ 839 /* references the register <s1> */ 840 CCM_NI_NO_RET_VAL, /* Template could not be early inlined because it */ 841 /* does not return the value declared */ 842 CCM_NI_DELAY, /* Template could not be early inlined because it */ 843 /* contains a non nop delay slot */ 844 CCM_NI_SCALL, /* Template could not be early inlined because it */ 845 /* calls a function which returns a structure */ 846 CCM_CASE_POSITION, /* Case block below was placed at position <i1> */ 847 /* based on execution frequency */ 848 CCM_CALL_WITH_CODE, /* Call to <p1> replaced with inline code. <i2> */ 849 /* loops created: <l3>, <l4>, ... */ 850 CCM_NI_BAD_SP_ADDR, /* Template could not be early inlined because it */ 851 /* contains a %sp+reg address */ 852 CCM_NI_BAD_SP_USAGE, /* Template could not be early inlined because it */ 853 /* uses/defines the stack pointer in a non-load/store instruction */ 854 CCM_NI_MIXED_REG_TYPES, /* Template could not be early inlined because it */ 855 /* contains register <s1> used as both x-register and register pair */ 856 CCM_LAST 857 } COMPMSG_ID; 858 /* 859 * The Message Structure 860 * Each message is a fixed-length structure as follows: 861 */ 862 typedef struct 863 { 864 int64_t instaddr; /* the PC offset, relative to the .o .text section */ 865 int32_t lineno; /* the source line to which it refers */ 866 COMPMSG_ID msg_type; /* the specific message index */ 867 int32_t nparam; /* number of parameters to this message */ 868 int32_t param_index; /* the index of the first parameter */ 869 } compmsg; 870 871 #if defined(__cplusplus) 872 extern "C" 873 { 874 #endif 875 /* 876 * Initializes the data structures, converts the source name to a string, 877 * and fills in srcname and version in the header 878 */ 879 void compcom_p_open (char *srcname, int32_t version); 880 881 /* 882 * Finds or enters the string s into the string table, and returns the index 883 * of the string 884 */ 885 int32_t compcom_p_string (char *s); 886 887 /* 888 * Enter the single message. Any string parameters should have been converted 889 * to int32's by calling compcom_p_string() 890 */ 891 void compcom_p_putmsg (int32_t show_bits, int64_t pcoffset, int32_t lineno, 892 COMPMSG_ID m, int32_t nparams); 893 894 /* 895 * Whatever is needed to close the section and write it out to the .o 896 */ 897 void compcom_p_finalize (); 898 899 #if defined(__cplusplus) 900 } 901 #endif 902 903 #endif /* _COMP_COM_H */ 904