1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00
llvm-mirror/test/CodeGen/AMDGPU/aa-points-to-constant-memory.ll
Matt Arsenault 02346714f3 AMDGPU: Skip GetUnderlyingObject check in pointsToConstantMemory
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.
2020-05-09 16:00:08 -04:00

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
}