[llvm-dev] PGO question

Toshio Suganuma via llvm-dev llvm-dev at lists.llvm.org
Wed Mar 9 09:45:54 PST 2016



Hi,

I have a question regarding PGO.

I collected profile data with the instrumentation build
(-fprofile-instr-generate) and provided for PGO optimization in the second
build (with -fprofile-instr-use=xxx.profdata). This works fine.

Then I tried to provide the profile data to opt using the option
-pgo-instr-use, but this causes an error with the message: "Not an IR level
instrumentation profile".
I thought this error occurred because the profile data was produced by the
instrumentation build from the source level, not IR level. However, if I
try to make -pgo-instr-gen for the opt command, the resulting bitcode seems
to cause a problem as follows (my environment is 3.9.0, mid Feb trunk).

$ clang -c -o main.bc -O2 -m64 -emit-llvm main.c
$ opt -pgo-instr-gen main.bc -o main_inst.bc
$ llc main_inst.bc -o main_inst.s
instrprof failed to lower an increment
UNREACHABLE executed
at /home/suganuma/tools/llvm_new/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:5245!
#0 0x00000000815ecc7a llvm::sys::PrintStackTrace
(llvm::raw_ostream&) /home/suganuma/tools/llvm_new/llvm/lib/Support/Unix/Signals.inc:322:0
#1 0x00000000815ed02a PrintStackTraceSignalHandler
(void*) /home/suganuma/tools/llvm_new/llvm/lib/Support/Unix/Signals.inc:380:0
#2 0x00000000815eb33e llvm::sys::RunSignalHandlers
() /home/suganuma/tools/llvm_new/llvm/lib/Support/Signals.cpp:44:0
...
#7
0x0000000081577202 /home/suganuma/tools/llvm_new/llvm/lib/Support/ErrorHandling.cpp:117:0
#8 0x000000008139792a llvm::SelectionDAGBuilder::visitIntrinsicCall
(llvm::CallInst const&, unsigned
int) /home/suganuma/tools/llvm_new/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:5247:0
#9 0x000000008139b11c llvm::SelectionDAGBuilder::visitCall(llvm::CallInst
const&) /home/suganuma/tools/llvm_new/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:5811:0
#10 0x00000000813737e4 llvm::SelectionDAGBuilder::visit(unsigned int,
llvm::User
const&) /home/suganuma/tools/llvm_new/llvm/include/llvm/IR/Instruction.def:186:0
...

Am I doing something wrong? How can we provide profile data to opt?
What actually I want to do is to dump call graph (cross module) and cfg
that reflect counter values from profile data.

Thank you,
--Toshio
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160310/33a32c19/attachment.html>


More information about the llvm-dev mailing list