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

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 30 04:09:55 PST 2020


lebedev.ri added a comment.

In D91726#2474793 <https://reviews.llvm.org/D91726#2474793>, @lebedev.ri wrote:

> In D91726#2474387 <https://reviews.llvm.org/D91726#2474387>, @pcc wrote:
>
>> 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.
>
> Thank you for the reproducer, i'll take a look.

And, that is not a sufficient information for me to reproduce :/
Can you please just give me the IR produced by clang (i.e. `-O2 -S -emit-llvm -Xclang -disable-llvm-optzns`)?


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