Skip to content
  1. Mar 02, 2020
  2. Mar 01, 2020
  3. Feb 29, 2020
    • Juneyoung Lee's avatar
      [ValueTracking] Let getGuaranteedNonFullPoisonOp consider assume, remove mentioning about br · 644e7476
      Juneyoung Lee authored
      Summary:
      This patch helps getGuaranteedNonFullPoisonOp handle llvm.assume call.
      Also, a comment about the semantics of branch is removed to prevent confusion.
      As llvm.assume does, branching on poison directly raises UB (as LangRef says), and this allows transformations such as introduction of llvm.assume on branch condition at each successor, or freely replacing values after conditional branch (such as at loop exit).
      Handling br is not addressed in this patch. It makes SCEV more accurate, causing existing LoopVectorize/IndVar/etc tests to fail.
      
      Reviewers: spatel, lebedev.ri, nlopes
      
      Reviewed By: nlopes
      
      Subscribers: hiraditya, javed.absar, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D75397
      644e7476
    • Juneyoung Lee's avatar
      [ValueTracking] A value is never undef or poison if it must raise UB · 282ec405
      Juneyoung Lee authored
      Summary:
      This patch helps isGuaranteedNotToBeUndefOrPoison return true if the value
      makes the program always undefined.
      
      According to value tracking functions' comments, it is not still in consensus
      whether a poison value can be bitwise or not, so conservatively only the case with
      i1 is considered.
      
      Reviewers: spatel, lebedev.ri, reames, nlopes, regehr
      
      Reviewed By: nlopes
      
      Subscribers: uenoku, hiraditya, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D75396
      282ec405
    • Juneyoung Lee's avatar
      [GVN] Fold equivalent freeze instructions · 5cbb2656
      Juneyoung Lee authored
      Summary:
      This patch defines two freeze instructions to have the same value number if they are equivalent.
      
      This is allowed because GVN replaces all uses of a duplicated instruction with another.
      
      If it partially rewrites use, it is not allowed. e.g)
      
      ```
      a = freeze(x)
      b = freeze(x)
      use(a)
      use(a)
      use(b)
      =>
      use(a)
      use(b) // This is not allowed!
      use(b)
      ```
      
      Reviewers: fhahn, reames, spatel, efriedma
      
      Reviewed By: fhahn
      
      Subscribers: lebedev.ri, hiraditya, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D75398
      5cbb2656
Loading