Fold gc.relocate of undef and null to undef and null respectively. Similar transform is currently done by instcombine, but there is no reason to not include it here as well.
45 lines
2.5 KiB
LLVM
45 lines
2.5 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -passes=instsimplify -S < %s | FileCheck %s
|
|
|
|
declare void @func()
|
|
|
|
define void @dead_relocate(ptr addrspace(1) %in) gc "statepoint-example" {
|
|
; CHECK-LABEL: @dead_relocate(
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: [[SAFEPOINT_TOKEN:%.*]] = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) [[IN:%.*]]) ]
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
entry:
|
|
%safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) %in)]
|
|
%a = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token, i32 0, i32 0)
|
|
ret void
|
|
}
|
|
|
|
define ptr addrspace(1) @relocate_undef() gc "statepoint-example" {
|
|
; CHECK-LABEL: @relocate_undef(
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: [[SAFEPOINT_TOKEN:%.*]] = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) undef) ]
|
|
; CHECK-NEXT: ret ptr addrspace(1) undef
|
|
;
|
|
entry:
|
|
%safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) undef)]
|
|
%a = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token, i32 0, i32 0)
|
|
ret ptr addrspace(1) %a
|
|
}
|
|
|
|
define ptr addrspace(1) @relocate_null() gc "statepoint-example" {
|
|
; CHECK-LABEL: @relocate_null(
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: [[SAFEPOINT_TOKEN:%.*]] = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) null) ]
|
|
; CHECK-NEXT: ret ptr addrspace(1) null
|
|
;
|
|
entry:
|
|
%safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) null)]
|
|
%a = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token, i32 0, i32 0)
|
|
ret ptr addrspace(1) %a
|
|
}
|
|
|
|
|
|
declare token @llvm.experimental.gc.statepoint.p0(i64, i32, ptr, i32, i32, ...)
|
|
declare ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token, i32, i32)
|