brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · 4596151 Raw
135 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: -p --check-globals2; RUN: opt -S -mtriple=amdgcn-- -amdgpu-lower-module-lds --amdgpu-lower-module-lds-strategy=module < %s | FileCheck %s3; RUN: opt -S -mtriple=amdgcn-- -passes=amdgpu-lower-module-lds --amdgpu-lower-module-lds-strategy=module < %s | FileCheck %s4 5@lds.1 = internal unnamed_addr addrspace(3) global [2 x i8] poison, align 16 7; CHECK: %llvm.amdgcn.kernel.k0.lds.t = type { [2 x i8] }8; CHECK: %llvm.amdgcn.kernel.k1.lds.t = type { [2 x i8] }9; CHECK: %llvm.amdgcn.kernel.k2.lds.t = type { i32 }10; CHECK: %llvm.amdgcn.kernel.k3.lds.t = type { [32 x i8] }11; CHECK: %llvm.amdgcn.kernel.k4.lds.t = type { [2 x i8] }12; CHECK: %llvm.amdgcn.kernel.k5.lds.t = type { [505 x i32] }13; CHECK: %llvm.amdgcn.kernel.k6.lds.t = type { [4 x i32] }14 15; Use constant from different kernels16;.17; CHECK: @llvm.amdgcn.kernel.k0.lds = internal addrspace(3) global %llvm.amdgcn.kernel.k0.lds.t poison, align 2, !absolute_symbol !018; CHECK: @llvm.amdgcn.kernel.k1.lds = internal addrspace(3) global %llvm.amdgcn.kernel.k1.lds.t poison, align 2, !absolute_symbol !019; CHECK: @llvm.amdgcn.kernel.k2.lds = internal addrspace(3) global %llvm.amdgcn.kernel.k2.lds.t poison, align 4, !absolute_symbol !020; CHECK: @llvm.amdgcn.kernel.k3.lds = internal addrspace(3) global %llvm.amdgcn.kernel.k3.lds.t poison, align 16, !absolute_symbol !021; CHECK: @llvm.amdgcn.kernel.k4.lds = internal addrspace(3) global %llvm.amdgcn.kernel.k4.lds.t poison, align 2, !absolute_symbol !022; CHECK: @llvm.amdgcn.kernel.k5.lds = internal addrspace(3) global %llvm.amdgcn.kernel.k5.lds.t poison, align 16, !absolute_symbol !023; CHECK: @llvm.amdgcn.kernel.k6.lds = internal addrspace(3) global %llvm.amdgcn.kernel.k6.lds.t poison, align 16, !absolute_symbol !024;.25define amdgpu_kernel void @k0(i64 %x) {26; CHECK-LABEL: @k0(27; CHECK-NEXT:    %1 = addrspacecast ptr addrspace(3) @llvm.amdgcn.kernel.k0.lds to ptr28; CHECK-NEXT:    %ptr = getelementptr inbounds i8, ptr %1, i64 %x29; CHECK-NEXT:    store i8 1, ptr %ptr, align 130; CHECK-NEXT:    ret void31;32  %ptr = getelementptr inbounds i8, ptr addrspacecast (ptr addrspace(3) @lds.1 to ptr), i64 %x33  store i8 1, ptr addrspace(0) %ptr, align 134  ret void35}36 37define amdgpu_kernel void @k1(i64 %x) {38; CHECK-LABEL: @k1(39; CHECK-NEXT:    %1 = addrspacecast ptr addrspace(3) @llvm.amdgcn.kernel.k1.lds to ptr40; CHECK-NEXT:    %ptr = getelementptr inbounds i8, ptr %1, i64 %x41; CHECK-NEXT:    store i8 1, ptr %ptr, align 142; CHECK-NEXT:    ret void43;44  %ptr = getelementptr inbounds i8, ptr addrspacecast (ptr addrspace(3) @lds.1 to ptr), i64 %x45  store i8 1, ptr addrspace(0) %ptr, align 146  ret void47}48 49@lds.2 = internal unnamed_addr addrspace(3) global i32 poison, align 450 51; Use constant twice from the same kernel52define amdgpu_kernel void @k2(i64 %x) {53; CHECK-LABEL: @k2(54; CHECK-NEXT:    store i8 1, ptr addrspace(3) @llvm.amdgcn.kernel.k2.lds, align 455; CHECK-NEXT:    store i8 2, ptr addrspace(3) @llvm.amdgcn.kernel.k2.lds, align 456; CHECK-NEXT:    ret void57;58  store i8 1, ptr addrspace(3) @lds.2, align 459  store i8 2, ptr addrspace(3) @lds.2, align 460  ret void61}62 63@lds.3 = internal unnamed_addr addrspace(3) global [32 x i8] poison, align 164 65; Use constant twice from the same kernel but a different other constant.66define amdgpu_kernel void @k3(i64 %x) {67; CHECK-LABEL: @k3(68; CHECK-NEXT:    %1 = getelementptr inbounds [32 x i8], ptr addrspace(3) @llvm.amdgcn.kernel.k3.lds, i32 0, i32 1669; CHECK-NEXT:    %ptr1 = addrspacecast ptr addrspace(3) %1 to ptr70; CHECK-NEXT:    store i64 1, ptr %ptr1, align 1671; CHECK-NEXT:    %2 = getelementptr inbounds [32 x i8], ptr addrspace(3) @llvm.amdgcn.kernel.k3.lds, i32 0, i32 2472; CHECK-NEXT:    %ptr2 = addrspacecast ptr addrspace(3) %2 to ptr73; CHECK-NEXT:    store i64 2, ptr %ptr2, align 874; CHECK-NEXT:    ret void75;76  %ptr1 = addrspacecast ptr addrspace(3) getelementptr inbounds ([32 x i8], ptr addrspace(3) @lds.3, i32 0, i32 16) to ptr77  store i64 1, ptr %ptr1, align 178  %ptr2 = addrspacecast ptr addrspace(3) getelementptr inbounds ([32 x i8], ptr addrspace(3) @lds.3, i32 0, i32 24) to ptr79  store i64 2, ptr %ptr2, align 180  ret void81}82 83; @lds.1 is used from constant expressions in different kernels.84define amdgpu_kernel void @k4(i64 %x) {85; CHECK-LABEL: @k4(86; CHECK-NEXT:    %1 = addrspacecast ptr addrspace(3) @llvm.amdgcn.kernel.k4.lds to ptr87; CHECK-NEXT:    %ptr = getelementptr inbounds i8, ptr %1, i64 %x88; CHECK-NEXT:    store i8 1, ptr %ptr, align 189; CHECK-NEXT:    ret void90;91  %ptr = getelementptr inbounds i8, ptr addrspacecast (ptr addrspace(3) @lds.1 to ptr), i64 %x92  store i8 1, ptr addrspace(0) %ptr, align 193  ret void94}95 96@lds.4 = internal unnamed_addr addrspace(3) global [505 x i32] poison, align 497 98; Multiple constexpr use in a same instruction.99define amdgpu_kernel void @k5() {100; CHECK-LABEL: @k5(101; CHECK-NEXT:    %1 = addrspacecast ptr addrspace(3) @llvm.amdgcn.kernel.k5.lds to ptr102; CHECK-NEXT:    call void poison(ptr %1, ptr %1)103; CHECK-NEXT:    ret void104;105  call void poison(ptr addrspacecast (ptr addrspace(3) @lds.4 to ptr), ptr addrspacecast (ptr addrspace(3) @lds.4 to ptr))106  ret void107}108 109@lds.5 = internal addrspace(3) global [4 x i32] poison, align 4110 111; Both the *value* and *pointer* operands of store instruction are constant expressions, and112; both of these constant expression paths use same lds - @lds.5. Hence both of these constant113; expression operands of store should be replaced by equivalent instruction sequences.114define amdgpu_kernel void @k6() {115; CHECK-LABEL: @k6(116; CHECK-NEXT:    %1 = getelementptr inbounds [4 x i32], ptr addrspace(3) @llvm.amdgcn.kernel.k6.lds, i32 0, i32 2117; CHECK-NEXT:    %2 = ptrtoint ptr addrspace(3) %1 to i32118; CHECK-NEXT:    %3 = getelementptr inbounds [4 x i32], ptr addrspace(3) @llvm.amdgcn.kernel.k6.lds, i32 0, i32 2119; CHECK-NEXT:    store i32 %2, ptr addrspace(3) %3, align 8120; CHECK-NEXT:    ret void121;122 123  store i32 ptrtoint (ptr addrspace(3) getelementptr inbounds ([4 x i32], ptr addrspace(3) @lds.5, i32 0, i32 2) to i32), ptr addrspace(3) getelementptr inbounds ([4 x i32], ptr addrspace(3) @lds.5, i32 0, i32 2)124  ret void125}126;.127; CHECK: attributes #0 = { "amdgpu-lds-size"="2" }128; CHECK: attributes #1 = { "amdgpu-lds-size"="4" }129; CHECK: attributes #2 = { "amdgpu-lds-size"="32" }130; CHECK: attributes #3 = { "amdgpu-lds-size"="2020" }131; CHECK: attributes #4 = { "amdgpu-lds-size"="16" }132;.133; CHECK: !0 = !{i32 0, i32 1}134;.135