[llvm-dev] PGO question

Xinliang David Li via llvm-dev llvm-dev at lists.llvm.org
Wed Mar 9 10:11:13 PST 2016


On Wed, Mar 9, 2016 at 9:45 AM, Toshio Suganuma via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> 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.
>

-fprofile-instr-generate by default still uses Clang frontend based
instrumentation -- that is why you see the warning.


> 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
>

you also need to use -instrprof to add the lowering pass.

The formal way to enable IR level instrumentation is to use the following
command line:

clang -fprofile-instr-generate -Xclang -fprofile-instrument=llvm main.c

David

> $ 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
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160309/895b33e3/attachment.html>


More information about the llvm-dev mailing list