From 4644b64d648893718336d83fae0139ee19405e61 Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Mon, 11 Sep 2017 15:25:31 -0700 Subject: Get another test working with IR codedgen - Add support for matrix types in IR/codegen - Add support for basic indexing operations in IR/codegen --- source/slang/lower-to-ir.cpp | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'source/slang/lower-to-ir.cpp') 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 : ValVisitorgetVectorType(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 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( -- cgit v1.2.3