This is an archive of the discontinued LLVM Phabricator instance.

BPF: Implement TTI.getCmpSelInstrCost() properly
ClosedPublic

Authored by yonghong-song on Feb 25 2021, 8:36 AM.

Details

Summary

The Select insn in BPF is expensive as BPF backend
needs to resolve with conditionals. This patch set
the getCmpSelInstrCost() to SCEVCheapExpansionBudget
for Select insn to prevent some Select insn related
optimizations.

This change is motivated during bcc code review for

https://github.com/iovisor/bcc/pull/3270

where IndVarSimplifyPass eventually caused generating
the following asm code:

;       for (i = 0; (i < VIRTIO_MAX_SGS) && (i < num); i++) {
    14:       16 05 40 00 00 00 00 00 if w5 == 0 goto +64 <LBB0_6>
    15:       bc 51 00 00 00 00 00 00 w1 = w5
    16:       04 01 00 00 ff ff ff ff w1 += -1
    17:       67 05 00 00 20 00 00 00 r5 <<= 32
    18:       77 05 00 00 20 00 00 00 r5 >>= 32
    19:       a6 01 01 00 05 00 00 00 if w1 < 5 goto +1 <LBB0_4>
    20:       b7 05 00 00 06 00 00 00 r5 = 6 
00000000000000a8 <LBB0_4>:
    21:       b7 02 00 00 00 00 00 00 r2 = 0 
    22:       b7 01 00 00 00 00 00 00 r1 = 0 
;       for (i = 0; (i < VIRTIO_MAX_SGS) && (i < num); i++) {
    23:       7b 1a e0 ff 00 00 00 00 *(u64 *)(r10 - 32) = r1
    24:       7b 5a c0 ff 00 00 00 00 *(u64 *)(r10 - 64) = r5

Note that insn #15 has w1 = w5 and w1 is refined later but r5(w5) is
eventually saved on stack at insn #24 for later use. This cause
later verifier failures.

With this change, IndVarSimplifyPass won't do the above
transformation any more.

Diff Detail

Event Timeline

yonghong-song created this revision.Feb 25 2021, 8:36 AM
yonghong-song requested review of this revision.Feb 25 2021, 8:36 AM
Herald added a project: Restricted Project. · View Herald TranscriptFeb 25 2021, 8:36 AM
yonghong-song edited the summary of this revision. (Show Details)
  • change Select insn cost from 4 to SCEVCheapExpansionBudget. Using SCEVCheapExpansionBudget is more adaptive in that its value is changed in the future.
ast accepted this revision.Feb 25 2021, 2:02 PM

Thanks!

This revision is now accepted and ready to land.Feb 25 2021, 2:02 PM
This revision was landed with ongoing or failed builds.Feb 25 2021, 2:57 PM
This revision was automatically updated to reflect the committed changes.