[PATCH] D31085: [InlineCost] Increase the cost of Switch

Jun Bum Lim via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 17 10:10:56 PDT 2017


junbuml created this revision.
Herald added subscribers: rengolin, aemerson.

The motivation example is like below which has 13 cases but only 2 distinct targets

  lor.lhs.false2:                                   ; preds = %if.then
    switch i32 %Status, label %if.then27 [
      i32 -7012, label %if.end35
      i32 -10008, label %if.end35
      i32 -10016, label %if.end35
      i32 15000, label %if.end35
      i32 14013, label %if.end35
      i32 10114, label %if.end35
      i32 10107, label %if.end35
      i32 10105, label %if.end35
      i32 10013, label %if.end35
      i32 10011, label %if.end35
      i32 7008, label %if.end35
      i32 7007, label %if.end35
      i32 5002, label %if.end35
    ]

which is compiled into a balanced binary tree like this on AArch64 (similar on X86)

  .LBB853_9:                              // %lor.lhs.false2
          mov     w8, #10012
          cmp             w19, w8
          b.gt    .LBB853_14
  // BB#10:                               // %lor.lhs.false2
          mov     w8, #5001
          cmp             w19, w8
          b.gt    .LBB853_18
  // BB#11:                               // %lor.lhs.false2
          mov     w8, #-10016
          cmp             w19, w8
          b.eq    .LBB853_23
  // BB#12:                               // %lor.lhs.false2
          mov     w8, #-10008
          cmp             w19, w8
          b.eq    .LBB853_23
  // BB#13:                               // %lor.lhs.false2
          mov     w8, #-7012
          cmp             w19, w8
          b.eq    .LBB853_23
          b       .LBB853_3
  .LBB853_14:                             // %lor.lhs.false2
          mov     w8, #14012
          cmp             w19, w8
          b.gt    .LBB853_21
  // BB#15:                               // %lor.lhs.false2
          mov     w8, #-10105
          add             w8, w19, w8
          cmp             w8, #9          // =9
          b.hi    .LBB853_17
  // BB#16:                               // %lor.lhs.false2
          orr     w9, wzr, #0x1
          lsl     w8, w9, w8
          mov     w9, #517
          and             w8, w8, w9
          cbnz    w8, .LBB853_23
  .LBB853_17:                             // %lor.lhs.false2
          mov     w8, #10013
          cmp             w19, w8
          b.eq    .LBB853_23
          b       .LBB853_3
  .LBB853_18:                             // %lor.lhs.false2
          mov     w8, #-7007
          add             w8, w19, w8
          cmp             w8, #2          // =2
          b.lo    .LBB853_23
  // BB#19:                               // %lor.lhs.false2
          mov     w8, #5002
          cmp             w19, w8
          b.eq    .LBB853_23
  // BB#20:                               // %lor.lhs.false2
          mov     w8, #10011
          cmp             w19, w8
          b.eq    .LBB853_23
          b       .LBB853_3
  .LBB853_21:                             // %lor.lhs.false2
          mov     w8, #14013
          cmp             w19, w8
          b.eq    .LBB853_23
  // BB#22:                               // %lor.lhs.false2
          mov     w8, #15000
          cmp             w19, w8
          b.ne    .LBB853_3

However, the inline cost model estimates the cost to be linear with the number of distinct targets and the cost of the above switch is just 2 InstrCosts.  The function containing this switch is then inlined about 900 times.

This change modifies the model to be linear with the size of the balanced binary tree.


https://reviews.llvm.org/D31085

Files:
  include/llvm/Analysis/TargetTransformInfo.h
  include/llvm/Analysis/TargetTransformInfoImpl.h
  include/llvm/CodeGen/BasicTTIImpl.h
  lib/Analysis/InlineCost.cpp
  lib/Analysis/TargetTransformInfo.cpp
  test/Transforms/Inline/switch.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D31085.92161.patch
Type: text/x-patch
Size: 7524 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170317/f789b2a6/attachment.bin>


More information about the llvm-commits mailing list