[llvm-dev] How to use CostModel?

Nadav Rotem nrotem at apple.com
Wed Aug 5 10:10:21 PDT 2015


> On Aug 5, 2015, at 7:54 AM, Stephen Thomas <stephen.warner.thomas at gmail.com> wrote:
> 
> Sorry if double posted... might have sent this to old mailing list address...
> 
> ---------- Forwarded message ----------
> From: Stephen Thomas <stephen.warner.thomas at gmail.com <mailto:stephen.warner.thomas at gmail.com>>
> Date: Wed, Aug 5, 2015 at 10:39 AM
> Subject: How to use CostModel?
> To: LLVM Dev <llvmdev at cs.uiuc.edu <mailto:llvmdev at cs.uiuc.edu>>
> 
> 
> Hi,
> 
> I'm trying to use the built-in CostModel class to estimate the number of machine instructions for each IR Instruction. To get a feel for what kind of output the CostModel pass gives, I ran it on the command line like so:
> 
> $ cat test.c 
> int main(){
>     int r = rand();
>     if (r > 1){
>         return ++r;
>     }
>     return r*86;
> }
> 
> $ clang-3.6 -S -emit-llvm test.c -o test.bc
> 
> $ opt-3.6  -analyze -targetlibinfo -cost-model ./test.bc
> Printing analysis 'Target Library Information':
> Pass::print not implemented for pass: 'Target Library Information'!
> Printing analysis 'Cost Model Analysis' for function 'main':
> Cost Model: Unknown cost for instruction:   %1 = alloca i32, align 4
> Cost Model: Unknown cost for instruction:   %r = alloca i32, align 4
> Cost Model: Found an estimated cost of 1 for instruction:   store i32 0, i32* %1
> Cost Model: Unknown cost for instruction:   %2 = call i32 (...)* @rand()
> Cost Model: Found an estimated cost of 1 for instruction:   store i32 %2, i32* %r, align 4
> Cost Model: Found an estimated cost of 1 for instruction:   %3 = load i32* %r, align 4
> Cost Model: Found an estimated cost of 1 for instruction:   %4 = icmp sgt i32 %3, 1
> Cost Model: Found an estimated cost of 0 for instruction:   br i1 %4, label %5, label %8
> Cost Model: Found an estimated cost of 1 for instruction:   %6 = load i32* %r, align 4
> Cost Model: Found an estimated cost of 1 for instruction:   %7 = add nsw i32 %6, 1
> Cost Model: Found an estimated cost of 1 for instruction:   store i32 %7, i32* %r, align 4
> Cost Model: Found an estimated cost of 1 for instruction:   store i32 %7, i32* %1
> Cost Model: Found an estimated cost of 0 for instruction:   br label %11
> Cost Model: Found an estimated cost of 1 for instruction:   %9 = load i32* %r, align 4
> Cost Model: Found an estimated cost of 1 for instruction:   %10 = mul nsw i32 %9, 86
> Cost Model: Found an estimated cost of 1 for instruction:   store i32 %10, i32* %1
> Cost Model: Found an estimated cost of 0 for instruction:   br label %11
> Cost Model: Found an estimated cost of 1 for instruction:   %12 = load i32* %1
> Cost Model: Found an estimated cost of 0 for instruction:   ret i32 %12
> 
> 
> Is it expected to only have 1s and 0s output?

The output looks correct. Try adding multiplication and division and you'll see higher costs. 

> Also, what target architecture is being used for the estimations? (Is it auto detecting the architecture I'm on?)

When the cost model analysis uses it uses the target that the compiler driver sets.  In your experiments with OPT you can request a specific target using the -mcpu and -mtriple flags. Like this:

-mcpu=core-avx2 -mtriple=x86_64-apple-darwin 

You can find more examples under llvm/test/Analysis/CostModel.

-Nadav

> 
> 
> Thanks,
> Steve
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org         http://llvm.cs.uiuc.edu
> 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/20150805/b2bd7b15/attachment.html>


More information about the llvm-dev mailing list