diff options
Diffstat (limited to 'source/slang/lower-to-ir.cpp')
| -rw-r--r-- | source/slang/lower-to-ir.cpp | 74 |
1 files changed, 36 insertions, 38 deletions
diff --git a/source/slang/lower-to-ir.cpp b/source/slang/lower-to-ir.cpp index 81fab7108..4595a0319 100644 --- a/source/slang/lower-to-ir.cpp +++ b/source/slang/lower-to-ir.cpp @@ -401,7 +401,7 @@ IRValue* getOneValOfType( // TODO: should make sure to handle vector and matrix types here SLANG_UNEXPECTED("inc/dec type"); - return nullptr; + UNREACHABLE_RETURN(nullptr); } LoweredValInfo emitPreOp( @@ -665,19 +665,20 @@ top: { auto boundSubscriptInfo = lowered.getBoundSubscriptInfo(); - for (auto getter : getMembersOfType<GetterDecl>(boundSubscriptInfo->declRef)) + auto getters = getMembersOfType<GetterDecl>(boundSubscriptInfo->declRef); + if (getters.Count()) { lowered = emitCallToDeclRef( context, boundSubscriptInfo->type, - getter, + *getters.begin(), nullptr, boundSubscriptInfo->args); goto top; } SLANG_UNEXPECTED("subscript had no getter"); - return nullptr; + UNREACHABLE_RETURN(nullptr); } break; @@ -694,7 +695,7 @@ top: default: SLANG_UNEXPECTED("unhandled value flavor"); - return nullptr; + UNREACHABLE_RETURN(nullptr); } } @@ -733,7 +734,7 @@ RefPtr<Type> getSimpleType(LoweredTypeInfo lowered) default: SLANG_UNEXPECTED("unhandled value flavor"); - return nullptr; + UNREACHABLE_RETURN(nullptr); } } @@ -836,7 +837,7 @@ struct ValLoweringVisitor : ValVisitor<ValLoweringVisitor, LoweredValInfo, Lower IRBuilder* getBuilder() { return context->irBuilder; } - LoweredValInfo visitVal(Val* val) + LoweredValInfo visitVal(Val* /*val*/) { SLANG_UNIMPLEMENTED_X("value lowering"); } @@ -1011,7 +1012,7 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> return info; } - LoweredValInfo visitOverloadedExpr(OverloadedExpr* expr) + LoweredValInfo visitOverloadedExpr(OverloadedExpr* /*expr*/) { SLANG_UNEXPECTED("overloaded expressions should not occur in checked AST"); } @@ -1025,7 +1026,7 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> return subscriptValue(type, baseVal, indexVal); } - LoweredValInfo visitThisExpr(ThisExpr* expr) + LoweredValInfo visitThisExpr(ThisExpr* /*expr*/) { return context->thisVal; } @@ -1096,7 +1097,7 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> else { SLANG_UNIMPLEMENTED_X("codegen for deref expression"); - return LoweredValInfo(); + UNREACHABLE_RETURN(LoweredValInfo()); } } @@ -1105,7 +1106,7 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> return lowerSubExpr(expr->base); } - LoweredValInfo visitInitializerListExpr(InitializerListExpr* expr) + LoweredValInfo visitInitializerListExpr(InitializerListExpr* /*expr*/) { SLANG_UNIMPLEMENTED_X("codegen for initializer list expression"); } @@ -1129,7 +1130,7 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> SLANG_UNEXPECTED("unexpected constant type"); } - LoweredValInfo visitAggTypeCtorExpr(AggTypeCtorExpr* expr) + LoweredValInfo visitAggTypeCtorExpr(AggTypeCtorExpr* /*expr*/) { SLANG_UNIMPLEMENTED_X("codegen for aggregate type constructor expression"); } @@ -1140,8 +1141,6 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> InvokeExpr* expr, List<IRValue*>* ioArgs) { - auto& irArgs = *ioArgs; - for( auto arg : expr->Arguments ) { // TODO: Need to handle case of l-value arguments, @@ -1170,8 +1169,6 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> List<IRValue*>* ioArgs, List<OutArgumentFixup>* ioFixups) { - auto funcDecl = funcDeclRef.getDecl(); - auto& args = expr->Arguments; UInt argCount = expr->Arguments.Count(); UInt argIndex = 0; for (auto paramDeclRef : getMembersOfType<ParamDecl>(funcDeclRef)) @@ -1265,7 +1262,7 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> else { SLANG_UNEXPECTED("shouldn't relaly happen"); - addDirectCallArgs(expr, ioArgs); + UNREACHABLE(addDirectCallArgs(expr, ioArgs)); } } @@ -1461,7 +1458,7 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> default: SLANG_UNIMPLEMENTED_X("subscript expr"); - return LoweredValInfo(); + UNREACHABLE_RETURN(LoweredValInfo()); } } @@ -1505,17 +1502,17 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> return emitDeclRef(context, expr->declRef); } - LoweredValInfo visitSelectExpr(SelectExpr* expr) + LoweredValInfo visitSelectExpr(SelectExpr* /*expr*/) { SLANG_UNIMPLEMENTED_X("codegen for select expression"); } - LoweredValInfo visitGenericAppExpr(GenericAppExpr* expr) + LoweredValInfo visitGenericAppExpr(GenericAppExpr* /*expr*/) { SLANG_UNIMPLEMENTED_X("generic application expression during code generation"); } - LoweredValInfo visitSharedTypeExpr(SharedTypeExpr* expr) + LoweredValInfo visitSharedTypeExpr(SharedTypeExpr* /*expr*/) { SLANG_UNIMPLEMENTED_X("shared type expression during code generation"); } @@ -1621,7 +1618,7 @@ struct StmtLoweringVisitor : StmtVisitor<StmtLoweringVisitor> IRBuilder* getBuilder() { return context->irBuilder; } - void visitStmt(Stmt* stmt) + void visitStmt(Stmt* /*stmt*/) { SLANG_UNIMPLEMENTED_X("stmt catch-all"); } @@ -1640,7 +1637,7 @@ struct StmtLoweringVisitor : StmtVisitor<StmtLoweringVisitor> { auto builder = getBuilder(); - auto prevBlock = builder->block; + auto prevBlock = builder->curBlock; auto parentFunc = prevBlock->parentFunc; // If the previous block doesn't already have @@ -1653,8 +1650,8 @@ struct StmtLoweringVisitor : StmtVisitor<StmtLoweringVisitor> parentFunc->addBlock(block); - builder->func = parentFunc; - builder->block = block; + builder->curFunc = parentFunc; + builder->curBlock = block; } // Start a new block at the current location. @@ -2024,7 +2021,8 @@ top: auto type = subscriptInfo->type; // Search for an appropriate "setter" declaration - for (auto setterDeclRef : getMembersOfType<SetterDecl>(subscriptInfo->declRef)) + auto setters = getMembersOfType<SetterDecl>(subscriptInfo->declRef); + if (setters.Count()) { auto allArgs = subscriptInfo->args; @@ -2033,7 +2031,7 @@ top: emitCallToDeclRef( context, context->getSession()->getVoidType(), - setterDeclRef, + *setters.begin(), nullptr, allArgs); return; @@ -2060,12 +2058,12 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> return context->irBuilder; } - LoweredValInfo visitDeclBase(DeclBase* decl) + LoweredValInfo visitDeclBase(DeclBase* /*decl*/) { SLANG_UNIMPLEMENTED_X("decl catch-all"); } - LoweredValInfo visitDecl(Decl* decl) + LoweredValInfo visitDecl(Decl* /*decl*/) { SLANG_UNIMPLEMENTED_X("decl catch-all"); } @@ -2075,7 +2073,7 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> return LoweredValInfo::simple(context->irBuilder->getTypeVal(decl->type.type)); } - LoweredValInfo visitGenericTypeParamDecl(GenericTypeParamDecl* decl) + LoweredValInfo visitGenericTypeParamDecl(GenericTypeParamDecl* /*decl*/) { return LoweredValInfo(); } @@ -2126,7 +2124,7 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> auto irRequirement = context->irBuilder->getDeclRefVal(requiredMemberDeclRef); auto irSatisfyingVal = getSimpleVal(context, ensureDecl(context, satisfyingMemberDecl)); - auto witnessTableEntry = context->irBuilder->createWitnessTableEntry( + context->irBuilder->createWitnessTableEntry( witnessTable, irRequirement, irSatisfyingVal); @@ -2689,7 +2687,7 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> // need to create an IR function here IRFunc* irFunc = subBuilder->createFunc(); - subBuilder->func = irFunc; + subBuilder->curFunc = irFunc; trySetMangledName(irFunc, decl); @@ -2741,7 +2739,7 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> // IRType* irParamType = irResultType; paramTypes.Add(irParamType); - IRParam* irParam = subBuilder->emitParam(irParamType); + subBuilder->emitParam(irParamType); // TODO: we need some way to wire this up to the `newValue` // or whatever name we give for that parameter inside @@ -2777,7 +2775,7 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> // This is a function definition, so we need to actually // construct IR for the body... IRBlock* entryBlock = subBuilder->emitBlock(); - subBuilder->block = entryBlock; + subBuilder->curBlock = entryBlock; UInt paramTypeIndex = 0; for( auto paramInfo : parameterLists.params ) @@ -2858,7 +2856,7 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> // We need to carefully add a terminator instruction to the end // of the body, in case the user didn't do so. - if (!isTerminatorInst(subContext->irBuilder->block->lastInst)) + if (!isTerminatorInst(subContext->irBuilder->curBlock->lastInst)) { if (irResultType->Equals(context->getSession()->getVoidType())) { @@ -2874,7 +2872,7 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> // and then emit a dataflow error if this block // can't be eliminated. SLANG_UNEXPECTED("Needed a return here"); - subContext->irBuilder->emitReturn(); + UNREACHABLE(subContext->irBuilder->emitReturn()); } } } @@ -2961,7 +2959,7 @@ LoweredValInfo ensureDecl( return result; IRBuilder subIRBuilder; - subIRBuilder.shared = context->irBuilder->shared; + subIRBuilder.sharedBuilder = context->irBuilder->sharedBuilder; IRGenContext subContext = *context; @@ -3191,7 +3189,7 @@ IRModule* generateIRForTranslationUnit( IRBuilder builderStorage; IRBuilder* builder = &builderStorage; - builder->shared = sharedBuilder; + builder->sharedBuilder = sharedBuilder; IRModule* module = builder->createModule(); sharedBuilder->module = module; |
