nickdesaulniers added a comment.

In D146466#4217363 <https://reviews.llvm.org/D146466#4217363>, @efriedma wrote:

> There are limits to how much we can do by just changing the code clang 
> generates... but the two particular cases you mention probably could be 
> "fixed" by messing with the IR generated by clang.  Sure, that probably makes 
> sense to pursue.  (If you're going to pick an arbitrary value, zero is 
> probably a better choice than "freeze poison".)

I don't think that could be a clang codegen of IR change.  What I had in mind 
is closer to:

  diff --git a/llvm/lib/Transforms/Utils/LoopUnroll.cpp 
b/llvm/lib/Transforms/Utils/LoopUnroll.cpp
  index 916c02692823..aa1f288b51ee 100644
  --- a/llvm/lib/Transforms/Utils/LoopUnroll.cpp
  +++ b/llvm/lib/Transforms/Utils/LoopUnroll.cpp
  @@ -236,9 +236,17 @@ void llvm::simplifyLoopAfterUnroll(Loop *L, bool 
SimplifyIVs, LoopInfo *LI,
     SmallVector<WeakTrackingVH, 16> DeadInsts;
     for (BasicBlock *BB : L->getBlocks()) {
       for (Instruction &Inst : llvm::make_early_inc_range(*BB)) {
  -      if (Value *V = simplifyInstruction(&Inst, {DL, nullptr, DT, AC}))
  -        if (LI->replacementPreservesLCSSAForm(&Inst, V))
  +      if (Value *V = simplifyInstruction(&Inst, {DL, nullptr, DT, AC})) {
  +        // TODO: check if sanitizer is enabled
  +        if (isa<PoisonValue>(V) && isa<LoadInst>(Inst)) {
  +          errs() << "XXX: found poison (replacing a load)!\n";
  +          FreezeInst *FI = new FreezeInst(V);
  +          FI->insertInto(BB, Inst.getIterator());
  +          if (LI->replacementPreservesLCSSAForm(FI, V))
  +            Inst.replaceAllUsesWith(FI);
  +        } else if (LI->replacementPreservesLCSSAForm(&Inst, V))
             Inst.replaceAllUsesWith(V);
  +      }
         if (isInstructionTriviallyDead(&Inst))
           DeadInsts.emplace_back(&Inst);
       }

Which seems to do exactly what I want (minus only doing so when 
`-fsanitize=array-bounds` is enabled; not sure we leave such breadcrumbs behind 
in IR; still looking to see if we can tell in LLVM when specific sanitizers are 
enabled)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D146466

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to