summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-extract-value-from-type.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-02-20 12:24:00 -0800
committerGitHub <noreply@github.com>2024-02-20 12:24:00 -0800
commit4d20fd329956ac89408b1628a8291fea01bc9a6d (patch)
tree8e62d9c1ec05142fd25d0b31073fdb56d44691b0 /source/slang/slang-ir-extract-value-from-type.cpp
parent8e9b61e3bac69dbb37a1451b62302e688a017ced (diff)
Refactor compiler option representations. (#3598)
* Refactor compiler option representation. * Fix binary compatibility. * Add a test for specifying compiler options at link time. * Fix binary compatibility. * Fix binary compatibility. * Fix backward compatibility on matrix layout. * Fix. * Fix. * Fix. * Fix gfx. * Fix gfx. * Fix dynamic dispatch. * Polish.
Diffstat (limited to 'source/slang/slang-ir-extract-value-from-type.cpp')
-rw-r--r--source/slang/slang-ir-extract-value-from-type.cpp40
1 files changed, 20 insertions, 20 deletions
diff --git a/source/slang/slang-ir-extract-value-from-type.cpp b/source/slang/slang-ir-extract-value-from-type.cpp
index fa8c6e441..8db4bb7ef 100644
--- a/source/slang/slang-ir-extract-value-from-type.cpp
+++ b/source/slang/slang-ir-extract-value-from-type.cpp
@@ -16,7 +16,7 @@ struct FindLeafValueResult
};
FindLeafValueResult findLeafValueAtOffset(
- TargetRequest* targetReq,
+ TargetProgram* targetProgram,
IRBuilder& builder,
IRType* dataType,
IRSizeAndAlignment& layout,
@@ -42,8 +42,8 @@ FindLeafValueResult findLeafValueAtOffset(
{
IRIntegerValue fieldOffset = 0;
IRSizeAndAlignment fieldLayout;
- CHECK(getNaturalSizeAndAlignment(targetReq, field->getFieldType(), &fieldLayout));
- CHECK(getNaturalOffset(targetReq, field, &fieldOffset));
+ CHECK(getNaturalSizeAndAlignment(targetProgram->getOptionSet(), field->getFieldType(), &fieldLayout));
+ CHECK(getNaturalOffset(targetProgram->getOptionSet(), field, &fieldOffset));
if (fieldOffset + fieldLayout.size > offset)
{
if (fieldOffset > offset)
@@ -62,7 +62,7 @@ FindLeafValueResult findLeafValueAtOffset(
auto fieldValue =
builder.emitFieldExtract(field->getFieldType(), src, field->getKey());
return findLeafValueAtOffset(
- targetReq,
+ targetProgram,
builder,
field->getFieldType(),
fieldLayout,
@@ -81,7 +81,7 @@ FindLeafValueResult findLeafValueAtOffset(
auto arrayType = as<IRArrayType>(dataType);
auto elementType = arrayType->getElementType();
IRSizeAndAlignment elementLayout;
- CHECK(getNaturalSizeAndAlignment(targetReq, elementType, &elementLayout));
+ CHECK(getNaturalSizeAndAlignment(targetProgram->getOptionSet(), elementType, &elementLayout));
if (elementLayout.getStride() == 0)
{
result.leafValue = builder.getIntValue(builder.getUIntType(), 0);
@@ -93,7 +93,7 @@ FindLeafValueResult findLeafValueAtOffset(
auto elementValue = builder.emitElementExtract(
elementType, src, builder.getIntValue(builder.getUIntType(), index));
return findLeafValueAtOffset(
- targetReq,
+ targetProgram,
builder,
elementType,
elementLayout,
@@ -106,13 +106,13 @@ FindLeafValueResult findLeafValueAtOffset(
auto vectorType = as<IRVectorType>(dataType);
auto elementType = vectorType->getElementType();
IRSizeAndAlignment elementLayout;
- CHECK(getNaturalSizeAndAlignment(targetReq, elementType, &elementLayout));
+ CHECK(getNaturalSizeAndAlignment(targetProgram->getOptionSet(), elementType, &elementLayout));
uint32_t index =
elementLayout.getStride() == 0 ? 0 : (uint32_t)(offset / elementLayout.getStride());
auto elementValue = builder.emitElementExtract(
elementType, src, builder.getIntValue(builder.getUIntType(), index));
return findLeafValueAtOffset(
- targetReq,
+ targetProgram,
builder,
elementType,
elementLayout,
@@ -129,14 +129,14 @@ FindLeafValueResult findLeafValueAtOffset(
auto columnCount = as<IRIntLit>(matrixType->getColumnCount())->value.intVal;
auto rowType = builder.getVectorType(elementType, matrixType->getColumnCount());
IRSizeAndAlignment rowLayout;
- CHECK(getNaturalSizeAndAlignment(targetReq, rowType, &rowLayout));
+ CHECK(getNaturalSizeAndAlignment(targetProgram->getOptionSet(), rowType, &rowLayout));
uint32_t rowIndex = rowLayout.getStride() == 0
? 0
: (uint32_t)(offset / (columnCount * rowLayout.getStride()));
auto rowValue = builder.emitElementExtract(
rowType, src, builder.getIntValue(builder.getUIntType(), rowIndex));
return findLeafValueAtOffset(
- targetReq,
+ targetProgram,
builder,
rowType,
rowLayout,
@@ -157,13 +157,13 @@ FindLeafValueResult findLeafValueAtOffset(
IRInst* extractByteAtOffset(
IRBuilder& builder,
- TargetRequest* targetReq,
+ TargetProgram* targetProgram,
IRType* dataType,
IRSizeAndAlignment& layout,
IRInst* src,
uint32_t offset)
{
- auto leaf = findLeafValueAtOffset(targetReq, builder, dataType, layout, src, offset);
+ auto leaf = findLeafValueAtOffset(targetProgram, builder, dataType, layout, src, offset);
IRType* uintType = nullptr;
if (leaf.valueSize <= 4)
{
@@ -188,7 +188,7 @@ IRInst* extractByteAtOffset(
IRInst* extractMultiByteValueAtOffset(
IRBuilder& builder,
- TargetRequest* targetReq,
+ TargetProgram* targetProgram,
IRType* dataType,
IRSizeAndAlignment& layout,
IRInst* src,
@@ -196,9 +196,9 @@ IRInst* extractMultiByteValueAtOffset(
uint32_t offset)
{
if (size == 1)
- return extractByteAtOffset(builder, targetReq, dataType, layout, src, offset);
+ return extractByteAtOffset(builder, targetProgram, dataType, layout, src, offset);
- auto leaf = findLeafValueAtOffset(targetReq, builder, dataType, layout, src, offset);
+ auto leaf = findLeafValueAtOffset(targetProgram, builder, dataType, layout, src, offset);
auto resultValue = leaf.leafValue;
IRType* uintType = nullptr;
if (leaf.valueSize <= 4)
@@ -246,9 +246,9 @@ IRInst* extractMultiByteValueAtOffset(
// The requested value crosses the boundaries of different fields.
// We need to extract first and second half separately, and combine them together.
auto firstHalf = extractMultiByteValueAtOffset(
- builder, targetReq, dataType, layout, src, size / 2, offset);
+ builder, targetProgram, dataType, layout, src, size / 2, offset);
auto secondHalf = extractMultiByteValueAtOffset(
- builder, targetReq, dataType, layout, src, size / 2, offset + size / 2);
+ builder, targetProgram, dataType, layout, src, size / 2, offset + size / 2);
uint32_t shift = (size / 2) * 8;
resultValue = builder.emitAdd(
builder.getUIntType(),
@@ -262,17 +262,17 @@ IRInst* extractMultiByteValueAtOffset(
}
IRInst* extractValueAtOffset(
- IRBuilder& builder, TargetRequest* targetReq, IRInst* src, uint32_t offset, uint32_t size)
+ IRBuilder& builder, TargetProgram* targetProgram, IRInst* src, uint32_t offset, uint32_t size)
{
auto dataType = src->getDataType();
IRSizeAndAlignment typeLayout;
- SLANG_RETURN_NULL_ON_FAIL(getNaturalSizeAndAlignment(targetReq, dataType, &typeLayout));
+ SLANG_RETURN_NULL_ON_FAIL(getNaturalSizeAndAlignment(targetProgram->getOptionSet(), dataType, &typeLayout));
if (offset + size > typeLayout.size)
{
return builder.getIntValue(builder.getIntType(), 0);
}
return extractMultiByteValueAtOffset(
- builder, targetReq, dataType, typeLayout, src, size, offset);
+ builder, targetProgram, dataType, typeLayout, src, size, offset);
}
} // namespace Slang