Raj Parihar
2011-Dec-13 16:07 UTC
[LLVMdev] Issues in converting C++ code to C using llvm and llc
Hello All,
I came to know from a friend that using LLVM insfrastucture one can convert
C++ programs to C. I needed this for my cross-compiler because we don't
have support for C++ compilation in our cross-compiler.
I tried following:
http://llvm.org/docs/FAQ.html#translatecxx
While I can generate .bc its llc which gives error. Then I also tried
"clang" as oppose to llvm-g++.
Here is what I want to accomplish: I have a simple c++ prog which I want to
convert to c using llvm
-----------------------------------------------------------------
For example
-------------------------------------------------------------------------
c++ orig file: test_orig.cpp
-----
#include<iostream>
int main()
{
std::cout << "hello world from C++\n";
return 0;
}
---------------------------------
c orig file: test_orig.c
-----
#include<stdio>
int main()
{
printf("Hello workd from C\n");
return 0;
}
-------------------------------------
I used following commands
% clang -c -emit-llvm test_orig.*EXT* -o test_orig.bc
or
% llvm-g++ -c -emit-llvm test_orig.*EXT* -o test_orig.bc
% llc -march=c test_orig.bc -o test_new.c
and then I simply used gcc to compile test_new.c
gcc test_new.c
When *EXT* is .c then everything works fine however when it is .cpp then
when I try to recompile the test_new.c using gcc it says undefiend
references to std::cout, std::basic_ostream, std::ios_base
I thought that llvm should be able to convert "cout" to
"printf" or
equivalent.
Also how does llvm handles the libraries which are not part of std C but
are in C++.
-----------------------------------------
When I tried to compile my original benchmarks (They are from PARSEC suite)
I see this error
LLVM_ERROR: code generator does not support intrinsic function
"llvm.umul.with.overflow.i32"
How can I avoid this. I am running things on 64-bit Intel machine loaded
with CentOS 5.x
Any help/pointers to solve the above issues would be highly appriciated.
Thanks,
-Raj
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20111213/ab22b9d5/attachment.html>
Duncan Sands
2011-Dec-13 16:24 UTC
[LLVMdev] Issues in converting C++ code to C using llvm and llc
Hi Raj,> I came to know from a friend that using LLVM insfrastucture one can convert C++ > programs to C. I needed this for my cross-compiler because we don't have support > for C++ compilation in our cross-compiler.as described in the release notes, the C backend is deprecated and in any case doesn't work properly. Ciao, Duncan.> > I tried following: > http://llvm.org/docs/FAQ.html#translatecxx > > While I can generate .bc its llc which gives error. Then I also tried "clang" as > oppose to llvm-g++. > > Here is what I want to accomplish: I have a simple c++ prog which I want to > convert to c using llvm > ----------------------------------------------------------------- > > For example > ------------------------------------------------------------------------- > c++ orig file: test_orig.cpp > ----- > #include<iostream> > int main() > { > std::cout << "hello world from C++\n"; > return 0; > } > --------------------------------- > c orig file: test_orig.c > ----- > #include<stdio> > int main() > { > printf("Hello workd from C\n"); > return 0; > } > ------------------------------------- > I used following commands > > % clang -c -emit-llvm test_orig./*EXT*/ -o test_orig.bc > or > % llvm-g++ -c -emit-llvm test_orig./*EXT*/ -o test_orig.bc > > > % llc -march=c test_orig.bc -o test_new.c > > and then I simply used gcc to compile test_new.c > gcc test_new.c > > When /*EXT*/ is .c then everything works fine however when it is .cpp then when > I try to recompile the test_new.c using gcc it says undefiend references to > std::cout, std::basic_ostream, std::ios_base > > I thought that llvm should be able to convert "cout" to "printf" or equivalent. > Also how does llvm handles the libraries which are not part of std C but are in C++. > ----------------------------------------- > > When I tried to compile my original benchmarks (They are from PARSEC suite) > I see this error > > LLVM_ERROR: code generator does not support intrinsic function > "llvm.umul.with.overflow.i32" > > How can I avoid this. I am running things on 64-bit Intel machine loaded with > CentOS 5.x > > Any help/pointers to solve the above issues would be highly appriciated. > > Thanks, > -Raj > > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev