[PATCH] D75964: [GC] Remove buggy untested optimization from statepoint lowering

Serguei Katkov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 10 20:50:51 PDT 2020


skatkov added a subscriber: test.
skatkov added a comment.

Here is a simple test showing the problem:

  ; RUN: llc < %s -verify-machineinstrs
  
  declare void @func()
  
  define i1 @test() gc "statepoint-example" {
  entry:
    %safepoint_token = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* @func, i32 0, i32 0, i32 0, i32 0, i32 addrspace(1)* null, i32 addrspace(1)* null)
    %base = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 7, i32 7)
    %derived = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 7, i32 8)
    %safepoint_token2 = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* @func, i32 0, i32 0, i32 0, i32 0, i32 addrspace(1)* %base, i32 addrspace(1)* %derived)
    br label %next
  
  next:
    %base_reloc = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token2,  i32 7, i32 7)
    %derived_reloc = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token2,  i32 7, i32 8)
    %cmp1 = icmp eq i32 addrspace(1)* %base_reloc, null
    %cmp2 = icmp eq i32 addrspace(1)* %derived_reloc, null
    %cmp = and i1 %cmp1, %cmp2
    ret i1 %cmp
  }
  
  declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
  declare i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token, i32, i32) #3


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D75964





More information about the llvm-commits mailing list