Ejemplo n.º 1
0
        public Value(LLVMValueRef* handle)
        {
            if(handle == null)
                throw new ArgumentNullException("handle");

            m_handle = handle;
        }
Ejemplo n.º 2
0
        public static bool Used(LLVMValueRef *value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            return(Native.GetFirstUse(value) != null);
        }
Ejemplo n.º 3
0
        public Value(LLVMValueRef *handle)
        {
            if (handle == null)
            {
                throw new ArgumentNullException("handle");
            }

            m_handle = handle;
        }
Ejemplo n.º 4
0
        public Value BuildPhi(TypeRef type, string name, PhiIncoming incoming)
        {
            IntPtr[] valPointers   = incoming.GetValuePointers();
            IntPtr[] blockPointers = incoming.GetBlockPointers();

            LLVMValueRef *phi = Native.BuildPhi(m_builder, type.Handle, name);

            Native.AddIncoming(phi, valPointers, blockPointers, (uint)valPointers.Length);

            return(new Value(phi));
        }
Ejemplo n.º 5
0
        public Value GetParameter(uint index)
        {
            LLVMValueRef *p = Native.GetParam(m_handle, index);

            if (p == null)
            {
                return(Value.Null);
            }

            return(new Value(p));
        }
Ejemplo n.º 6
0
        public Value GetTerminator()
        {
            LLVMValueRef *term = Native.GetBasicBlockTerminator(BBHandle);

            if (term == null)
            {
                return(Value.Null);
            }

            return(new Value(term));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Create a function with arguments and a return type.
        /// </summary>
        /// <param name="module"></param>
        /// <param name="name"></param>
        /// <param name="returnType"></param>
        /// <param name="paramTypes"></param>
        public Function(Module module, string name, TypeRef returnType, TypeRef[] paramTypes)
        {
            m_name = name;
            m_returnType = returnType;
            m_paramTypes = paramTypes;

            IntPtr[] paramArray = LLVMHelper.MarshallPointerArray(paramTypes);

            m_funcType = Native.FunctionType(returnType.Handle, paramArray, (uint)paramArray.Length, 0);
            m_handle = Native.AddFunction(module.Handle, name, m_funcType);
        }
Ejemplo n.º 8
0
        public Value BuildEntryBlockAlloca(Function function, TypeRef type, string varName = tmpvarname)
        {
            LLVMBasicBlockRef *block = Native.GetInsertBlock(m_builder);
            LLVMBasicBlockRef *entry = Native.GetEntryBasicBlock(function.Handle);

            Native.PositionBuilderAtEnd(m_builder, entry);
            LLVMValueRef *alloca = Native.BuildAlloca(m_builder, type.Handle, varName);

            Native.PositionBuilderAtEnd(m_builder, block);

            return(new Value(alloca));
        }
Ejemplo n.º 9
0
        public static string GetName(LLVMValueRef *value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            IntPtr name = Native.GetValueName(value);

            if (name == null)
            {
                return(null);
            }

            return(System.Runtime.InteropServices.Marshal.PtrToStringAnsi(name));
        }
Ejemplo n.º 10
0
        public Function GetParent()
        {
            if (BBHandle == null)
            {
                throw new InvalidOperationException("BasicBlock is null");
            }

            LLVMValueRef *func = Native.GetBasicBlockParent(BBHandle);

            if (func == null)
            {
                return(null);
            }

            return(new Function(func));
        }
Ejemplo n.º 11
0
        public static int GetUseCount(LLVMValueRef *value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            LLVMUseRef *use   = Native.GetFirstUse(value);
            int         count = 0;

            while (use != null)
            {
                count++;
                use = Native.GetNextUse(use);
            }

            return(count);
        }
Ejemplo n.º 12
0
        public Function(string name, LLVMValueRef* handle)
        {
            m_name = name;
            m_handle = handle;
            m_funcType = Native.GetElementType(Native.TypeOf(handle));
            m_returnType = new TypeRef(Native.GetReturnType(m_funcType));

            uint paramCount = Native.CountParamTypes(m_funcType);
            m_paramTypes = new TypeRef[paramCount];

            if(paramCount > 0)
            {
                IntPtr[] types = new IntPtr[paramCount];
                Native.GetParamTypes(m_funcType, types);

                for(int i = 0; i < paramCount; ++i)
                {
                    m_paramTypes[i] = new TypeRef((LLVMTypeRef*)types[i]);
                }
            }
        }
Ejemplo n.º 13
0
        public Function(string name, LLVMValueRef *handle)
        {
            m_name       = name;
            m_handle     = handle;
            m_funcType   = Native.GetElementType(Native.TypeOf(handle));
            m_returnType = new TypeRef(Native.GetReturnType(m_funcType));

            uint paramCount = Native.CountParamTypes(m_funcType);

            m_paramTypes = new TypeRef[paramCount];

            if (paramCount > 0)
            {
                IntPtr[] types = new IntPtr[paramCount];
                Native.GetParamTypes(m_funcType, types);

                for (int i = 0; i < paramCount; ++i)
                {
                    m_paramTypes[i] = new TypeRef((LLVMTypeRef *)types[i]);
                }
            }
        }
Ejemplo n.º 14
0
 public Value()
 {
     m_handle = null;
 }
Ejemplo n.º 15
0
 public Value()
 {
     m_handle = null;
 }
Ejemplo n.º 16
0
 public Function(LLVMValueRef *handle)
     : this(Value.GetName(handle), handle)
 {
 }