diff options
| author | Tim Foley <tfoley@nvidia.com> | 2017-09-11 15:25:31 -0700 |
|---|---|---|
| committer | Tim Foley <tfoley@nvidia.com> | 2017-09-11 15:27:08 -0700 |
| commit | 4644b64d648893718336d83fae0139ee19405e61 (patch) | |
| tree | f7c623dc814b823a535d38b68029f529af36780f /source/slang/lower-to-ir.cpp | |
| parent | e2de1eaec725e979f98ad6f518b93b4d9ce55a36 (diff) | |
Get another test working with IR codedgen
- Add support for matrix types in IR/codegen
- Add support for basic indexing operations in IR/codegen
Diffstat (limited to 'source/slang/lower-to-ir.cpp')
| -rw-r--r-- | source/slang/lower-to-ir.cpp | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/source/slang/lower-to-ir.cpp b/source/slang/lower-to-ir.cpp index 4bdfa4438..10b4aefca 100644 --- a/source/slang/lower-to-ir.cpp +++ b/source/slang/lower-to-ir.cpp @@ -519,6 +519,15 @@ struct ValLoweringVisitor : ValVisitor<ValLoweringVisitor, LoweredValInfo, Lower return getBuilder()->getVectorType(irElementType, irElementCount); } + + LoweredTypeInfo visitMatrixExpressionType(MatrixExpressionType* type) + { + auto irElementType = lowerSimpleType(context, type->getElementType()); + auto irRowCount = lowerSimpleVal(context, type->getRowCount()); + auto irColumnCount = lowerSimpleVal(context, type->getColumnCount()); + + return getBuilder()->getMatrixType(irElementType, irRowCount, irColumnCount); + } }; LoweredValInfo lowerVal( @@ -738,9 +747,42 @@ struct ExprLoweringVisitor : ExprVisitor<ExprLoweringVisitor, LoweredValInfo> return emitCallToVal(context, type, funcVal, irArgs.Count(), irArgs.Buffer()); } + LoweredValInfo subscriptValue( + LoweredTypeInfo type, + LoweredValInfo baseVal, + IRValue* indexVal) + { + auto builder = getBuilder(); + switch (baseVal.flavor) + { + case LoweredValInfo::Flavor::Simple: + return LoweredValInfo::simple( + builder->emitElementExtract( + getSimpleType(type), + getSimpleVal(context, baseVal), + indexVal)); + + case LoweredValInfo::Flavor::Ptr: + return LoweredValInfo::ptr( + builder->emitElementAddress( + builder->getPtrType(getSimpleType(type)), + baseVal.val, + indexVal)); + + default: + SLANG_UNIMPLEMENTED_X("subscript expr"); + return LoweredValInfo(); + } + + } + LoweredValInfo visitIndexExpr(IndexExpr* expr) { - SLANG_UNIMPLEMENTED_X("codegen for subscript expression"); + auto type = lowerType(context, expr->type); + auto baseVal = lowerExpr(context, expr->BaseExpression); + auto indexVal = getSimpleVal(context, lowerExpr(context, expr->IndexExpression)); + + return subscriptValue(type, baseVal, indexVal); } LoweredValInfo extractField( |
