FAIL: Why does the output of "llc -march=cpp .." fail to compile with clang 3.8

It seems that -march=cpp is broken.
the -march=cpp is very useful for people trying to understand the builder API.
But, if the output of -march=cpp does not even compile, it obviously
creates code that is broken, so defeats the object of helping people
understand the builder API.

Why isn't -march=cpp tested at all?

See detail below.

Kind Regards

James

Take a very simple example:

Source code for test.c:
void munge(int *P) {
  P[0] = P[1] + P[2];
}

compile with:
clang -c -emit-llvm -o test.bc test.c
test that the .bc output looks sensible
llvm-dis-3.8 test.bc
<snip>
; Function Attrs: nounwind uwtable
define void @_Z5mungePi(i32* %P) #0 {
  %1 = alloca i32*, align 8
  store i32* %P, i32** %1, align 8
  %2 = load i32*, i32** %1, align 8
  %3 = getelementptr inbounds i32, i32* %2, i64 1
  %4 = load i32, i32* %3, align 4
<snip>

So, that looks good.
compile to -march=cpp
llc-3.8 -march=cpp -o test.cpp test.bc

So, we should now end up with some CPP code that uses the builder
interface to generate the .bc file.
The problem is, test.cpp does not even compile.

the -march=cpp is very useful for people trying to understand the builder API.

But, if the output of -march=cpp does not even compile, it obviously
creates code that is broken, so defeats the object of helping people
understand the builder API.

Why isn't -march=cpp tested at all?

Last time someone discovered the CppBackend does not work [1] it was
decided to remove it [2].

Michael

[1] http://lists.llvm.org/pipermail/llvm-dev/2016-May/098981.html
[2] https://reviews.llvm.org/rL268631

So, the advice is to use the IRBuilder API.
Can anyone actually point me to any documentation on how to use the
IRBuilder API, or even some example programs that use it?
By example program, I don't mean clang source because that would take
too long to trawl through.
Surely there are some tests that test the IRBuilder API?

I have a program that used to work with LLVM 3.6 API, and it now all
broken on LLVM 3.8 API and none of the documentation has changed
between LLVM 3.6 and LLVM 3.8 so it is not particularly easy to
understand what is "the right thing" to do now with the LLVM 3.8 API.
So, some pointers would help please.

Kind Regards

James

Last time someone discovered the CppBackend does not work [1] it was
decided to remove it [2].

Michael

[1] http://lists.llvm.org/pipermail/llvm-dev/2016-May/098981.html
[2] https://reviews.llvm.org/rL268631

So, the advice is to use the IRBuilder API.
Can anyone actually point me to any documentation on how to use the
IRBuilder API, or even some example programs that use it?
By example program, I don't mean clang source because that would take
too long to trawl through.
Surely there are some tests that test the IRBuilder API?

Have you tried the Kaleidoscope tutorial on llvm.org?

I have a program that used to work with LLVM 3.6 API, and it now all
broken on LLVM 3.8 API and none of the documentation has changed
between LLVM 3.6 and LLVM 3.8

I’d expect the Doxygen pages to reflect the API changes?