brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.6 KiB · a09e392 Raw
266 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt -S -mcpu=gfx900 -amdgpu-lower-buffer-fat-pointers < %s | FileCheck %s3; RUN: opt -S -mcpu=gfx900 -passes=amdgpu-lower-buffer-fat-pointers < %s | FileCheck %s4 5target triple = "amdgcn--"6 7@buf = external addrspace(8) global i88@flat = external global i89 10define ptr addrspace(7) @null() {11; CHECK-LABEL: define { ptr addrspace(8), i32 } @null12; CHECK-SAME: () #[[ATTR0:[0-9]+]] {13; CHECK-NEXT:    ret { ptr addrspace(8), i32 } zeroinitializer14;15  ret ptr addrspace(7) null16}17 18define <2 x ptr addrspace(7)> @null_vector() {19; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @null_vector20; CHECK-SAME: () #[[ATTR0]] {21; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } zeroinitializer22;23  ret <2 x ptr addrspace(7)> zeroinitializer24}25 26define ptr addrspace(7) @undef() {27; CHECK-LABEL: define { ptr addrspace(8), i32 } @undef28; CHECK-SAME: () #[[ATTR0]] {29; CHECK-NEXT:    ret { ptr addrspace(8), i32 } undef30;31  ret ptr addrspace(7) undef32}33 34define <2 x ptr addrspace(7)> @undef_vec() {35; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @undef_vec36; CHECK-SAME: () #[[ATTR0]] {37; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } undef38;39  ret <2 x ptr addrspace(7)> undef40}41 42define ptr addrspace(7) @poison() {43; CHECK-LABEL: define { ptr addrspace(8), i32 } @poison44; CHECK-SAME: () #[[ATTR0]] {45; CHECK-NEXT:    ret { ptr addrspace(8), i32 } poison46;47  ret ptr addrspace(7) poison48}49 50define <2 x ptr addrspace(7)> @poison_vec() {51; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @poison_vec52; CHECK-SAME: () #[[ATTR0]] {53; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } poison54;55  ret <2 x ptr addrspace(7)> poison56}57 58define ptr addrspace(7) @cast_global() {59; CHECK-LABEL: define { ptr addrspace(8), i32 } @cast_global60; CHECK-SAME: () #[[ATTR0]] {61; CHECK-NEXT:    ret { ptr addrspace(8), i32 } { ptr addrspace(8) @buf, i32 0 }62;63  ret ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7))64}65 66define ptr addrspace(7) @cast_null() {67; CHECK-LABEL: define { ptr addrspace(8), i32 } @cast_null68; CHECK-SAME: () #[[ATTR0]] {69; CHECK-NEXT:    ret { ptr addrspace(8), i32 } zeroinitializer70;71  ret ptr addrspace(7) addrspacecast (ptr addrspace(8) null to ptr addrspace(7))72}73 74define <2 x ptr addrspace(7)> @cast_vec() {75; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @cast_vec76; CHECK-SAME: () #[[ATTR0]] {77; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } { <2 x ptr addrspace(8)> <ptr addrspace(8) @buf, ptr addrspace(8) null>, <2 x i32> zeroinitializer }78;79  ret <2 x ptr addrspace(7)> addrspacecast (80  <2 x ptr addrspace(8)> <ptr addrspace(8) @buf, ptr addrspace(8) null>81  to <2 x ptr addrspace(7)>)82}83 84define ptr addrspace(7) @gep() {85; CHECK-LABEL: define { ptr addrspace(8), i32 } @gep86; CHECK-SAME: () #[[ATTR0]] {87; CHECK-NEXT:    ret { ptr addrspace(8), i32 } { ptr addrspace(8) @buf, i32 36 }88;89  ret ptr addrspace(7) getelementptr inbounds (90  [4 x i32],91  ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),92  i64 2, i32 1)93}94 95define <2 x ptr addrspace(7)> @gep_vector() {96; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @gep_vector97; CHECK-SAME: () #[[ATTR0]] {98; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } { <2 x ptr addrspace(8)> <ptr addrspace(8) @buf, ptr addrspace(8) null>, <2 x i32> <i32 12, i32 4> }99;100  ret <2 x ptr addrspace(7)> getelementptr (101  i32,102  <2 x ptr addrspace(7)>103  <ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),104  ptr addrspace(7) null>,105  <2 x i32> <i32 3, i32 1>)106}107 108define ptr @gep_of_p7() {109; CHECK-LABEL: define ptr @gep_of_p7110; CHECK-SAME: () #[[ATTR0]] {111; CHECK-NEXT:    ret ptr getelementptr inbounds (ptr addrspace(7), ptr @flat, i64 2)112;113  ret ptr getelementptr inbounds (ptr addrspace(7), ptr @flat, i64 2)114}115 116define ptr @gep_of_p7_vector() {117; CHECK-LABEL: define ptr @gep_of_p7_vector118; CHECK-SAME: () #[[ATTR0]] {119; CHECK-NEXT:    ret ptr getelementptr (<2 x ptr addrspace(7)>, ptr @flat, i64 2)120;121  ret ptr getelementptr (<2 x ptr addrspace(7)>, ptr @flat, i64 2)122}123 124define ptr @gep_of_p7_struct() {125; CHECK-LABEL: define ptr @gep_of_p7_struct126; CHECK-SAME: () #[[ATTR0]] {127; CHECK-NEXT:    ret ptr getelementptr ({ ptr addrspace(7), i32 }, ptr @flat, i64 2)128;129  ret ptr getelementptr ({ptr addrspace(7), i32}, ptr @flat, i64 2)130}131 132define ptr addrspace(7) @gep_p7_from_p7() {133; CHECK-LABEL: define { ptr addrspace(8), i32 } @gep_p7_from_p7134; CHECK-SAME: () #[[ATTR0]] {135; CHECK-NEXT:    ret { ptr addrspace(8), i32 } { ptr addrspace(8) @buf, i32 48 }136;137  ret ptr addrspace(7) getelementptr (ptr addrspace(7),138  ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),139  i64 2)140}141 142define i160 @ptrtoint() {143; CHECK-LABEL: define i160 @ptrtoint144; CHECK-SAME: () #[[ATTR0]] {145; CHECK-NEXT:    [[TMP1:%.*]] = shl nuw i160 ptrtoint (ptr addrspace(8) @buf to i160), 32146; CHECK-NEXT:    [[TMP2:%.*]] = or i160 [[TMP1]], 12147; CHECK-NEXT:    ret i160 [[TMP2]]148;149  ret i160 ptrtoint(150  ptr addrspace(7) getelementptr(151  i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),152  i32 3) to i160)153}154 155define i256 @ptrtoint_long() {156; CHECK-LABEL: define i256 @ptrtoint_long157; CHECK-SAME: () #[[ATTR0]] {158; CHECK-NEXT:    [[TMP1:%.*]] = shl nuw nsw i256 ptrtoint (ptr addrspace(8) @buf to i256), 32159; CHECK-NEXT:    [[TMP2:%.*]] = or i256 [[TMP1]], 12160; CHECK-NEXT:    ret i256 [[TMP2]]161;162  ret i256 ptrtoint(163  ptr addrspace(7) getelementptr(164  i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),165  i32 3) to i256)166}167 168define i64 @ptrtoint_short() {169; CHECK-LABEL: define i64 @ptrtoint_short170; CHECK-SAME: () #[[ATTR0]] {171; CHECK-NEXT:    [[TMP1:%.*]] = shl i64 ptrtoint (ptr addrspace(8) @buf to i64), 32172; CHECK-NEXT:    [[TMP2:%.*]] = or i64 [[TMP1]], 12173; CHECK-NEXT:    ret i64 [[TMP2]]174;175  ret i64 ptrtoint(176  ptr addrspace(7) getelementptr(177  i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),178  i32 3) to i64)179}180 181define i32 @ptrtoint_very_short() {182; CHECK-LABEL: define i32 @ptrtoint_very_short183; CHECK-SAME: () #[[ATTR0]] {184; CHECK-NEXT:    ret i32 12185;186  ret i32 ptrtoint(187  ptr addrspace(7) getelementptr(188  i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),189  i32 3) to i32)190}191 192 193define <2 x i160> @ptrtoint_vec() {194; CHECK-LABEL: define <2 x i160> @ptrtoint_vec195; CHECK-SAME: () #[[ATTR0]] {196; CHECK-NEXT:    ret <2 x i160> zeroinitializer197;198  ret <2 x i160> ptrtoint (<2 x ptr addrspace(7)> zeroinitializer to <2 x i160>)199}200 201define ptr addrspace(7) @inttoptr() {202; CHECK-LABEL: define { ptr addrspace(8), i32 } @inttoptr203; CHECK-SAME: () #[[ATTR0]] {204; CHECK-NEXT:    ret { ptr addrspace(8), i32 } zeroinitializer205;206  ret ptr addrspace(7) inttoptr (i160 0 to ptr addrspace(7))207}208 209define <2 x ptr addrspace(7)> @inttoptr_vec() {210; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @inttoptr_vec211; CHECK-SAME: () #[[ATTR0]] {212; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } { <2 x ptr addrspace(8)> zeroinitializer, <2 x i32> <i32 1, i32 2> }213;214  ret <2 x ptr addrspace(7)> inttoptr (<2 x i160> <i160 1, i160 2> to <2 x ptr addrspace(7)>)215}216 217define i32 @fancy_zero() {218; CHECK-LABEL: define i32 @fancy_zero219; CHECK-SAME: () #[[ATTR0]] {220; CHECK-NEXT:    ret i32 0221;222  ret i32 ptrtoint (223  ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7))224  to i32)225}226 227define i32 @load_null() {228; CHECK-LABEL: define i32 @load_null229; CHECK-SAME: () #[[ATTR0]] {230; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.amdgcn.raw.ptr.buffer.load.i32(ptr addrspace(8) align 4 null, i32 0, i32 0, i32 0)231; CHECK-NEXT:    ret i32 [[X]]232;233  %x = load i32, ptr addrspace(7) null, align 4234  ret i32 %x235}236 237define void @store_null() {238; CHECK-LABEL: define void @store_null239; CHECK-SAME: () #[[ATTR0]] {240; CHECK-NEXT:    call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 0, ptr addrspace(8) align 4 null, i32 0, i32 0, i32 0)241; CHECK-NEXT:    ret void242;243  store i32 0, ptr addrspace(7) null, align 4244  ret void245}246 247define i32 @load_poison() {248; CHECK-LABEL: define i32 @load_poison249; CHECK-SAME: () #[[ATTR0]] {250; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.amdgcn.raw.ptr.buffer.load.i32(ptr addrspace(8) align 4 poison, i32 poison, i32 0, i32 0)251; CHECK-NEXT:    ret i32 [[X]]252;253  %x = load i32, ptr addrspace(7) poison, align 4254  ret i32 %x255}256 257define void @store_poison() {258; CHECK-LABEL: define void @store_poison259; CHECK-SAME: () #[[ATTR0]] {260; CHECK-NEXT:    call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 0, ptr addrspace(8) align 4 poison, i32 poison, i32 0, i32 0)261; CHECK-NEXT:    ret void262;263  store i32 0, ptr addrspace(7) poison, align 4264  ret void265}266