This PR extends isSafeToCastConstAddrSpace to treat ConstantAggregateZero like ConstantPointerNull. Tests shows an extra addrspacecast instruction is removed and icmp pointer vector operand's address space is now inferred. This change is motivated by inspecting the test in commit f7629f5945f6.
45 lines
2.4 KiB
LLVM
45 lines
2.4 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
|
|
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=infer-address-spaces %s | FileCheck %s
|
|
|
|
define <8 x i1> @load_vector_of_flat_ptr_from_constant(ptr addrspace(4) %ptr) {
|
|
; CHECK-LABEL: define <8 x i1> @load_vector_of_flat_ptr_from_constant(
|
|
; CHECK-SAME: ptr addrspace(4) [[PTR:%.*]]) {
|
|
; CHECK-NEXT: [[LD:%.*]] = load <8 x ptr>, ptr addrspace(4) [[PTR]], align 128
|
|
; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast <8 x ptr> [[LD]] to <8 x ptr addrspace(1)>
|
|
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <8 x ptr addrspace(1)> [[TMP1]], <ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1))>
|
|
; CHECK-NEXT: ret <8 x i1> [[CMP]]
|
|
;
|
|
%ld = load <8 x ptr>, ptr addrspace(4) %ptr, align 128
|
|
%cmp = icmp eq <8 x ptr> %ld, zeroinitializer
|
|
ret <8 x i1> %cmp
|
|
}
|
|
|
|
define <8 x i1> @load_vector_of_flat_ptr_from_global(ptr addrspace(1) %ptr) {
|
|
; CHECK-LABEL: define <8 x i1> @load_vector_of_flat_ptr_from_global(
|
|
; CHECK-SAME: ptr addrspace(1) [[PTR:%.*]]) {
|
|
; CHECK-NEXT: [[LD:%.*]] = load <8 x ptr>, ptr addrspace(1) [[PTR]], align 128
|
|
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <8 x ptr> [[LD]], zeroinitializer
|
|
; CHECK-NEXT: ret <8 x i1> [[CMP]]
|
|
;
|
|
%ld = load <8 x ptr>, ptr addrspace(1) %ptr, align 128
|
|
%cmp = icmp eq <8 x ptr> %ld, zeroinitializer
|
|
ret <8 x i1> %cmp
|
|
}
|
|
|
|
define <8 x i1> @load_vector_of_flat_ptr_from_global_invariant(ptr addrspace(1) %ptr) {
|
|
; CHECK-LABEL: define <8 x i1> @load_vector_of_flat_ptr_from_global_invariant(
|
|
; CHECK-SAME: ptr addrspace(1) [[PTR:%.*]]) {
|
|
; CHECK-NEXT: [[LD:%.*]] = load <8 x ptr>, ptr addrspace(1) [[PTR]], align 128, !invariant [[META0:![0-9]+]]
|
|
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <8 x ptr> [[LD]], zeroinitializer
|
|
; CHECK-NEXT: ret <8 x i1> [[CMP]]
|
|
;
|
|
%ld = load <8 x ptr>, ptr addrspace(1) %ptr, align 128, !invariant !0
|
|
%cmp = icmp eq <8 x ptr> %ld, zeroinitializer
|
|
ret <8 x i1> %cmp
|
|
}
|
|
|
|
!0 = !{}
|
|
;.
|
|
; CHECK: [[META0]] = !{}
|
|
;.
|