LLVM binaries for Windows and more

Hi!

I want to use LLVM for my own "pet" programming language compiler as a backend.
Currently it generates C code, but I am not satisfied with this approach as generating
high-level C (with proper type declarations!) is horrible.
So here are my questions/problems with LLVM:

1.) Are there operations that add, sub, mul integers with overflow checking? How much work would it be to add those? They are needed for my programming language, but I think Pascal and Ada need those too.

2.) The version 2.0 of your source code does not compile with Microsoft Visual C++ 2005 Express Edition. (By the way, is it documented that I need Bison? I figured that out myself...):

------ Build started: Project: x86, Configuration: Release Win32 ------
Compiling...
X86RegisterInfo.cpp
..\..\lib\Target\X86\X86RegisterInfo.cpp(1107) : warning C4244: 'argument' : conversion from 'uint64_t' to 'int', possible loss of data
..\..\lib\Target\X86\X86RegisterInfo.cpp(1127) : warning C4244: 'argument' : conversion from 'uint64_t' to 'int', possible loss of data
..\..\lib\Target\X86\X86RegisterInfo.cpp(1132) : warning C4244: 'argument' : conversion from 'uint64_t' to 'int', possible loss of data
..\..\lib\Target\X86\X86RegisterInfo.cpp(1141) : warning C4244: 'argument' : conversion from 'uint64_t' to 'int', possible loss of data
..\..\lib\Target\X86\X86RegisterInfo.cpp(1170) : warning C4244: 'argument' : conversion from 'uint64_t' to 'int', possible loss of data
..\..\lib\Target\X86\X86RegisterInfo.cpp(1185) : warning C4244: 'argument' : conversion from 'int64_t' to 'int', possible loss of data
c:\Eigenes\compiler\llvm-2.0\win32\x86\X86GenRegisterInfo.inc(805) : warning C4065: switch statement contains 'default' but no 'case' labels
C:\eigenes\compiler\vcc2005\VC\include\xutility(2282) : warning C4996: 'std::_Copy_opt' was declared deprecated
        C:\eigenes\compiler\vcc2005\VC\include\xutility(2270) : see declaration of 'std::_Copy_opt'
        Message: 'You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library'
        c:\Eigenes\compiler\llvm-2.0\include\llvm/ADT/BitVector.h(90) : see reference to function template instantiation '_OutIt std::copy<llvm::BitVector::BitWord*,llvm::BitVector::BitWord*>(_InIt,_InIt,_OutIt)' being compiled
        with
        [
            _OutIt=llvm::BitVector::BitWord *,
            _InIt=llvm::BitVector::BitWord *
        ]
C:\eigenes\compiler\vcc2005\VC\include\xutility(2282) : warning C4996: 'std::_Copy_opt' was declared deprecated
        C:\eigenes\compiler\vcc2005\VC\include\xutility(2270) : see declaration of 'std::_Copy_opt'
        Message: 'You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library'
        c:\Eigenes\compiler\llvm-2.0\include\llvm/ADT/SmallVector.h(383) : see reference to function template instantiation '_OutIt std::copy<T*,T*>(_InIt,_InIt,_OutIt)' being compiled
        with
        [
            _OutIt=llvm::TargetAlignElem *,
            T=llvm::TargetAlignElem,
            _InIt=llvm::TargetAlignElem *
        ]
        c:\Eigenes\compiler\llvm-2.0\include\llvm/ADT/SmallVector.h(373) : while compiling class template member function 'const llvm::SmallVectorImpl<T> &llvm::SmallVectorImpl<T>::operator =(const llvm::SmallVectorImpl<T> &)'
        with
        [
            T=llvm::TargetAlignElem
        ]
        c:\Eigenes\compiler\llvm-2.0\include\llvm/ADT/SmallVector.h(423) : see reference to class template instantiation 'llvm::SmallVectorImpl<T>' being compiled
        with
        [
            T=llvm::TargetAlignElem
        ]
        c:\Eigenes\compiler\llvm-2.0\include\llvm/Target/TargetData.h(78) : see reference to class template instantiation 'llvm::SmallVector<T,N>' being compiled
        with
        [
            T=llvm::TargetAlignElem,
            N=16
        ]
