[PATCH] D152081: [Attributor] Add lightweight version for attribute deduction only

Bevin Hansson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 9 03:53:20 PDT 2023


ebevhan added a comment.

Hi! We're seeing miscompiles downstream when running attributor-light in pipelines. In the below reproducer, DSE is eliminating a store that isn't dead.

  define dso_local ptr @fun(ptr noundef %p) {
  entry:
    %p.addr = alloca ptr, align 1
    store ptr %p, ptr %p.addr, align 1
    %0 = load ptr, ptr %p.addr, align 1
    ret ptr %0
  }
  
  define dso_local i16 @test_it() {
  entry:
    %x = alloca i16, align 1
    %p = alloca ptr, align 1
    call void @llvm.lifetime.start.p0(i64 2, ptr %x)
    store i16 42, ptr %x, align 1
    call void @llvm.lifetime.start.p0(i64 2, ptr %p)
    %call = call ptr @fun(ptr noundef %x)
    store ptr %call, ptr %p, align 1
    %0 = load ptr, ptr %p, align 1
    %1 = load i16, ptr %0, align 1
    %cmp = icmp eq i16 %1, 42
    %conv = zext i1 %cmp to i16
    call void @llvm.lifetime.end.p0(i64 2, ptr %p)
    call void @llvm.lifetime.end.p0(i64 2, ptr %x)
    ret i16 %conv
  }
  
  declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
  
  declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)

Running this with `opt -passes='attributor-light,function(dse)' rep.ll` causes the `store i16 42` to be removed.

This might not be an issue with attributor-light per se, but we just thought we'd report it here since the pass was added recently.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D152081



More information about the llvm-commits mailing list