[PATCH] Fix crash in loop idiom recognizer

Pete Cooper peter_cooper at apple.com
Wed Jul 8 11:35:38 PDT 2015


Hi all

When spotting that a loop can use ctpop, we were incorrectly replacing all uses of a value with a value derived from ctpop.

The bug here was exposed because we were replacing a use prior to the ctpop with the ctpop value and so we have a use before def, i.e., we changed

  %tobool.5 = icmp ne i32 %num, 0
  store i1 %tobool.5, i1* %ptr
  br i1 %tobool.5, label %for.body.lr.ph, label %for.end

to

  store i1 %1, i1* %ptr
  %0 = call i32 @llvm.ctpop.i32(i32 %num)
  %1 = icmp ne i32 %0, 0
  br i1 %1, label %for.body.lr.ph, label %for.end

Even if we inserted the ctpop so that it dominates the store here, that would still be incorrect.  The store doesn’t want the result of ctpop.

The fix is very simple, and involves replacing only the branch condition with the ctpop instead of all uses.

Cheers,
Pete

-------------- next part --------------
A non-text attachment was scrubbed...
Name: loop-idiom.patch
Type: application/octet-stream
Size: 2349 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150708/cd4de111/attachment.obj>


More information about the llvm-commits mailing list