C:\eigenes\compiler\vcc2005\VC\include\memory(93) : warning C4996: 'std::_Uninit_copy' was declared deprecated
        C:\eigenes\compiler\vcc2005\VC\include\memory(82) : see declaration of 'std::_Uninit_copy'
        Message: 'You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library'
        c:\Eigenes\compiler\llvm-2.0\include\llvm/ADT/SmallVector.h(407) : see reference to function template instantiation '_FwdIt std::uninitialized_copy<T*,T*>(_InIt,_InIt,_FwdIt)' being compiled
        with
        [
            _FwdIt=llvm::TargetAlignElem *,
            T=llvm::TargetAlignElem,
            _InIt=llvm::TargetAlignElem *
        ]
C:\eigenes\compiler\vcc2005\VC\include\memory(93) : warning C4996: 'std::_Uninit_copy' was declared deprecated
        C:\eigenes\compiler\vcc2005\VC\include\memory(82) : see declaration of 'std::_Uninit_copy'
        Message: 'You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library'
        c:\Eigenes\compiler\llvm-2.0\include\llvm/ADT/SmallVector.h(319) : see reference to function template instantiation '_FwdIt std::uninitialized_copy<T*,T*>(_InIt,_InIt,_FwdIt)' being compiled
        with
        [
            _FwdIt=llvm::SDNode **,
            T=llvm::SDNode *,
            _InIt=llvm::SDNode **
        ]
        c:\Eigenes\compiler\llvm-2.0\include\llvm/ADT/SmallVector.h(310) : while compiling class template member function 'void llvm::SmallVectorImpl<T>::grow(unsigned int)'
        with
        [
            T=llvm::SDNode *
        ]
        c:\Eigenes\compiler\llvm-2.0\include\llvm/ADT/SmallVector.h(423) : see reference to class template instantiation 'llvm::SmallVectorImpl<T>' being compiled
        with
        [
            T=llvm::SDNode *
        ]
        c:\Eigenes\compiler\llvm-2.0\include\llvm/CodeGen/SelectionDAGNodes.h(825) : see reference to class template instantiation 'llvm::SmallVector<T,N>' being compiled
        with
        [
            T=llvm::SDNode *,
            N=3
        ]
c:\eigenes\compiler\llvm-2.0\win32\x86\x86genregisterinfo.inc(806) : error C4716: 'llvm::X86GenRegisterInfo::getSubReg' : must return a value
Build log was saved at "file://c:\Eigenes\compiler\llvm-2.0\win32\x86\Release\BuildLog.htm"
x86 - 1 error(s), 11 warning(s)
------ Build started: Project: llc, Configuration: Release Win32 ------
Linking...
LINK : fatal error LNK1181: cannot open input file '..\release\x86.lib'
Build log was saved at "file://c:\Eigenes\compiler\llvm-2.0\win32\llc\Release\BuildLog.htm"
llc - 1 error(s), 0 warning(s)
------ Build started: Project: lli, Configuration: Release Win32 ------
Linking...
LINK : fatal error LNK1181: cannot open input file '..\release\x86.lib'
Build log was saved at "file://c:\Eigenes\compiler\llvm-2.0\win32\lli\Release\BuildLog.htm"
lli - 1 error(s), 0 warning(s)
------ Build started: Project: Fibonacci, Configuration: Release Win32 ------
Linking...
LINK : fatal error LNK1181: cannot open input file '..\release\x86.lib'
Build log was saved at "file://c:\Eigenes\compiler\llvm-2.0\win32\Fibonacci\Release\BuildLog.htm"
Fibonacci - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 4 failed, 26 up-to-date, 0 skipped ==========

I fixed this by adding a ``return 0;`` at the end of the method. But why don't you just provide binaries for windows? I could send you the binaries that I built - I have not yet tested them though.

Greetings
Andreas Rumpf

I want to use LLVM for my own "pet" programming language compiler as a backend.
Currently it generates C code, but I am not satisfied with this approach as generating
high-level C (with proper type declarations!) is horrible.
So here are my questions/problems with LLVM:

1.) Are there operations that add, sub, mul integers with overflow checking? How much work would it be to add those? They are needed for my programming language, but I think Pascal and Ada need those too.

No not yet, the recommended solution is to compute overflow manually with arithmetic after you do the operations you need. In time LLVM will be extended to support this capability.

2.) The version 2.0 of your source code does not compile with Microsoft Visual C++ 2005 Express Edition. (By the way, is it documented that I need Bison? I figured that out myself...):

You might want to try LLVM CVS. I believe there are several fixes in CVS that were not in 2.0. If that doesn't work, we will gladly accept patches to make it work.

I fixed this by adding a ``return 0;`` at the end of the method. But why don't you just provide binaries for windows? I could send you the binaries that I built - I have not yet tested them though.

The LLVM community consists of volenteers, and noone volenteered for 2.0 :slight_smile:

-Chris