[PATCH] D146629: [SimplifyCFG][LICM] Preserve nonnull, range and align metadata when speculating

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 20 02:44:25 PDT 2023


nikic added a comment.

Looks like there's another bug in GVN:

  declare void @use(i32)
  
  define void @test(i1 %c, ptr %p) {
    %v1 = load i32, ptr %p, !range !{i32 0, i32 10}
    br i1 %c, label %if, label %join
  
  if:
    br label %join
  
  join:
    %v2 = load i32, ptr %p, !range !{i32 20, i32 30}
    call void @use(i32 %v1)
    call void @use(i32 %v2)
    ret void
  }
  
  ; RUN: opt -S -passes=gvn < %s
  
  declare void @use(i32)
  
  define void @test(i1 %c, ptr %p) {
    %v1 = load i32, ptr %p, align 4, !range !0
    br i1 %c, label %if, label %join
  
  if:                                               ; preds = %0
    br label %join
  
  join:                                             ; preds = %if, %0
    call void @use(i32 %v1)
    call void @use(i32 %v1)
    ret void
  }
  
  !0 = !{i32 0, i32 10}

Apparently we don't perform metadata combining when replacing non-local loads :(


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D146629



More information about the llvm-commits mailing list