Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
runtime
提交
ba0778a2
R
runtime
项目概览
dotNET Platform
/
runtime
11 个月 前同步成功
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
runtime
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
ba0778a2
编写于
9月 23, 2022
作者:
J
Jakob Botsch Nielsen
提交者:
GitHub
9月 23, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
JIT: Update gtHasLocalsWithAddrOp to use GenTreeVisitor (#75672)
Also change it to check for any local, not just GT_LCL_VAR.
上级
24a9b2f3
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
35 addition
and
36 deletion
+35
-36
src/coreclr/jit/compiler.h
src/coreclr/jit/compiler.h
+0
-2
src/coreclr/jit/gentree.cpp
src/coreclr/jit/gentree.cpp
+35
-34
未找到文件。
src/coreclr/jit/compiler.h
浏览文件 @
ba0778a2
...
...
@@ -5900,8 +5900,6 @@ private:
// the variable is not enregistered, and is therefore not promoted independently.
void
fgLclFldAssign
(
unsigned
lclNum
);
static
fgWalkPreFn
gtHasLocalsWithAddrOpCB
;
enum
TypeProducerKind
{
TPK_Unknown
=
0
,
// May not be a RuntimeType
...
...
src/coreclr/jit/gentree.cpp
浏览文件 @
ba0778a2
...
...
@@ -2724,48 +2724,49 @@ AGAIN:
return result;
}
struct AddrTakenDsc
{
Compiler* comp;
bool hasAddrTakenLcl;
};
/* static */
Compiler::fgWalkResult Compiler::gtHasLocalsWithAddrOpCB(GenTree** pTree, fgWalkData* data)
//------------------------------------------------------------------------------
// gtHasLocalsWithAddrOp:
// Check if this tree contains locals with lvHasLdAddrOp or
// IsAddressExposed() flags set. Does a full tree walk.
//
// Paramters:
// tree - the tree
//
// Return Value:
// True if any sub tree is such a local.
//
bool Compiler::gtHasLocalsWithAddrOp(GenTree* tree)
{
GenTree* tree = *pTree;
Compiler* comp = data->compiler;
if (tree->gtOper == GT_LCL_VAR)
struct LocalsWithAddrOpVisitor : GenTreeVisitor<LocalsWithAddrOpVisitor>
{
const LclVarDsc* varDsc = comp->lvaGetDesc(tree->AsLclVarCommon());
if (varDsc->lvHasLdAddrOp || varDsc->IsAddressExposed())
enum
{
((AddrTakenDsc*)data->pCallbackData)->hasAddrTakenLcl = true;
return WALK_ABORT;
}
}
return WALK_CONTINUE;
}
DoPreOrder = true,
DoLclVarsOnly = true,
};
/*****************************************************************************
*
* Return true if this tree contains locals with lvHasLdAddrOp or IsAddressExposed()
* flag(s) set.
*/
bool HasAddrTakenLocal = false;
bool Compiler::gtHasLocalsWithAddrOp(GenTree* tree
)
{
AddrTakenDsc desc;
LocalsWithAddrOpVisitor(Compiler* comp) : GenTreeVisitor(comp
)
{
}
desc.comp = this;
desc.hasAddrTakenLcl = false;
fgWalkResult PreOrderVisit(GenTree** use, GenTree* user)
{
LclVarDsc* varDsc = m_compiler->lvaGetDesc((*use)->AsLclVarCommon());
if (varDsc->lvHasLdAddrOp || varDsc->IsAddressExposed())
{
HasAddrTakenLocal = true;
return WALK_ABORT;
}
fgWalkTreePre(&tree, gtHasLocalsWithAddrOpCB, &desc);
return WALK_CONTINUE;
}
};
return desc.hasAddrTakenLcl;
LocalsWithAddrOpVisitor visitor(this);
visitor.WalkTree(&tree, nullptr);
return visitor.HasAddrTakenLocal;
}
#ifdef DEBUG
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录