168 lines · plain
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 62// REQUIRES: amdgpu-registered-target3// RUN: %clang_cc1 -cl-std=CL2.0 -triple amdgcn-unknown-unknown -target-cpu gfx1250 -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-GFX12504 5typedef int v2i __attribute__((ext_vector_type(2)));6typedef int v4i __attribute__((ext_vector_type(4)));7 8// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_cluster_load_async_to_lds_b8(9// CHECK-GFX1250-SAME: ptr addrspace(1) noundef readonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef writeonly captures(none) [[LADDR:%.*]], i32 noundef [[MASK:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {10// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]11// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.cluster.load.async.to.lds.b8(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0, i32 [[MASK]])12// CHECK-GFX1250-NEXT: ret void13//14void test_amdgcn_cluster_load_async_to_lds_b8(global char* gaddr, local char* laddr, int mask)15{16 __builtin_amdgcn_cluster_load_async_to_lds_b8(gaddr, laddr, 16, 0, mask);17}18 19// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_cluster_load_async_to_lds_b32(20// CHECK-GFX1250-SAME: ptr addrspace(1) noundef readonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef writeonly captures(none) [[LADDR:%.*]], i32 noundef [[MASK:%.*]]) local_unnamed_addr #[[ATTR0]] {21// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]22// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.cluster.load.async.to.lds.b32(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0, i32 [[MASK]])23// CHECK-GFX1250-NEXT: ret void24//25void test_amdgcn_cluster_load_async_to_lds_b32(global int* gaddr, local int* laddr, int mask)26{27 __builtin_amdgcn_cluster_load_async_to_lds_b32(gaddr, laddr, 16, 0, mask);28}29 30// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_cluster_load_async_to_lds_b64(31// CHECK-GFX1250-SAME: ptr addrspace(1) noundef readonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef writeonly captures(none) [[LADDR:%.*]], i32 noundef [[MASK:%.*]]) local_unnamed_addr #[[ATTR0]] {32// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]33// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.cluster.load.async.to.lds.b64(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0, i32 [[MASK]])34// CHECK-GFX1250-NEXT: ret void35//36void test_amdgcn_cluster_load_async_to_lds_b64(global v2i* gaddr, local v2i* laddr, int mask)37{38 __builtin_amdgcn_cluster_load_async_to_lds_b64(gaddr, laddr, 16, 0, mask);39}40 41// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_cluster_load_async_to_lds_b128(42// CHECK-GFX1250-SAME: ptr addrspace(1) noundef readonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef writeonly captures(none) [[LADDR:%.*]], i32 noundef [[MASK:%.*]]) local_unnamed_addr #[[ATTR0]] {43// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]44// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.cluster.load.async.to.lds.b128(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0, i32 [[MASK]])45// CHECK-GFX1250-NEXT: ret void46//47void test_amdgcn_cluster_load_async_to_lds_b128(global v4i* gaddr, local v4i* laddr, int mask)48{49 __builtin_amdgcn_cluster_load_async_to_lds_b128(gaddr, laddr, 16, 0, mask);50}51 52// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_global_load_async_to_lds_b8(53// CHECK-GFX1250-SAME: ptr addrspace(1) noundef readonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef writeonly captures(none) [[LADDR:%.*]]) local_unnamed_addr #[[ATTR0]] {54// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]55// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.global.load.async.to.lds.b8(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0)56// CHECK-GFX1250-NEXT: ret void57//58void test_amdgcn_global_load_async_to_lds_b8( global char* gaddr, local char* laddr)59{60 __builtin_amdgcn_global_load_async_to_lds_b8(gaddr, laddr, 16, 0);61}62 63// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_global_load_async_to_lds_b32(64// CHECK-GFX1250-SAME: ptr addrspace(1) noundef readonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef writeonly captures(none) [[LADDR:%.*]]) local_unnamed_addr #[[ATTR0]] {65// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]66// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.global.load.async.to.lds.b32(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0)67// CHECK-GFX1250-NEXT: ret void68//69void test_amdgcn_global_load_async_to_lds_b32(global int* gaddr, local int* laddr)70{71 __builtin_amdgcn_global_load_async_to_lds_b32(gaddr, laddr, 16, 0);72}73 74// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_global_load_async_to_lds_b64(75// CHECK-GFX1250-SAME: ptr addrspace(1) noundef readonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef writeonly captures(none) [[LADDR:%.*]]) local_unnamed_addr #[[ATTR0]] {76// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]77// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.global.load.async.to.lds.b64(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0)78// CHECK-GFX1250-NEXT: ret void79//80void test_amdgcn_global_load_async_to_lds_b64(global v2i* gaddr, local v2i* laddr)81{82 __builtin_amdgcn_global_load_async_to_lds_b64(gaddr, laddr, 16, 0);83}84 85// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_global_load_async_to_lds_b128(86// CHECK-GFX1250-SAME: ptr addrspace(1) noundef readonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef writeonly captures(none) [[LADDR:%.*]]) local_unnamed_addr #[[ATTR0]] {87// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]88// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.global.load.async.to.lds.b128(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0)89// CHECK-GFX1250-NEXT: ret void90//91void test_amdgcn_global_load_async_to_lds_b128( global v4i* gaddr, local v4i* laddr)92{93 __builtin_amdgcn_global_load_async_to_lds_b128(gaddr, laddr, 16, 0);94}95 96// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_global_store_async_from_lds_b8(97// CHECK-GFX1250-SAME: ptr addrspace(1) noundef writeonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef readonly captures(none) [[LADDR:%.*]]) local_unnamed_addr #[[ATTR0]] {98// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]99// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.global.store.async.from.lds.b8(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0)100// CHECK-GFX1250-NEXT: ret void101//102void test_amdgcn_global_store_async_from_lds_b8(global char* gaddr, local char* laddr)103{104 __builtin_amdgcn_global_store_async_from_lds_b8(gaddr, laddr, 16, 0);105}106 107// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_global_store_async_from_lds_b32(108// CHECK-GFX1250-SAME: ptr addrspace(1) noundef writeonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef readonly captures(none) [[LADDR:%.*]]) local_unnamed_addr #[[ATTR0]] {109// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]110// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.global.store.async.from.lds.b32(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0)111// CHECK-GFX1250-NEXT: ret void112//113void test_amdgcn_global_store_async_from_lds_b32(global int* gaddr, local int* laddr)114{115 __builtin_amdgcn_global_store_async_from_lds_b32(gaddr, laddr, 16, 0);116}117 118// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_global_store_async_from_lds_b64(119// CHECK-GFX1250-SAME: ptr addrspace(1) noundef writeonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef readonly captures(none) [[LADDR:%.*]]) local_unnamed_addr #[[ATTR0]] {120// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]121// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.global.store.async.from.lds.b64(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0)122// CHECK-GFX1250-NEXT: ret void123//124void test_amdgcn_global_store_async_from_lds_b64(global v2i* gaddr, local v2i* laddr)125{126 __builtin_amdgcn_global_store_async_from_lds_b64(gaddr, laddr, 16, 0);127}128 129// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_global_store_async_from_lds_b128(130// CHECK-GFX1250-SAME: ptr addrspace(1) noundef writeonly captures(none) [[GADDR:%.*]], ptr addrspace(3) noundef readonly captures(none) [[LADDR:%.*]]) local_unnamed_addr #[[ATTR0]] {131// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]132// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.global.store.async.from.lds.b128(ptr addrspace(1) [[GADDR]], ptr addrspace(3) [[LADDR]], i32 16, i32 0)133// CHECK-GFX1250-NEXT: ret void134//135void test_amdgcn_global_store_async_from_lds_b128(global v4i* gaddr, local v4i* laddr)136{137 __builtin_amdgcn_global_store_async_from_lds_b128(gaddr, laddr, 16, 0);138}139 140// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_ds_atomic_async_barrier_arrive_b64(141// CHECK-GFX1250-SAME: ptr addrspace(3) noundef [[ADDR:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] {142// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]143// CHECK-GFX1250-NEXT: tail call void @llvm.amdgcn.ds.atomic.async.barrier.arrive.b64(ptr addrspace(3) [[ADDR]])144// CHECK-GFX1250-NEXT: ret void145//146void test_amdgcn_ds_atomic_async_barrier_arrive_b64(local long* addr)147{148 __builtin_amdgcn_ds_atomic_async_barrier_arrive_b64(addr);149}150 151// CHECK-GFX1250-LABEL: define dso_local void @test_amdgcn_ds_atomic_barrier_arrive_rtn_b64(152// CHECK-GFX1250-SAME: ptr addrspace(3) noundef captures(none) [[ADDR:%.*]], i64 noundef [[DATA:%.*]], ptr noundef writeonly captures(none) initializes((0, 8)) [[OUT:%.*]]) local_unnamed_addr #[[ATTR4:[0-9]+]] {153// CHECK-GFX1250-NEXT: [[ENTRY:.*:]]154// CHECK-GFX1250-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.amdgcn.ds.atomic.barrier.arrive.rtn.b64(ptr addrspace(3) [[ADDR]], i64 [[DATA]])155// CHECK-GFX1250-NEXT: store i64 [[TMP0]], ptr [[OUT]], align 8, !tbaa [[LONG_TBAA8:![0-9]+]]156// CHECK-GFX1250-NEXT: ret void157//158void test_amdgcn_ds_atomic_barrier_arrive_rtn_b64(local long* addr, long data, long *out)159{160 *out = __builtin_amdgcn_ds_atomic_barrier_arrive_rtn_b64(addr, data);161}162//.163// CHECK-GFX1250: [[META6:![0-9]+]] = !{!"omnipotent char", [[META7:![0-9]+]], i64 0}164// CHECK-GFX1250: [[META7]] = !{!"Simple C/C++ TBAA"}165// CHECK-GFX1250: [[LONG_TBAA8]] = !{[[META9:![0-9]+]], [[META9]], i64 0}166// CHECK-GFX1250: [[META9]] = !{!"long", [[META6]], i64 0}167//.168