|
| 1 | +; This file is a part of Julia. License is MIT: https://julialang.org/license |
| 2 | + |
| 3 | +; RUN: opt -enable-new-pm=0 --opaque-pointers=0 -load libjulia-codegen%shlibext -AllocOpt -S %s | FileCheck %s --check-prefixes=CHECK,TYPED |
| 4 | +; RUN: opt -enable-new-pm=1 --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='function(AllocOpt)' -S %s | FileCheck %s --check-prefixes=CHECK,TYPED |
| 5 | + |
| 6 | +; RUN: opt -enable-new-pm=0 --opaque-pointers=1 -load libjulia-codegen%shlibext -AllocOpt -S %s | FileCheck %s --check-prefixes=CHECK,OPAQUE |
| 7 | +; RUN: opt -enable-new-pm=1 --opaque-pointers=1 --load-pass-plugin=libjulia-codegen%shlibext -passes='function(AllocOpt)' -S %s | FileCheck %s --check-prefixes=CHECK,OPAQUE |
| 8 | + |
| 9 | +target triple = "amdgcn-amd-amdhsa" |
| 10 | +target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7-ni:10:11:12:13" |
| 11 | + |
| 12 | +@tag = external addrspace(10) global {} |
| 13 | + |
| 14 | +declare {}*** @julia.ptls_states() |
| 15 | +declare {}*** @julia.get_pgcstack() |
| 16 | +declare noalias {} addrspace(10)* @julia.gc_alloc_obj(i8*, i64, {} addrspace(10)*) |
| 17 | +declare {}* @julia.pointer_from_objref({} addrspace(11)*) |
| 18 | + |
| 19 | +; Test that non-0 addrspace allocas are properly emitted and handled |
| 20 | + |
| 21 | +; CHECK-LABEL: @non_zero_addrspace |
| 22 | +; CHECK: %1 = alloca i32, align 8, addrspace(5) |
| 23 | + |
| 24 | +; TYPED: %2 = bitcast i32 addrspace(5)* %1 to i8 addrspace(5)* |
| 25 | +; TYPED: %3 = bitcast i8 addrspace(5)* %2 to {} addrspace(5)* |
| 26 | +; TYPED: %var1 = addrspacecast {} addrspace(5)* %3 to {} addrspace(10)* |
| 27 | +; TYPED: call void @llvm.lifetime.start.p5i8(i64 4, i8 addrspace(5)* %2) |
| 28 | + |
| 29 | +; OPAQUE: %var1 = addrspacecast ptr addrspace(5) %1 to ptr addrspace(10) |
| 30 | +; OPAQUE: call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) %1) |
| 31 | + |
| 32 | +; CHECK: ret void |
| 33 | +define void @non_zero_addrspace() { |
| 34 | + %pgcstack = call {}*** @julia.get_pgcstack() |
| 35 | + %ptls = call {}*** @julia.ptls_states() |
| 36 | + %ptls_i8 = bitcast {}*** %ptls to i8* |
| 37 | + %var1 = call {} addrspace(10)* @julia.gc_alloc_obj(i8* %ptls_i8, i64 4, {} addrspace(10)* @tag) |
| 38 | + %var2 = addrspacecast {} addrspace(10)* %var1 to {} addrspace(11)* |
| 39 | + %var3 = call {}* @julia.pointer_from_objref({} addrspace(11)* %var2) |
| 40 | + ret void |
| 41 | +} |
| 42 | +; CHECK-LABEL: }{{$}} |
0 commit comments