summaryrefslogtreecommitdiff
path: root/source/slang/lower-to-ir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/lower-to-ir.cpp')
-rw-r--r--source/slang/lower-to-ir.cpp74
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;