mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
02346714f3
Check the address space first before searching for the object definition to save compile time. As an added bonus, this will now treat casts to constant addrspace as constant. We also seemed to be missing targeted tests for this, so add a few missing other cases too.
113 lines
3.2 KiB
LLVM
113 lines
3.2 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -mtriple=amdgcn-amd-amdhsa -S -amdgpu-aa-wrapper -amdgpu-aa -instcombine -o - %s | FileCheck %s
|
|
;
|
|
; Test AA::pointsToConstantMemory implementation. These should mostly
|
|
; turn out to be stores to constant memory, and will therefore be
|
|
; deleted as UB.
|
|
|
|
define void @test_constant_addrspace(i8 addrspace(4)* %p) {
|
|
; CHECK-LABEL: @test_constant_addrspace(
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
store i8 0, i8 addrspace(4)* %p
|
|
ret void
|
|
}
|
|
|
|
define void @test_constant32bit_addrspace(i8 addrspace(6)* %p) {
|
|
; CHECK-LABEL: @test_constant32bit_addrspace(
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
store i8 0, i8 addrspace(6)* %p
|
|
ret void
|
|
}
|
|
|
|
define void @test_cast_generic_from_constant_addrspace(i8 addrspace(4)* %p) {
|
|
; CHECK-LABEL: @test_cast_generic_from_constant_addrspace(
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
%cast = addrspacecast i8 addrspace(4)* %p to i8*
|
|
store i8 0, i8* %cast
|
|
ret void
|
|
}
|
|
|
|
define void @test_cast_generic_from_constant32bit_addrspace(i8 addrspace(6)* %p) {
|
|
; CHECK-LABEL: @test_cast_generic_from_constant32bit_addrspace(
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
%cast = addrspacecast i8 addrspace(6)* %p to i8*
|
|
store i8 0, i8* %cast
|
|
ret void
|
|
}
|
|
|
|
define void @test_cast_generic_to_constant_addrspace(i8* %p) {
|
|
; CHECK-LABEL: @test_cast_generic_to_constant_addrspace(
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
%cast = addrspacecast i8* %p to i8 addrspace(4)*
|
|
store i8 0, i8 addrspace(4)* %cast
|
|
ret void
|
|
}
|
|
|
|
define void @test_cast_generic_to_constant32bit_addrspace(i8* %p) {
|
|
; CHECK-LABEL: @test_cast_generic_to_constant32bit_addrspace(
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
%cast = addrspacecast i8* %p to i8 addrspace(6)*
|
|
store i8 0, i8 addrspace(6)* %cast
|
|
ret void
|
|
}
|
|
|
|
define amdgpu_kernel void @noalias_readnone_global_kernarg(i32 addrspace(1)* noalias readnone %arg) {
|
|
; CHECK-LABEL: @noalias_readnone_global_kernarg(
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
store i32 0, i32 addrspace(1)* %arg
|
|
ret void
|
|
}
|
|
|
|
define amdgpu_kernel void @noalias_readonly_global_kernarg(i32 addrspace(1)* noalias readonly %arg) {
|
|
; CHECK-LABEL: @noalias_readonly_global_kernarg(
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
store i32 0, i32 addrspace(1)* %arg
|
|
ret void
|
|
}
|
|
|
|
define amdgpu_kernel void @readnone_global_kernarg(i32 addrspace(1)* readnone %arg) {
|
|
; CHECK-LABEL: @readnone_global_kernarg(
|
|
; CHECK-NEXT: store i32 0, i32 addrspace(1)* [[ARG:%.*]], align 4
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
store i32 0, i32 addrspace(1)* %arg
|
|
ret void
|
|
}
|
|
|
|
define amdgpu_kernel void @readonly_global_kernarg(i32 addrspace(1)* readonly %arg) {
|
|
; CHECK-LABEL: @readonly_global_kernarg(
|
|
; CHECK-NEXT: store i32 0, i32 addrspace(1)* [[ARG:%.*]], align 4
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
store i32 0, i32 addrspace(1)* %arg
|
|
ret void
|
|
}
|
|
|
|
@global_as_constant = external addrspace(1) constant i32, align 4
|
|
|
|
define amdgpu_kernel void @constant_gv_global_as() {
|
|
; CHECK-LABEL: @constant_gv_global_as(
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
store i32 0, i32 addrspace(1)* @global_as_constant
|
|
ret void
|
|
}
|
|
|
|
@global_nonconstant_constant_as = external addrspace(4) global i32, align 4
|
|
|
|
define amdgpu_kernel void @nonconst_gv_constant_as() {
|
|
; CHECK-LABEL: @nonconst_gv_constant_as(
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
store i32 0, i32 addrspace(4)* @global_nonconstant_constant_as
|
|
ret void
|
|
}
|