[PATCH] D118118: [SDAG] Preserve unpredictable metadata, teach X86CmovConversion to respect this metadata

Dávid Bolvanský via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 25 03:13:23 PST 2022


xbolva00 created this revision.
xbolva00 added reviewers: RKSimon, spatel, craig.topper, nikic.
Herald added subscribers: pengfei, hiraditya.
xbolva00 requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Sometimes an developer would like to have more control over cmov vs branch. We have unpredictable metadata in LLVM IR, but currently it is ignored by X86 backend. Propagate this metadata and avoid cmov->branch conversion in X86CmovConversion for cmov with this metadata.

Motivation:

  int MaxIndex(int n, int *a) {
      int t = 0;
      for (int i = 1; i < n; i++) {
          // cmov is converted to branch by X86CmovConversion
          if (a[i] > a[t]) t = i;
      }
      return t;
  }
  
  int MaxIndex2(int n, int *a) {
      int t = 0;
      for (int i = 1; i < n; i++) {
          // cmov is preserved
          if (__builtin_unpredictable(a[i] > a[t])) t = i;
      }
      return t;
  }


https://reviews.llvm.org/D118118

Files:
  llvm/include/llvm/CodeGen/MachineInstr.h
  llvm/include/llvm/CodeGen/SelectionDAGNodes.h
  llvm/lib/CodeGen/MIRPrinter.cpp
  llvm/lib/CodeGen/MachineInstr.cpp
  llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp
  llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
  llvm/lib/Target/X86/X86CmovConversion.cpp
  llvm/lib/Target/X86/X86ISelLowering.cpp
  llvm/test/CodeGen/X86/x86-cmov-converter.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D118118.402817.patch
Type: text/x-patch
Size: 11872 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220125/cac0d135/attachment.bin>


More information about the llvm-commits mailing list