Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions src/coreclr/jit/compiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -2518,8 +2518,6 @@ class Compiler
GenTree* gtNewBitCastNode(var_types type, GenTree* arg);

public:
GenTree* gtNewStructVal(ClassLayout* layout, GenTree* addr, GenTreeFlags indirFlags = GTF_EMPTY);

GenTreeCall* gtNewCallNode(gtCallTypes callType,
CORINFO_METHOD_HANDLE handle,
var_types type,
Expand Down Expand Up @@ -2835,6 +2833,19 @@ class Compiler

GenTreeIndir* gtNewIndir(var_types typ, GenTree* addr, GenTreeFlags indirFlags = GTF_EMPTY);

GenTree* gtNewLoadValueNode(
var_types type, ClassLayout* layout, GenTree* addr, GenTreeFlags indirFlags = GTF_EMPTY);

GenTree* gtNewLoadValueNode(ClassLayout* layout, GenTree* addr, GenTreeFlags indirFlags = GTF_EMPTY)
{
return gtNewLoadValueNode(layout->GetType(), layout, addr, indirFlags);
}

GenTree* gtNewLoadValueNode(var_types type, GenTree* addr, GenTreeFlags indirFlags = GTF_EMPTY)
{
return gtNewLoadValueNode(type, nullptr, addr, indirFlags);
}

GenTree* gtNewNullCheck(GenTree* addr, BasicBlock* basicBlock);

var_types gtTypeForNullCheck(GenTree* tree);
Expand All @@ -2853,7 +2864,6 @@ class Compiler
CORINFO_ACCESS_FLAGS access,
CORINFO_FIELD_INFO* pFieldInfo,
var_types lclTyp,
CORINFO_CLASS_HANDLE structType,
GenTree* assg);

GenTree* gtNewNothingNode();
Expand Down Expand Up @@ -10114,6 +10124,9 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Get the number of a layout for the specified class handle.
unsigned typGetObjLayoutNum(CORINFO_CLASS_HANDLE classHandle);

var_types TypeHandleToVarType(CORINFO_CLASS_HANDLE handle, ClassLayout** pLayout = nullptr);
var_types TypeHandleToVarType(CorInfoType jitType, CORINFO_CLASS_HANDLE handle, ClassLayout** pLayout = nullptr);

//-------------------------- Global Compiler Data ------------------------------------

#ifdef DEBUG
Expand Down
56 changes: 1 addition & 55 deletions src/coreclr/jit/compiler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -981,7 +981,7 @@ inline GenTreeIndexAddr* Compiler::gtNewArrayIndexAddr(GenTree* arra
inline GenTreeIndir* Compiler::gtNewIndexIndir(GenTreeIndexAddr* indexAddr)
{
GenTreeIndir* index;
if (varTypeIsStruct(indexAddr->gtElemType))
if (indexAddr->gtElemType == TYP_STRUCT)
{
index = gtNewBlkIndir(typGetObjLayout(indexAddr->gtStructElemClass), indexAddr);
}
Expand Down Expand Up @@ -1084,60 +1084,6 @@ inline GenTreeMDArr* Compiler::gtNewMDArrLowerBound(GenTree* arrayOp, unsigned d
return arrOp;
}

//------------------------------------------------------------------------
// gtNewBlkIndir: Create a struct indirection node.
//
// Arguments:
// layout - The struct layout
// addr - Address of the indirection
// indirFlags - Indirection flags
//
// Return Value:
// The created GT_BLK node.
//
inline GenTreeBlk* Compiler::gtNewBlkIndir(ClassLayout* layout, GenTree* addr, GenTreeFlags indirFlags)
{
assert((indirFlags & ~GTF_IND_FLAGS) == GTF_EMPTY);

GenTreeBlk* blkNode = new (this, GT_BLK) GenTreeBlk(GT_BLK, layout->GetType(), addr, layout);
blkNode->gtFlags |= indirFlags;
blkNode->SetIndirExceptionFlags(this);

if ((indirFlags & GTF_IND_INVARIANT) == 0)
{
blkNode->gtFlags |= GTF_GLOB_REF;
}

if ((indirFlags & GTF_IND_VOLATILE) != 0)
{
blkNode->gtFlags |= GTF_ORDER_SIDEEFF;
}

return blkNode;
}

//------------------------------------------------------------------------------
// gtNewIndir : Create an indirection node.
//
// Arguments:
// typ - Type of the node
// addr - Address of the indirection
// indirFlags - Indirection flags
//
// Return Value:
// The created GT_IND node.
//
inline GenTreeIndir* Compiler::gtNewIndir(var_types typ, GenTree* addr, GenTreeFlags indirFlags)
{
assert((indirFlags & ~GTF_IND_FLAGS) == GTF_EMPTY);

GenTree* indir = gtNewOperNode(GT_IND, typ, addr);
indir->gtFlags |= indirFlags;
indir->SetIndirExceptionFlags(this);

return indir->AsIndir();
}

//------------------------------------------------------------------------------
// gtNewNullCheck : Helper to create a null check node.
//
Expand Down
26 changes: 26 additions & 0 deletions src/coreclr/jit/ee_il_dll.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,32 @@ inline var_types JitType2PreciseVarType(CorInfoType type)
return ((var_types)preciseVarTypeMap[type]);
};

inline var_types Compiler::TypeHandleToVarType(CORINFO_CLASS_HANDLE handle, ClassLayout** pLayout)
{
CorInfoType jitType = info.compCompHnd->asCorInfoType(handle);
var_types type = TypeHandleToVarType(jitType, handle, pLayout);

return type;
}

inline var_types Compiler::TypeHandleToVarType(CorInfoType jitType, CORINFO_CLASS_HANDLE handle, ClassLayout** pLayout)
{
ClassLayout* layout = nullptr;
var_types type = JITtype2varType(jitType);
if (type == TYP_STRUCT)
{
layout = typGetObjLayout(handle);
type = layout->GetType();
}

if (pLayout != nullptr)
{
*pLayout = layout;
}

return type;
}

inline CORINFO_CALLINFO_FLAGS combine(CORINFO_CALLINFO_FLAGS flag1, CORINFO_CALLINFO_FLAGS flag2)
{
return (CORINFO_CALLINFO_FLAGS)(flag1 | flag2);
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/jit/flowgraph.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -800,7 +800,7 @@ GenTreeCall* Compiler::fgGetStaticsCCtorHelper(CORINFO_CLASS_HANDLE cls, CorInfo
}
else if (helper == CORINFO_HELP_GETSHARED_NONGCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED)
{
result = gtNewHelperCallNode(helper, type, gtNewIconNode(typeIndex, TYP_UINT));
result = gtNewHelperCallNode(helper, type, gtNewIconNode(typeIndex));
result->SetExpTLSFieldAccess();
}
else
Expand Down
Loading