
A constant value is unique in llvm context. InferAddressSpaces was replacing its users in other functions as well. This leads to unexpected behavior in our downstream use case after the pass. InferAddressSpaces is a function passe, so it shall not modify functions other than currently processed one. Co-authored-by: Abhinav Gaba <abhinav.gaba@intel.com> --------- Co-authored-by: Abhinav Gaba <abhinav.gaba@intel.com>
33 lines
1.1 KiB
LLVM
33 lines
1.1 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3
|
|
; RUN: opt -assume-default-is-flat-addrspace -S -passes=infer-address-spaces < %s 2>&1 | FileCheck %s
|
|
|
|
@g = addrspace(1) global i32 0, align 4
|
|
|
|
define ptr @f2() {
|
|
; CHECK-LABEL: define ptr @f2() {
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: [[X2:%.*]] = addrspacecast ptr addrspace(1) @g to ptr
|
|
; CHECK-NEXT: ret ptr [[X2]]
|
|
;
|
|
entry:
|
|
%x1 = addrspacecast ptr addrspacecast (ptr addrspace(1) @g to ptr) to ptr addrspace(1)
|
|
%x2 = addrspacecast ptr addrspace(1) %x1 to ptr
|
|
ret ptr %x2
|
|
}
|
|
|
|
define ptr @f3() #0 {
|
|
; CHECK-LABEL: define ptr @f3(
|
|
; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: [[X1:%.*]] = addrspacecast ptr addrspacecast (ptr addrspace(1) @g to ptr) to ptr addrspace(1)
|
|
; CHECK-NEXT: [[X2:%.*]] = addrspacecast ptr addrspace(1) [[X1]] to ptr
|
|
; CHECK-NEXT: ret ptr [[X2]]
|
|
;
|
|
entry:
|
|
%x1 = addrspacecast ptr addrspacecast (ptr addrspace(1) @g to ptr) to ptr addrspace(1)
|
|
%x2 = addrspacecast ptr addrspace(1) %x1 to ptr
|
|
ret ptr %x2
|
|
}
|
|
|
|
attributes #0 = { noinline optnone }
|