Example #1
0
        /// <summary>
        /// Loads a variable. This can be an argument or a local reference.
        /// </summary>
        /// <param name="block">The current basic block.</param>
        /// <param name="builder">The current builder.</param>
        /// <param name="var">The variable reference.</param>
        private void LoadVariable(
            Block block,
            IRBuilder builder,
            VariableRef var)
        {
            Debug.Assert(
                var.RefType == VariableRefType.Argument ||
                var.RefType == VariableRefType.Local);
            var addressOrValue = block.GetValue(var);

            if (variables.Contains(var))
            {
                var type = variableTypes[var];
                block.Push(CreateLoad(
                               builder,
                               addressOrValue,
                               type.Item1,
                               type.Item2));
            }
            else
            {
                block.Push(addressOrValue);
            }
        }
Example #2
0
        public override BasicBlock code()
        {
            block = bb();
            IRBuilder builder = new IRBuilder(block);

            LLVM.Type[] argTypes = new LLVM.Type[] { Parser.i8p, Parser.dblp, Parser.i8 };

            FunctionType stringToInt      = new FunctionType(Parser.vd, argTypes);
            Constant     writeArrayToFile = Parser.module.GetOrInsertFunction("writeArrayToFile", stringToInt);

            Value arrayPointer    = Parser.variables.arrayItem(builder, arrayName, Parser.zero);
            Value fileNamePointer = fileName.code(builder);

            Value arraySize = Parser.variables.arraySizes[arrayName];

            Value arrayPointer2 = builder.CreateGEP(arrayPointer, Parser.zero, "arrayGEP");


            Value[] args = { fileNamePointer, arrayPointer2, arraySize };

            builder.CreateCall(writeArrayToFile, args);

            return(block);
        }
Example #3
0
        /// <summary>
        /// Synthesizes instructions that compute a CUDA thread's unique ID.
        /// </summary>
        /// <param name="builder">An instruction builder.</param>
        /// <param name="module">An LLVM module to modify.</param>
        /// <returns>An instruction that generates a unique thread ID.</returns>
        private static LLVMValueRef ComputeUniqueThreadId(IRBuilder builder, LLVMModuleRef module)
        {
            // Aggregate thread, block IDs into a single unique identifier.
            // The way we do this is by iteratively applying this operation:
            //
            //     y * nx + x,
            //
            // where 'x' is a "row" index, 'nx' is the number of "rows" and 'y' is
            // a "column" index.
            var ids         = new[] { "tid.x", "tid.y", "tid.z", "ctaid.x", "ctaid.y", "ctaid.z" };
            var accumulator = ReadSReg(ids[ids.Length - 1], builder, module);

            for (int i = ids.Length - 2; i >= 0; i--)
            {
                accumulator = builder.CreateAdd(
                    builder.CreateMul(
                        accumulator,
                        ReadSReg("n" + ids[i], builder, module),
                        ""),
                    ReadSReg(ids[i], builder, module),
                    "");
            }
            return(accumulator);
        }
Example #4
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateShuffle(
     rebuilder.Rebuild(Variable),
     rebuilder.Rebuild(Origin),
     rebuilder.Rebuild(Width),
     Kind);
Example #5
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateBarrier(Kind);
Example #6
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateAtomicCAS(
     rebuilder.Rebuild(Target),
     rebuilder.Rebuild(Value),
     rebuilder.Rebuild(CompareValue),
     Flags);
Example #7
0
 public AsyncStateGroupCompilerState(LLVMValueRef function, IRBuilder builder)
     : base(function, builder)
 {
 }
Example #8
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateGetViewLength(
     rebuilder.Rebuild(View));
Example #9
0
 public virtual Value code(IRBuilder builder)
 {
     // abstract
     throw new CompileException("Can't code RelationalExpression directly");
 }
Example #10
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateArithmetic(
     rebuilder.Rebuild(Value),
     Kind,
     Flags);
Example #11
0
 /// <summary>
 /// Rebuilds the current value in the scope of the given rebuilder.
 /// </summary>
 /// <param name="builder">The builder to use.</param>
 /// <param name="rebuilder">The rebuilder to use.</param>
 /// <returns>The rebuilt value.</returns>
 protected internal abstract Value Rebuild(IRBuilder builder, IRRebuilder rebuilder);
Example #12
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateLaneIdxValue();
Example #13
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateWarpSizeValue();
Example #14
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateGroupDimensionValue(Dimension);
Example #15
0
 public Value Seal() =>
 IRBuilder.FinishLoadArrayElementAddress(Location, ref builder);
Example #16
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateNull(Type);
Example #17
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateCompare(
     rebuilder.Rebuild(Left),
     rebuilder.Rebuild(Right),
     Kind,
     Flags);
Example #18
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateReturn(
     rebuilder.Rebuild(ReturnValue));
Example #19
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateNewView(
     rebuilder.Rebuild(Pointer),
     rebuilder.Rebuild(Length));
Example #20
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateUnconditionalBranch(
     rebuilder.LookupTarget(Target));
Example #21
0
 protected FunctionCompilerState(LLVMValueRef function, IRBuilder builder)
 {
     Function = function;
     Builder  = builder;
 }
Example #22
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateConditionalBranch(
     rebuilder.Rebuild(Condition),
     rebuilder.LookupTarget(TrueTarget),
     rebuilder.LookupTarget(FalseTarget));
Example #23
0
 public OuterFunctionCompilerState(LLVMValueRef function, IRBuilder builder)
     : base(function, builder)
 {
 }
Example #24
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 throw new InvalidOperationException();
Example #25
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder)
 {
     // Params have already been mapped in the beginning
     return(rebuilder.Rebuild(this));
 }
Example #26
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreatePrimitiveValue(BasicValueType, rawValue);
Example #27
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateBroadcast(
     rebuilder.Rebuild(Variable),
     rebuilder.Rebuild(Origin),
     Kind);
Example #28
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreatePrimitiveValue(String);
Example #29
0
 public NewArray Seal() =>
 IRBuilder.FinishNewArray(Location, ArrayType, ref builder);
Example #30
0
 /// <summary cref="Value.Rebuild(IRBuilder, IRRebuilder)"/>
 protected internal override Value Rebuild(IRBuilder builder, IRRebuilder rebuilder) =>
 builder.CreateSizeOf(TargetType);