diff options
| author | Yong He <yonghe@outlook.com> | 2024-02-20 12:24:00 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-20 12:24:00 -0800 |
| commit | 4d20fd329956ac89408b1628a8291fea01bc9a6d (patch) | |
| tree | 8e62d9c1ec05142fd25d0b31073fdb56d44691b0 /source/slang/slang-ir-extract-value-from-type.cpp | |
| parent | 8e9b61e3bac69dbb37a1451b62302e688a017ced (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.cpp | 40 |
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 |
