Licensed Materials - Property of IBM
Copyright IBM Corp. 2009, 2012.
本文档描述了 XML 格式的编译器报告使用的标记语言。编译器报告记录在编译期间编译器已执行的代码变换尝试。
高性能编译器(如 IBM XL C、C++ 和 Fortran)具有通过执行代码变换来实现优化的功能。但是,由于各种约束(例如源代码局限性和不兼容的编译选项),这些编译器可能无法成功地应用所有尝试的变换。为了提高应用程序性能,需要调整应用程序。通常,此任务极其耗时并且要求应用程序调整者具有丰富的知识和经验。在以减少应用程序调整的困难和提高应用程序调整者效率为目标的同时,IBM XL C、C++ 和 Fortran 编译器现在以 XML 格式生成编译器报告。在编译期间,报告会记录在其中已尝试进行变换的代码区域。此外,此报告还标识变换尝试的类型并确定它是否已成功应用。报告以 XML 1.0 发出,这是工具使用的标准格式。要求应用程序调整者可以通过创建其自己的工具以使用报告来实现性能的自动调整。
编译器变换标记语言是用于描述代码变换尝试的规范,由编译器报告使用。此标记语言的结构和内容由编译器软件包随附的 XML 模式进行定义。为了帮助工具编写者,本文档以 XML 模式的翻译版本(带有简洁描述)形式提供。
对编译器报告进行了版本控制。在文档根元素的版本属性内对版本信息进行了编码。版本由主要版本和次要版本这两部分组成,它们由点分隔(major.minor)。版本控制模型考虑了下列情况:
情况 1. 引入可兼容的更改
这包括添加元素、属性或枚举符值之类的情况。将提高次要版本(例如 1.0 -> 1.1)。要实现向后兼容性(基于较新模式的工具可以处理较早报告),在较新模式中将这些添加情况定义为可选。要实现向前兼容性(基于较早模式的工具可以处理较新报告),处理编译器报告的工具应该忽略所有未识别的内容。
情况 2. 引入不兼容的更改
这包括除去必需元素或属性之类的情况。将同时更新主要版本和缺省名称空间(例如 1.1 -> 2.0)。将不再维护向后和向前兼容性。
XML 名称空间是通过使用 URI 作为 XML 文档中所用元素和属性名称的前缀来对这些名称进行限定的方法。对于编译器报告,元素通过缺省名称空间来限定,而属性则没有限定。以下是此版本的编译器报告中使用的缺省名称空间:
http://www.ibm.com/2010/04/CompilerTransformation
缺省名称空间是版本控制模型的一部分。当引入了不兼容更改时,将对它进行更新。这会防止工具错误地解析不兼容的编译器报告,因为工具将需要另一名称空间。
编译可以由多个步骤(例如编译和链接)组成。对于每个由 IBM XL C、C++ 和 Fortran 编译器执行的编译步骤,所记录信息将保留在其相应 <CompilationStep> 元素中。在 <CompilationStep> 元素中有四个部分。<StepDetails> 元素包含与编译步骤相关的常规信息,例如编译器名称和编译日期。<ProgramHierarchy> 元素包含程序信息,例如源文件、源区域和循环。此程序信息由 <TransformationHierarchy> 元素中列示的变换尝试引用。要为大量变换提供详细程度,根据 <IntraTransformation>(过程内变换)和 <InterTransformation>(过程间变换)元素对它们进一步分类。<ProfilingReports> 元素包含概要分析信息。
“元素”列中的链接提供有关每个特定元素及其属性的更多信息。
元素 | 描述 |
XLTransformationReport | 这是文档根元素。 |
CompilationStep | 此元素包含编译步骤的记录信息。 |
StepDetails | 此元素包含编译步骤的常规信息。 |
Detail | 此元素描述常规信息段。 |
FieldTitle | 此元素包含描述的标题。 |
FieldValue | 此元素包含描述的值。 |
ProgramHierarchy | 此元素包含程序信息。 |
FileList | 此元素包含源文件的列表。 |
File | 此元素描述源文件。 |
RegionList | 此元素包含源文件的源区域的列表。 |
Region | 此元素描述源区域。 |
Pseudocode | 此元素包含伪码。 |
PseudoLoop | 此元素描述伪码循环。 |
PseudoBlock | 此元素描述伪码块。 |
PseudoLine | 此元素描述伪码中的行。 |
LoopList | 此元素包含源区域的循环的列表。 |
Loop | 此元素描述循环。 |
TransformationHierarchy | 此元素包含变换尝试。 |
IntraTransformationList | 此元素包含过程内变换的列表。 |
LoopTransformationList | 此元素包含循环变换尝试的列表。 |
LoopTransform | 此元素描述循环变换尝试。 |
AttributeList | 此元素包含循环变换尝试的属性的列表。 |
Attribute | 此元素描述属性。 |
AttributeTitle | 此元素包含属性的标题。 |
AttributeValue | 此元素包含属性的值。 |
InterTransformationList | 此元素包含过程间变换的列表。 |
InlineOptimizationList | 此元素包含内联优化尝试的列表。 |
InlineOpt | 此元素描述内联优化尝试。 |
DataReorganizationList | 此元素包含所执行数据重组的列表。 |
DataReorg | 此元素描述所执行数据重组。 |
ProfilingReports | 此元素包含概要分析信息。 |
BlockCounterList | 此元素包含块计数器信息的列表。 |
BlockCounter | 此元素描述源区域的块计数器。 |
BlockList | 此元素包含块计数器的块的列表。 |
Block | 此元素描述块计数器的块。 |
CallCounterList | 此元素包含调用计数器信息的列表。 |
CallCounter | 此元素描述源区域的调用计数器。 |
CallList | 此元素包含调用计数器的调用的列表。 |
Call | 此元素描述调用计数器的调用。 |
ValueProfileList | 此元素包含值概要信息的列表。 |
ValueProfile | 此元素描述已进行概要分析的语句。 |
ValueList | 此元素包含已进行概要分析的值的列表。 |
Value | 此元素描述特定值。 |
CacheMissList | 此元素包含高速缓存不命中信息的列表。 |
CacheMiss | 此元素描述高速缓存不命中信息段。 |
描述: 这是文档根元素。
父元素: 无
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
CompilationStep | 1 - unbounded | 此元素包含编译步骤的记录信息。 |
属性 | Value | 描述 |
version | 对于此模式,必须为 1.x。 | 必需. 编译器报告版本。 |
描述: 此元素包含编译步骤的记录信息。
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
StepDetails | 1 - 1 | 此元素包含编译步骤的常规信息。 |
ProgramHierarchy | 1 - 1 | 此元素包含程序信息。 |
TransformationHierarchy | 1 - 1 | 此元素包含变换尝试。 |
ProfilingReports | 1 - 1 | 此元素包含概要分析信息。 |
属性 | Value | 描述 |
name | compiling | linking | 必需. 编译步骤的名称。 |
描述: 此元素包含编译步骤的常规信息。
父元素: <CompilationStep>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
Detail | 0 - unbounded | 此元素描述常规信息段。 |
属性: 无
描述: 此元素描述常规信息段。
父元素: <StepDetails>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
FieldTitle | 1 - 1 | 此元素包含描述的标题。 |
FieldValue | 1 - 1 | 此元素包含描述的值。 |
属性: 无
描述: 此元素包含描述的标题。
父元素: <Detail>
子元素: 无
属性: 无
描述: 此元素包含描述的值。
父元素: <Detail>
子元素: 无
属性: 无
描述: 此元素包含程序信息。
父元素: <CompilationStep>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
FileList | 0 - 1 | 此元素包含源文件的列表。 |
属性: 无
描述: 此元素包含源文件的列表。
父元素: <ProgramHierarchy>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
File | 1 - unbounded | 此元素描述源文件。 |
属性: 无
描述: 此元素描述源文件。
父元素: <FileList>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
RegionList | 0 - 1 | 此元素包含源文件的源区域的列表。 |
属性 | Value | 描述 |
id | 正整数 | 必需. 唯一的源文件标识。 |
name | 字符串 | 必需. 源文件的名称。 |
描述: 此元素包含源文件的源区域的列表。
父元素: <File>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
Region | 1 - unbounded | 此元素描述源区域。 |
属性: 无
描述: 此元素描述源区域。
父元素: <RegionList>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
Pseudocode | 0 - 1 | 此元素包含伪码。 |
LoopList | 0 - 1 | 此元素包含源区域的循环的列表。 |
属性 | Value | 描述 |
id | 正整数 | 必需. 唯一的源区域标识。 |
name | 字符串 | 必需. 源区域的名称。 |
demangledName | 字符串 | 可选. 源区域的解码后名称。 |
startLineNumber | 正整数 | 可选. 源区域的起始行号。 |
endLineNumber | 正整数 | 可选. 源区域的结束行号。 |
描述: 此元素包含伪码。
父元素: <Region>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
PseudoLoop | 0 - unbounded | 此元素描述伪码循环。 |
PseudoBlock | 0 - unbounded | 此元素描述伪码块。 |
PseudoLine | 0 - unbounded | 此元素描述伪码中的行。 |
属性: 无
描述: 此元素描述伪码循环。
父元素: <Pseudocode>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
PseudoLoop | 0 - unbounded | 此元素描述伪码循环。 |
PseudoBlock | 0 - unbounded | 此元素描述伪码块。 |
PseudoLine | 0 - unbounded | 此元素描述伪码中的行。 |
属性 | Value | 描述 |
index | 正整数 | 必需. 源区域内的唯一循环索引。 |
描述: 此元素描述伪码块。
父元素: <Pseudocode>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
PseudoLoop | 0 - unbounded | 此元素描述伪码循环。 |
PseudoBlock | 0 - unbounded | 此元素描述伪码块。 |
PseudoLine | 0 - unbounded | 此元素描述伪码中的行。 |
属性 | Value | 描述 |
index | 正整数 | 必需. 源区域内的唯一块索引。 |
描述: 此元素描述伪码中的行。
父元素: <Pseudocode>
子元素: 无
属性 | Value | 描述 |
fileId | 正整数 | 可选. 将行映射至源文件。 |
lineNumber | 正整数 | 可选. 将行映射至源行。 |
描述: 此元素包含源区域的循环的列表。
父元素: <Region>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
Loop | 1 - unbounded | 此元素描述循环。 |
属性: 无
描述: 此元素描述循环。
父元素: <LoopList>
子元素: 无
属性 | Value | 描述 |
index | 正整数 | 必需. 源区域内的唯一循环索引。 |
startLineNumber | 正整数 | 可选. 循环的起始行号。 |
endLineNumber | 正整数 | 可选. 循环的结束行号。 |
parentLoopIndex | 正整数 | 可选. 父循环的索引。 |
nestLevel | 非负整数 | 可选. 父循环内的嵌套级别。 |
minCost | 非负整数 | 可选. 最小循环执行开销。 |
maxCost | 非负整数 | 可选. 最大循环执行开销。 |
iterKind | array | default | exact | PDF | user | estimated | 可选. 迭代计数的类型。 |
iterCount | 非负整数 | 可选. 循环中迭代的数目。 |
residual | true | false | 可选. 优化之后存在剩余迭代。 |
perfectNest | true | false | 可选. 循环是紧密嵌套。 |
wellBehaved | true | false | 可选. 循环具有单个入口和出口。 |
mayThrow | true | false | 可选. 循环包含可导致抛出异常longjmp 或出口的调用。 |
bumpNormalized | true | false | 可选. 循环块归一化为 1。 |
guarded | true | false | 可选. 循环受监视,以执行至少一个迭代。 |
irreducible | true | false | 可选. 循环对应于不可归约区域。 |
lowerBoundNormalized | true | false | 可选. 循环下边界为零。 |
描述: 此元素包含变换尝试。
父元素: <CompilationStep>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
IntraTransformationList | 0 - 1 | 此元素包含过程内变换的列表。 |
InterTransformationList | 0 - 1 | 此元素包含过程间变换的列表。 |
属性: 无
描述: 此元素包含过程内变换的列表。
父元素: <TransformationHierarchy>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
LoopTransformationList | 0 - 1 | 此元素包含循环变换尝试的列表。 |
属性: 无
描述: 此元素包含循环变换尝试的列表。
父元素: <IntraTransformationList>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
LoopTransform | 1 - unbounded | 此元素描述循环变换尝试。 |
属性: 无
描述: 此元素描述循环变换尝试。
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
AttributeList | 0 - 1 | 此元素包含循环变换尝试的属性的列表。 |
属性 | Value | 描述 |
seq | 正整数 | 必需. 循环变换尝试的序号。 |
type | 请参阅“变换类型”部分 | 必需. 循环变换尝试的类型。 |
result | success | fail | 必需. 循环变换尝试的结果。 |
regionId | 正整数 | 可选. 将循环变换尝试映射至源区域。 |
loopIndex | 正整数 | 可选. 将循环变换尝试映射至循环索引。 |
lineNumber | 正整数 | 可选. 将循环变换尝试映射至源行。 |
phase | Driver | C++ Front End | C Front End | Fortran Front End | Low Level Optimizer | High Level Optimizer | 必需. 尝试了此循环变换的编译阶段。 |
描述: 此元素包含循环变换尝试的属性的列表。
父元素: <LoopTransform>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
Attribute | 1 - unbounded | 此元素描述属性。 |
属性: 无
描述: 此元素描述属性。
父元素: <AttributeList>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
AttributeTitle | 1 - 1 | 此元素包含属性的标题。 |
AttributeValue | 1 - 1 | 此元素包含属性的值。 |
属性: 无
描述: 此元素包含属性的标题。
父元素: <Attribute>
子元素: 无
属性: 无
描述: 此元素包含属性的值。
父元素: <Attribute>
子元素: 无
属性: 无
描述: 此元素包含过程间变换的列表。
父元素: <TransformationHierarchy>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
InlineOptimizationList | 0 - 1 | 此元素包含内联优化尝试的列表。 |
DataReorganizationList | 0 - 1 | 此元素包含所执行数据重组的列表。 |
属性: 无
描述: 此元素包含内联优化尝试的列表。
父元素: <InterTransformationList>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
InlineOpt | 1 - unbounded | 此元素描述内联优化尝试。 |
属性: 无
描述: 此元素描述内联优化尝试。
子元素: 无
属性 | Value | 描述 |
seq | 正整数 | 必需. 内联尝试的序号。 |
type | 请参阅“变换类型”部分 | 必需. 内联尝试的类型。 |
result | success | fail | 必需. 内联尝试的结果。 |
callerRegionId | 正整数 | 可选. 将调用者映射至源区域。 |
calleeRegionId | 正整数 | 可选. 将被调用者映射至源区域。 |
callsiteFileId | 正整数 | 可选. 将调用位置映射至源文件。 |
callsiteLineNumber | 正整数 | 可选. 将调用位置映射至源行。 |
callsiteColumnNumber | 正整数 | 可选. 将调用位置映射至源列。 |
phase | Driver | C++ Front End | C Front End | Fortran Front End | Low Level Optimizer | High Level Optimizer | 必需. 尝试了此内联的编译阶段。 |
描述: 此元素包含所执行数据重组的列表。
父元素: <InterTransformationList>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
DataReorg | 1 - unbounded | 此元素描述所执行数据重组。 |
属性: 无
描述: 此元素描述所执行数据重组。
子元素: 无
属性 | Value | 描述 |
seq | 正整数 | 必需. 所执行数据重组的序号。 |
type | 请参阅“变换类型”部分 | 必需. 数据重组的类型。 |
dataName | 字符串 | 必需. 所执行数据重组中涉及的数据的名称。 |
category | 字符串 | 可选. 所执行数据重组的类别。 |
regionId | 正整数 | 可选. 将所执行数据重组映射至源区域。 |
lineNumber | 正整数 | 可选. 将所执行数据重组映射至源行。 |
phase | Driver | C++ Front End | C Front End | Fortran Front End | Low Level Optimizer | High Level Optimizer | 必需. 执行了此数据重组的编译阶段。 |
描述: 此元素包含概要分析信息。
父元素: <CompilationStep>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
BlockCounterList | 0 - 1 | 此元素包含块计数器信息的列表。 |
CallCounterList | 0 - 1 | 此元素包含调用计数器信息的列表。 |
ValueProfileList | 0 - 1 | 此元素包含值概要信息的列表。 |
CacheMissList | 0 - 1 | 此元素包含高速缓存不命中信息的列表。 |
属性: 无
描述: 此元素包含块计数器信息的列表。
父元素: <ProfilingReports>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
BlockCounter | 1 - unbounded | 此元素描述源区域的块计数器。 |
属性: 无
描述: 此元素描述源区域的块计数器。
父元素: <BlockCounterList>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
BlockList | 0 - 1 | 此元素包含块计数器的块的列表。 |
属性 | Value | 描述 |
regionId | 正整数 | 必需. 将块计数器映射至源区域。 |
execCount | 非负整数 | 必需. 源区域的执行计数。 |
coveredBlock | 非负整数 | 可选. 源区域中所执行的块数。 |
totalBlock | 非负整数 | 可选. 源区域中的总块数。 |
描述: 此元素包含块计数器的块的列表。
父元素: <BlockCounter>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
Block | 1 - unbounded | 此元素描述块计数器的块。 |
属性: 无
描述: 此元素描述块计数器的块。
父元素: <BlockList>
子元素: 无
属性 | Value | 描述 |
index | 正整数 | 必需. 映射至块索引。 |
execCount | 非负整数 | 必需. 块的执行计数。 |
startLineNumber | 正整数 | 可选. 块的起始行号。 |
endLineNumber | 正整数 | 可选. 块的结束行号。 |
描述: 此元素包含调用计数器信息的列表。
父元素: <ProfilingReports>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
CallCounter | 0 - unbounded | 此元素描述源区域的调用计数器。 |
属性: 无
描述: 此元素描述源区域的调用计数器。
父元素: <CallCounterList>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
CallList | 0 - 1 | 此元素包含调用计数器的调用的列表。 |
属性 | Value | 描述 |
regionId | 正整数 | 必需. 将调用计数器映射至源区域。 |
execCount | 非负整数 | 必需. 源区域的执行计数。 |
coveredCall | 非负整数 | 可选. 源区域中所执行的调用数。 |
totalCall | 非负整数 | 可选. 源区域中的总调用数。 |
描述: 此元素包含调用计数器的调用的列表。
父元素: <CallCounter>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
Call | 1 - unbounded | 此元素描述调用计数器的调用。 |
属性: 无
描述: 此元素描述调用计数器的调用。
父元素: <CallList>
子元素: 无
属性 | Value | 描述 |
name | 字符串 | 必需. 调用的名称。 |
execCount | 非负整数 | 必需. 调用的执行计数。 |
lineNumber | 正整数 | 可选. 将调用映射至源行。 |
描述: 此元素包含值概要信息的列表。
父元素: <ProfilingReports>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
ValueProfile | 1 - unbounded | 此元素描述已进行概要分析的语句。 |
属性: 无
描述: 此元素描述已进行概要分析的语句。
父元素: <ValueProfileList>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
ValueList | 0 - 1 | 此元素包含已进行概要分析的值的列表。 |
属性 | Value | 描述 |
name | 字符串 | 必需. 已进行概要分析的值的类型。 |
regionId | 正整数 | 必需. 将值概要信息映射至源区域。 |
lineNumber | 正整数 | 必需. 将值概要信息映射至源行。 |
numberOfValues | 非负整数 | 必需. 已进行概要分析的唯一值的数目。 |
symbolName | 非负整数 | 可选. 已进行概要分析的符号的名称。 |
描述: 此元素包含已进行概要分析的值的列表。
父元素: <ValueProfile>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
Value | 1 - unbounded | 此元素描述特定值。 |
属性: 无
描述: 此元素描述特定值。
父元素: <ValueList>
子元素: 无
属性 | Value | 描述 |
name | 字符串 | 必需. 已进行概要分析的值。 |
execCount | 非负整数 | 必需. 观察到该值的次数。 |
描述: 此元素包含高速缓存不命中信息的列表。
父元素: <ProfilingReports>
元素 | 出现次数(最小次数 - 最大次数) | 描述 |
CacheMiss | 0 - unbounded | 此元素描述高速缓存不命中信息段。 |
属性: 无
描述: 此元素描述高速缓存不命中信息段。
父元素: <CacheMissList>
子元素: 无
属性 | Value | 描述 |
memoryReference | 字符串 | 必需. 高速缓存不命中的内存引用。 |
regionId | 正整数 | 可选. 将高速缓存不命中映射至源区域。 |
lineNumber | 正整数 | 可选. 将高速缓存不命中映射至源行。 |
cacheLevel | 非负整数 | 可选. 高速缓存级别。 |
cacheMissCount | 非负整数 | 可选. 高速缓存不命中计数。 |
cacheMissRate | 小数 | 可选. 高速缓存不命中率。 |
类型 | 描述 |
AliasingInducedDependence | 尝试执行 SIMD 向量化失败,因为别名判别已导致依赖性。 |
AssistThreadDataPrefetch | 已生成用于数据预取的辅助线程。 |
BasicBlockThresholdExceeded | 不能按模块安排循环,因为基本块的数目超过阈值。 |
CompleteLoopUnroll | 已执行完整循环展开。 |
ContainsControlFlow | 尝试执行 SIMD 向量化失败,因为循环包含控制流。 |
ContainsFunctionCall | 尝试执行 SIMD 向量化失败,因为循环包含函数调用。 |
ContainsNonVectorizableReduction | 尝试执行 SIMD 向量化失败,因为循环包含不可向量化归约。 |
ContainsVolatileReference | 尝试执行 SIMD 向量化失败,因为循环包含易失性内存引用。 |
ControlFlowTooComplicated | 不能按模块安排循环,因为控制流太复杂。 |
DataDependence | 尝试执行 SIMD 向量化失败,因为已存在数据依赖性。 |
DataPrefetch | 已执行数据预取。 |
FullLoopUnroll | 已执行完整循环展开。 |
InnerLoopUnroll | 已执行内部循环展开。 |
InstructionThresholdExceeded | 不能按模块安排循环,因为指令的数目超过阈值。 |
IterationCountTooSmall | 尝试执行 SIMD 向量化失败,因为迭代计数太小。 |
LoopBlocked | 循环已分块。 |
LoopBlockGather | 已执行 Gather/Scatter。 |
LoopCarriedDependence | 循环未自动并行化,因为变量带有依赖性。 |
LoopCollapsed | 已折叠循环。 |
LoopDistribution | 子循环已由其父循环的分发版创建。 |
LoopFusion | 循环已熔凝。 |
LoopHasCycles | 循环具有周期。 |
LoopHasDependencies | 循环未展开和熔凝,因为它具有防止展开和熔凝的依赖性。 |
LoopHasNoDataDependence | 循环未展开和熔凝,因为未计算数据依赖性。 |
LoopHasPrivateVariables | 在循环嵌套中认可私有变量。 |
LoopHasSideEffects | 循环未展开和熔凝,因为它具有副作用。 |
LoopHasSideEffectsCall | 循环未自动并行化,因为它包含可能具有副作用的调用。 |
LoopHasSpills | 循环具有溢出行为。 |
LoopHasUserReduction | 循环未展开和熔凝,因为它包含用户归约。 |
LoopHasVolatileVariable | 循环未自动并行化,因为变量具有易失性。 |
LoopInterchange | 循环交换已应用于循环嵌套。 |
LoopNestGather | Gather/Scatter 已应用于循环嵌套。 |
LoopNotCountable | 循环未归一化,因为它无法计数。 |
LoopNotPerfectNest | 循环未展开和熔凝,因为它不是紧密嵌套。 |
LoopNotSimdize | 尝试执行 SIMD 向量化失败。 |
LoopParallelized | 循环已自动并行化。 |
LoopReversal | 循环保留已应用于循环嵌套。 |
LoopRolled | 已应用滚动循环。 |
LoopSimdize | 已执行 SIMD 向量化。 |
LoopUnroll | 已执行完整循环展开。 |
LoopVector | 已执行循环向量化。 |
LoopVectorVersion | 已执行向量版本控制。 |
ModuloSchedule | 已按模块安排循环。 |
NonInnermostLoop | 尝试执行 SIMD 向量化失败,因为循环不是最里层循环。 |
NonNormalizableLoop | 尝试优化循环失败,因为循环无法归一化。 |
NonStrideOneInShift | 尝试执行 SIMD 向量化失败,因为循环包含具有不受支持对齐功能的 non-stride-one 引用。 |
NonStrideOneStore | 尝试执行 SIMD 向量化失败,因为循环包含 non-stride-one 存储。 |
NonVectorizableAlignment | 尝试执行 SIMD 向量化失败,因为循环包含具有不可向量化对齐功能的变量。 |
NonVectorizableStride | 尝试执行 SIMD 向量化失败,因为循环包含不可向量化步幅。 |
NotProfitable | 尝试执行 SIMD 向量化失败,因为执行向量化没有益处。 |
NoValidSchedule | 不能按模块安排循环,因为找不到具有合理周期计数的有效日程安排。 |
OuterLoopUnroll | 已执行外层循环展开。 |
ProhibitedByOption | 尝试执行 SIMD 向量化失败,因为 SIMD 向量化已由选项禁用。 |
RegisterPressureTooHigh | 不能按模块安排循环,因为寄存器压力太大。 |
StrideOneRequireBF1 | 尝试执行 SIMD 向量化失败,因为循环包含无法抽取的 non-stride-one 引用块。 |
UnrollLimitExceeded | 循环未展开和熔凝,因为所请求的展开因子超出嵌套限制。 |
UnsupportedOperation | 尝试执行 SIMD 向量化失败,因为循环包含不受支持的操作。 |
UnsupportedStructure | 尝试执行 SIMD 向量化失败,因为循环包含不受支持的结构。 |
UnsupportedVectorTypes | 尝试执行 SIMD 向量化失败,因为循环包含不受支持的向量类型。 |
UPCArrayIdiom | 已变换以下细颗粒度共享访问权。 |
UPCArrayIdiomBlkFactorOne | 无法替换细颗粒度访问权。 |
UPCArrayIdiomDiffBlkFactors | 不支持数组代码模式。 |
UPCCoalesing | 已结合以下共享引用。 |
UPCForallIVUsedInMultipleDims | upc_forall 优化失败:亲缘关系表达式在多个数组维中引用了归纳变量。 |
UPCForallLoopVersioned | 已对 upc-forall 循环进行版本控制。 |
UPCForallNotInnerParallel | upc_forall 优化失败:亲缘关系表达式未在最里面的数组维中使用归纳变量。 |
UPCForallOpt | 已优化 upc_forall 循环。 |
UPCForallVersioningPtrNotInvariant | upc_forall 循环版本控制失败,因为指针不是循环不变量。 |
UPCPrivatizedRef1 | 已将以下共享引用专用化。 |
UPCPrivatizedRef2 | 已将共享引用专用化。 |
UPCRemoteUpdate | 为共享引用生成了远程更新调用。 |
UPCRemoteUpdateUnknownPattern | 无法识别共享引用的远程更新操作。 |
UserSpecifiedNoSIMD | 尝试执行 SIMD 向量化失败,因为 SIMD 向量化已由选项或编译指示禁用。 |
类型 | 描述 |
ArgumentIsVolatile | 函数未内联,因为用于调用的自变量具有易失性。 |
CalleeIsCompact | 函数未内联,因为被调用者正在针对大小进行优化。 |
CalleeIsNoopt | 函数未内联,因为在 noopt 时被调用者已编译。 |
CallerIsCompact | 函数未内联,因为调用者正在针对大小进行优化。 |
CallerIsNoopt | 函数未内联,因为在 noopt 时调用者已编译。 |
ExternalLabel | 函数未内联,因为它包含外部可视的标号。 |
FunctionTooBig | 函数未内联,因为它太大无法内联。 |
FunctionTryBlock | 函数未内联,因为调用者是函数 try 块,而被调用者是析构函数。 |
MiscellaneousLimitation | 函数未内联,因为存在局限性。 |
MismatchedArguments | 函数未内联,因为自变量的类型或数目与被调用者的参数数目不匹配。 |
NestedAddressTakenProcedure | 函数未内联,因为被调用者包含嵌套函数(该嵌套函数充当所用地址且对被调用者的自动部分进行访问)。 |
NonIPAObject | 函数未内联,因为被调用者未通过 IPA 编译。 |
OptionMismatch | 函数未内联,因为已使用与内联不兼容的选项对调用者和被调用者进行了编译。 |
ParameterOfVariablyModifiedType | 函数未内联,因为被调用者具有一个或多个作为可变长度数组的参数。 |
PDFLowFrequency | 函数未内联,因为 PDF 指示被调用者已调用的频率太低无法确保内联。 |
PrimaryFromSecondaryEntryPoint | 函数未内联,因为它是从具有辅助入口点的函数对主要入口点的调用。 |
ProhibitedByUser | 函数未内联,因为存在用户指定的编译指示或伪指令。 |
RecursiveCall | 函数未内联,因为它是递归函数。 |
SuccessfulInline | 函数已成功内联。 |
VirtualBaseDestructor | 函数未内联,因为它是对虚拟基本析构函数的调用。 |
WeakAndNotExplicitlyInline | 函数未内联,因为被调用者弱,未标记为内联。 |
类型 | 描述 |
ArrayCoalescing | 全局变量已聚集。 |
ArrayInterleaving | 小型数据类型的数组已分组为大型聚集数据类型。 |
ArraySplitting | 大型聚集数据类型的数组已分割为较小数据类型的多个数组。 |
ArrayTransposing | 多维数组已调换。 |
CommonBlockSplitting | Fortran 公共块或模块已划分为较小的数据段。 |
MemoryAllocationMerging | 多维动态数组已序列化为连续内存空间。 |
这是第一版。