@Override public VariableDeclInfo clone() { return new VariableDeclInfo(name, arrayInfo == null ? null : arrayInfo.clone(), initializer == null ? null : initializer.clone()); }
private String functionName() { return fd.getPrototype().getName(); }
private void addSpecialDeclarations() { if (fd.getPrototype().getReturnType().getWithoutQualifiers() != VoidType.VOID) { fd.getBody().insertStmt(0, new DeclarationStmt( new VariablesDeclaration(fd.getPrototype().getReturnType().getWithoutQualifiers(), new VariableDeclInfo(makeReturnValueName(), null, null)))); fd.getBody().addStmt(new ReturnStmt(makeReturnValue())); } fd.getBody().insertStmt(0, new DeclarationStmt( new VariablesDeclaration(BasicType.BOOL, new VariableDeclInfo(makeHasReturnedName(), null, new ScalarInitializer(BoolConstantExpr.FALSE))))); }
@Override public void visitParameterDecl(ParameterDecl parameterDecl) { visit(parameterDecl.getType()); if (parameterDecl.getName() != null) { out.append(" " + parameterDecl.getName()); } if (parameterDecl.getArrayInfo() != null) { out.append("[" + parameterDecl.getArrayInfo().getSize() + "]"); } }
public StructificationOpportunity(DeclarationStmt declToTransform, BlockStmt block, TranslationUnit tu, ShadingLanguageVersion shadingLanguageVersion) { assert declToTransform.getVariablesDeclaration().getNumDecls() == 1 : "Only solo declarations can be structified"; assert !declToTransform.getVariablesDeclaration().getDeclInfo(0).hasArrayInfo() : "Structification of arrays not supported"; this.declToTransform = declToTransform; this.block = block; this.tu = tu; this.shadingLanguageVersion = shadingLanguageVersion; }
private Optional<Integer> maybeGetArrayCount(VariableDeclInfo vdi) { if (vdi.hasArrayInfo()) { return Optional.of(vdi.getArrayInfo().getSize()); } return Optional.empty(); }
private boolean hasOutQualifier(FunctionDefinition functionDefinition) { return functionDefinition.getPrototype().getParameters().stream() .map(item -> item.getType()) .anyMatch(item -> item.hasQualifier(TypeQualifier.OUT_PARAM) || item.hasQualifier(TypeQualifier.INOUT_PARAM)); }
private boolean hasArrayParameter(FunctionDefinition functionDefinition) { return functionDefinition.getPrototype().getParameters().stream() .anyMatch(item -> item.getArrayInfo() != null); }
@Override public void visitFunctionPrototype(FunctionPrototype functionPrototype) { super.visitFunctionPrototype(functionPrototype); if (functionPrototype.getName().equals(functionDefinition.getPrototype().getName())) { // As we only apply this reduction opportunity if the function name is not overloaded, // this has to be a prototype for the relevant function (there could be multiple identical // prototypes). functionPrototype.removeParameter(paramIndex); } }
private VariablesDeclaration fuzzGlobal() { // TODO: extend to allow generation of multiple globals per declaration group // TODO: extend to fuzz initializers and array globals return new VariablesDeclaration(fuzzType(), new VariableDeclInfo("g" + freshId(), null, null)); }
@Override public boolean preconditionHolds() { return functionDefinition.getPrototype().getParameters().contains(parameterDecl); } }
public String getVectorName() { return vectorVariableDeclInfo.getName(); }
@Override public ParameterDecl clone() { return new ParameterDecl(name, type.clone(), arrayInfo == null ? null : arrayInfo.clone()); }
public boolean hasInitializer() { return getInitializer() != null; }
@Override public FunctionDefinition clone() { return new FunctionDefinition(prototype.clone(), body.clone()); }
@Override public DefaultLayout clone() { return new DefaultLayout(layoutQualifier, typeQualifier); }
@Override public ArrayInitializer clone() { return new ArrayInitializer(); }
@Override public PrecisionDeclaration clone() { return new PrecisionDeclaration(text); }
@Override public void visitFunctionDefinition(FunctionDefinition functionDefinition) { assert enclosingFunctionName == null; enclosingFunctionName = functionDefinition.getPrototype().getName(); super.visitFunctionDefinition(functionDefinition); assert enclosingFunctionName == functionDefinition.getPrototype().getName(); enclosingFunctionName = null; }