[all-commits] [llvm/llvm-project] 29c8eb: [MemoryBuiltins][FIX] Adjust index type size prope...

Johannes Doerfert via All-commits all-commits at lists.llvm.org
Mon Feb 7 18:20:24 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 29c8ebad10b4c349a185438fed52e08426d603e1
      https://github.com/llvm/llvm-project/commit/29c8ebad10b4c349a185438fed52e08426d603e1
  Author: Johannes Doerfert <johannes at jdoerfert.de>
  Date:   2022-02-07 (Mon, 07 Feb 2022)

  Changed paths:
    M llvm/include/llvm/Analysis/MemoryBuiltins.h
    M llvm/lib/Analysis/MemoryBuiltins.cpp
    M llvm/test/Transforms/InstCombine/builtin-dynamic-object-size.ll

  Log Message:
  -----------
  [MemoryBuiltins][FIX] Adjust index type size properly wrt. AS casts

Use existing functionality to strip constant offsets that works well
with AS casts and avoids the code duplication.

Since we strip AS casts during the computation of the offset we also
need to adjust the APInt properly to avoid mismatches in the bit width.
This code ensures the caller of `compute` sees APInts that match the
index type size of the value passed to `compute`, not the value result
of the strip pointer cast.

Fixes #53559.

Differential Revision: https://reviews.llvm.org/D118727


  Commit: dd101c808b85aad8edb48ab6d5f754cc6527fcff
      https://github.com/llvm/llvm-project/commit/dd101c808b85aad8edb48ab6d5f754cc6527fcff
  Author: Johannes Doerfert <johannes at jdoerfert.de>
  Date:   2022-02-07 (Mon, 07 Feb 2022)

  Changed paths:
    M llvm/lib/Transforms/IPO/AttributorAttributes.cpp
    M llvm/test/Transforms/Attributor/undefined_behavior.ll

  Log Message:
  -----------
  [Attributor][FIX] Do not use assumed information for UB detection

The helper `Attributor::checkForAllReturnedValuesAndReturnInsts`
simplifies the returned value optimistically. In `AAUndefinedBehavior`
we cannot use such optimistic values when deducing UB. As a result, we
assumed UB for the return value of a function because we initially
(=optimistically) thought the function return is `undef`. While we later
adjusted this properly, the `AAUndefinedBehavior` was under the
impression the return value is "known" (=fix) and could never change.

To correct this we use `Attributor::checkForAllInstructions` and then
manually to perform simplification of the return value, only allowing
known values to be used. This actually matches the other UB deductions.

Fixes #53647


Compare: https://github.com/llvm/llvm-project/compare/5aa3af3fcb01...dd101c808b85


More information about the All-commits mailing list