/// <summary cref="IValueVisitor.Visit(ReturnTerminator)"/>
 public void Visit(ReturnTerminator returnTerminator)
 {
     if (!returnTerminator.IsVoidReturn)
     {
         var resultRegister = Load(returnTerminator.ReturnValue);
         EmitStoreParam(ReturnParamName, resultRegister);
     }
     Command(PTXInstructions.ReturnOperation);
 }
Esempio n. 2
0
 /// <summary cref="IBackendCodeGenerator.GenerateCode(ReturnTerminator)"/>
 public void GenerateCode(ReturnTerminator returnTerminator)
 {
     using var statement = BeginStatement(CLInstructions.ReturnStatement);
     if (!returnTerminator.IsVoidReturn)
     {
         var resultRegister = Load(returnTerminator.ReturnValue);
         statement.AppendArgument(resultRegister);
     }
 }
Esempio n. 3
0
 /// <summary cref="IValueVisitor.Visit(ReturnTerminator)"/>
 public void Visit(ReturnTerminator returnTerminator)
 {
     using (var statement = BeginStatement(CLInstructions.ReturnStatement))
     {
         if (!returnTerminator.IsVoidReturn)
         {
             var resultRegister = LoadIntrinsic(returnTerminator.ReturnValue);
             statement.AppendArgument(resultRegister);
         }
     }
 }
 /// <summary cref="IBackendCodeGenerator.GenerateCode(ReturnTerminator)"/>
 public void GenerateCode(ReturnTerminator returnTerminator)
 {
     if (!returnTerminator.IsVoidReturn)
     {
         var resultRegister = Load(returnTerminator.ReturnValue);
         EmitStoreParam(ReturnParamName, resultRegister);
     }
     Command(
         Uniforms.IsUniform(returnTerminator)
             ? PTXInstructions.UniformReturnOperation
             : PTXInstructions.ReturnOperation);
 }
Esempio n. 5
0
        /// <summary>
        /// Lowers return terminators returning structure values.
        /// </summary>
        private static void Lower(
            SSARewriterContext <FieldRef> context,
            LoweringData _,
            ReturnTerminator value)
        {
            // Move the block builder to a valid insert position in the source block
            var blockBuilder = context.GetMethodBuilder()[value.BasicBlock];

            blockBuilder.SetupInsertPositionToEnd();

            // Assemble return value
            Value returnValue    = value.ReturnValue;
            var   returnType     = returnValue.Type.As <StructureType>(value);
            var   newReturnValue = AssembleStructure(
                context.SpecializeBuilder(blockBuilder),
                returnType,
                returnValue);

            // Replace return terminator with a new terminator
            context.Builder.Terminator = context.Builder.CreateReturn(
                value.Location,
                newReturnValue);
        }
Esempio n. 6
0
        /// <summary>
        /// Lowers return terminators returning structure values.
        /// </summary>
        private static void Lower(
            SSARewriterContext <FieldRef> context,
            LoweringData _,
            ReturnTerminator value)
        {
            Value returnValue = value.ReturnValue;
            var   returnType  = returnValue.Type as StructureType;

            Debug.Assert(returnType != null, "Invalid structure type");

            // Assemble a new structure that can be returned
            var blockBuilder = context.GetMethodBuilder()[value.BasicBlock];

            blockBuilder.SetupInsertPosition(returnValue);

            var newReturnValue = AssembleStructure(
                context.SpecializeBuilder(blockBuilder),
                returnType,
                returnValue);

            // Replace return and remove return value
            returnValue.Replace(newReturnValue);
        }
Esempio n. 7
0
 /// <summary cref="IValueVisitor.Visit(ReturnTerminator)"/>
 public void Visit(ReturnTerminator returnTerminator) =>
 CodeGenerator.GenerateCode(returnTerminator);