[PATCH] D91726: [LoopIdiom] 'left-shift until bittest' idiom: support canonical sign bit mask

Peter Collingbourne via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 29 14:23:50 PST 2020


pcc added a comment.

It looks like this patch caused an assertion failure:

  $ cat test.ii
  # 1 "" 3
  typedef int a;
  typedef unsigned b;
  struct c {
    template <typename d> c(d e) : f(e) {}
    int f;
  };
  struct g {
    template <typename h, typename ad> g(h e, ad) : ae(e), af(0) {}
    c ae;
    c af;
  };
  template <typename ag, typename i> auto ah(ag e, i) { return g(e, 0); }
  class j {
  public:
    void k();
  };
  class l;
  class m {
  public:
    m(int, l, int);
  };
  class l {
  public:
    l(int, int);
  };
  class n {
    bool o();
    int ax;
  };
  template <typename> using ay = m;
  template <typename, typename> using bc = l;
  class p {
  public:
    int *m_fn3();
    a q();
  };
  class r {
  public:
    r(int)
        : bh(0, bc<int, int>(int(), bi), bi), bj(int(), bi), bk(int(), bi),
          bl(int(), bi) {
      p bn;
      int *base = bn.m_fn3();
      a bo = base == nullptr ?: bn.q();
      if (bo)
        for (auto bp = ah(bo, 0); __builtin_expect(bp.ae.f >= bp.af.f, false);)
          j().k();
    }
    int bi;
    ay<bc<int, int>> bh;
    bc<int, int> bj;
    bc<b, bool> bk;
    bc<b, int> bl;
  };
  bool n::o() { r bq(ax); }
  $ ~/l2/ra/bin/clang -O2 test.ii
  clang: ../llvm/include/llvm/IR/Instructions.h:2767: llvm::Value *llvm::PHINode::getIncomingValueForBlock(const llvm::BasicBlock *) const: Assertion `Idx >= 0 && "Invalid basic block argument!"' failed.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D91726/new/

https://reviews.llvm.org/D91726



More information about the llvm-commits mailing list