Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
runtime
提交
795a0f78
R
runtime
项目概览
dotNET Platform
/
runtime
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
未验证
提交
795a0f78
编写于
6月 17, 2022
作者:
S
SingleAccretion
提交者:
GitHub
6月 17, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Catch (more) mismatched args in `fgMorphArgs` (#70846)
* Catch (more) mismatched args in "fgMorphArgs" * Add a test
上级
36f2dc25
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
52 addition
and
1 deletion
+52
-1
src/coreclr/jit/morph.cpp
src/coreclr/jit/morph.cpp
+16
-1
src/tests/JIT/Directed/StructABI/TypeMismatchedArgs.cs
src/tests/JIT/Directed/StructABI/TypeMismatchedArgs.cs
+36
-0
未找到文件。
src/coreclr/jit/morph.cpp
浏览文件 @
795a0f78
...
...
@@ -3399,13 +3399,28 @@ GenTreeCall* Compiler::fgMorphArgs(GenTreeCall* call)
makeOutArgCopy = true;
}
}
else if (genTypeSize(varDsc
->TypeGet()
) != genTypeSize(structBaseType))
else if (genTypeSize(varDsc) != genTypeSize(structBaseType))
{
// Not a promoted struct, so just swizzle the type by using GT_LCL_FLD
lvaSetVarDoNotEnregister(lclNum DEBUGARG(DoNotEnregisterReason::SwizzleArg));
argObj->ChangeOper(GT_LCL_FLD);
argObj->gtType = structBaseType;
}
else if (varTypeUsesFloatReg(varDsc) != varTypeUsesFloatReg(structBaseType))
{
// Here we can see int <-> float, long <-> double, long <-> simd8 mismatches, due
// to the "OBJ(ADDR(LCL))" => "LCL" folding above. The latter case is handled in
// lowering, others we will handle here via swizzling.
CLANG_FORMAT_COMMENT_ANCHOR;
#ifdef TARGET_AMD64
if (varDsc->TypeGet() != TYP_SIMD8)
#endif // TARGET_AMD64
{
lvaSetVarDoNotEnregister(lclNum DEBUGARG(DoNotEnregisterReason::SwizzleArg));
argObj->ChangeOper(GT_LCL_FLD);
argObj->gtType = structBaseType;
}
}
}
else if (argObj->OperIs(GT_LCL_FLD, GT_IND))
{
...
...
src/tests/JIT/Directed/StructABI/TypeMismatchedArgs.cs
浏览文件 @
795a0f78
...
...
@@ -41,6 +41,11 @@ public static int Main()
return
105
;
}
if
(
ProblemWithRegFileMismatch_Win_x64
(
12
,
13
))
{
return
106
;
}
return
100
;
}
...
...
@@ -86,6 +91,21 @@ private static bool ProblemWithVectorCallArg()
return
result
!=
s_vtor128
.
Vtor4
.
X
;
}
[
MethodImpl
(
MethodImplOptions
.
NoInlining
)]
private
static
bool
ProblemWithRegFileMismatch_Win_x64
(
double
dbl
,
float
flt
)
{
if
(
CallForDblStruct
(*(
DblStruct
*)&
dbl
)
!=
dbl
)
{
return
true
;
}
if
(
CallForFltStruct
(*(
FltStruct
*)&
flt
)
!=
flt
)
{
return
true
;
}
return
false
;
}
[
MethodImpl
(
MethodImplOptions
.
NoInlining
)]
private
static
float
CallForVector4
(
Vector4
value
)
=>
value
.
X
;
...
...
@@ -97,6 +117,12 @@ private static bool ProblemWithVectorCallArg()
[
MethodImpl
(
MethodImplOptions
.
NoInlining
)]
private
static
long
CallForSplitStructWithFourLongs
(
int
arg0
,
int
arg1
,
StructWithFourLongs
splitArg
)
=>
splitArg
.
LongOne
;
[
MethodImpl
(
MethodImplOptions
.
NoInlining
)]
private
static
double
CallForDblStruct
(
DblStruct
value
)
=>
value
.
Dbl
;
[
MethodImpl
(
MethodImplOptions
.
NoInlining
)]
private
static
float
CallForFltStruct
(
FltStruct
value
)
=>
value
.
Flt
;
}
[
StructLayout
(
LayoutKind
.
Explicit
)]
...
...
@@ -170,3 +196,13 @@ struct FourDoublesHfaStruct
public
double
ThirdDblValue
;
public
double
FourthDblValue
;
}
struct
DblStruct
{
public
double
Dbl
;
}
struct
FltStruct
{
public
float
Flt
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录