210 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdpal -mcpu=tahiti < %s | FileCheck -check-prefixes=CHECK,SDAG %s3; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdpal -mcpu=tahiti < %s | FileCheck -check-prefixes=CHECK,GISEL %s4 5define ptr @global_to_flat_addrspacecast(ptr addrspace(1) %ptr) {6; CHECK-LABEL: global_to_flat_addrspacecast:7; CHECK: ; %bb.0:8; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9; CHECK-NEXT: s_setpc_b64 s[30:31]10 %stof = addrspacecast ptr addrspace(1) %ptr to ptr11 ret ptr %stof12}13 14define ptr addrspace(1) @flat_to_gobal_addrspacecast(ptr %ptr) {15; CHECK-LABEL: flat_to_gobal_addrspacecast:16; CHECK: ; %bb.0:17; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)18; CHECK-NEXT: s_setpc_b64 s[30:31]19 %stof = addrspacecast ptr %ptr to ptr addrspace(1)20 ret ptr addrspace(1) %stof21}22 23define ptr @group_to_flat_addrspacecast(ptr addrspace(3) %ptr) {24; CHECK-LABEL: group_to_flat_addrspacecast:25; CHECK: ; %bb.0:26; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)27; CHECK-NEXT: s_mov_b64 s[4:5], 0xc428; CHECK-NEXT: s_load_dword s4, s[4:5], 0x029; CHECK-NEXT: v_cmp_ne_u32_e32 vcc, -1, v030; CHECK-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc31; CHECK-NEXT: s_waitcnt lgkmcnt(0)32; CHECK-NEXT: v_mov_b32_e32 v1, s433; CHECK-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc34; CHECK-NEXT: s_setpc_b64 s[30:31]35 %stof = addrspacecast ptr addrspace(3) %ptr to ptr36 ret ptr %stof37}38 39define ptr addrspace(3) @flat_to_group_addrspacecast(ptr %ptr) {40; CHECK-LABEL: flat_to_group_addrspacecast:41; CHECK: ; %bb.0:42; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)43; CHECK-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1]44; CHECK-NEXT: v_cndmask_b32_e32 v0, -1, v0, vcc45; CHECK-NEXT: s_setpc_b64 s[30:31]46 %stof = addrspacecast ptr %ptr to ptr addrspace(3)47 ret ptr addrspace(3) %stof48}49 50define ptr @private_to_flat_addrspacecast(ptr addrspace(5) %ptr) {51; CHECK-LABEL: private_to_flat_addrspacecast:52; CHECK: ; %bb.0:53; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)54; CHECK-NEXT: s_mov_b64 s[4:5], 0xc055; CHECK-NEXT: s_load_dword s4, s[4:5], 0x056; CHECK-NEXT: v_cmp_ne_u32_e32 vcc, -1, v057; CHECK-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc58; CHECK-NEXT: s_waitcnt lgkmcnt(0)59; CHECK-NEXT: v_mov_b32_e32 v1, s460; CHECK-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc61; CHECK-NEXT: s_setpc_b64 s[30:31]62 %stof = addrspacecast ptr addrspace(5) %ptr to ptr63 ret ptr %stof64}65 66define ptr addrspace(5) @flat_to_private_addrspacecast(ptr %ptr) {67; CHECK-LABEL: flat_to_private_addrspacecast:68; CHECK: ; %bb.0:69; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)70; CHECK-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1]71; CHECK-NEXT: v_cndmask_b32_e32 v0, -1, v0, vcc72; CHECK-NEXT: s_setpc_b64 s[30:31]73 %stof = addrspacecast ptr %ptr to ptr addrspace(5)74 ret ptr addrspace(5) %stof75}76 77define ptr addrspace(6) @constant_to_constant32_addrspacecast(ptr addrspace(4) %ptr, i32 %offset) {78; CHECK-LABEL: constant_to_constant32_addrspacecast:79; CHECK: ; %bb.0:80; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)81; CHECK-NEXT: v_add_i32_e32 v0, vcc, v0, v282; CHECK-NEXT: s_setpc_b64 s[30:31]83 %addrspacecast = addrspacecast ptr addrspace(4) %ptr to ptr addrspace(6)84 %gep = getelementptr i8, ptr addrspace(6) %addrspacecast, i32 %offset85 ret ptr addrspace(6) %gep86}87 88define ptr addrspace(6) @global_to_constant32_addrspacecast(ptr addrspace(1) %ptr, i32 %offset) {89; CHECK-LABEL: global_to_constant32_addrspacecast:90; CHECK: ; %bb.0:91; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)92; CHECK-NEXT: v_add_i32_e32 v0, vcc, v0, v293; CHECK-NEXT: s_setpc_b64 s[30:31]94 %addrspacecast = addrspacecast ptr addrspace(1) %ptr to ptr addrspace(6)95 %gep = getelementptr i8, ptr addrspace(6) %addrspacecast, i32 %offset96 ret ptr addrspace(6) %gep97}98 99define ptr @constant32bit_to_flat_addrspacecast_0(ptr addrspace(6) %ptr) {100; CHECK-LABEL: constant32bit_to_flat_addrspacecast_0:101; CHECK: ; %bb.0:102; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; CHECK-NEXT: v_mov_b32_e32 v1, 0104; CHECK-NEXT: s_setpc_b64 s[30:31]105 %stof = addrspacecast ptr addrspace(6) %ptr to ptr106 ret ptr %stof107}108 109define ptr @constant32bit_to_flat_addrspacecast_1(ptr addrspace(6) %ptr) #0 {110; CHECK-LABEL: constant32bit_to_flat_addrspacecast_1:111; CHECK: ; %bb.0:112; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)113; CHECK-NEXT: v_mov_b32_e32 v1, 0xffff8000114; CHECK-NEXT: s_setpc_b64 s[30:31]115 %stof = addrspacecast ptr addrspace(6) %ptr to ptr116 ret ptr %stof117}118 119define ptr @constant32bit_to_flat_addrspacecast_null() {120; CHECK-LABEL: constant32bit_to_flat_addrspacecast_null:121; CHECK: ; %bb.0:122; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)123; CHECK-NEXT: v_mov_b32_e32 v0, 0124; CHECK-NEXT: v_mov_b32_e32 v1, 0125; CHECK-NEXT: s_setpc_b64 s[30:31]126 %stof = addrspacecast ptr addrspace(6) null to ptr127 ret ptr %stof128}129 130define ptr @constant32bit_to_flat_addrspacecast_undef() #0 {131; SDAG-LABEL: constant32bit_to_flat_addrspacecast_undef:132; SDAG: ; %bb.0:133; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)134; SDAG-NEXT: v_mov_b32_e32 v1, 0135; SDAG-NEXT: s_setpc_b64 s[30:31]136;137; GISEL-LABEL: constant32bit_to_flat_addrspacecast_undef:138; GISEL: ; %bb.0:139; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)140; GISEL-NEXT: s_setpc_b64 s[30:31]141 %stof = addrspacecast ptr addrspace(6) undef to ptr142 ret ptr %stof143}144 145define ptr @constant32bit_to_flat_addrspacecast_poison() #0 {146; SDAG-LABEL: constant32bit_to_flat_addrspacecast_poison:147; SDAG: ; %bb.0:148; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)149; SDAG-NEXT: v_mov_b32_e32 v1, 0150; SDAG-NEXT: s_setpc_b64 s[30:31]151;152; GISEL-LABEL: constant32bit_to_flat_addrspacecast_poison:153; GISEL: ; %bb.0:154; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)155; GISEL-NEXT: s_setpc_b64 s[30:31]156 %stof = addrspacecast ptr addrspace(6) poison to ptr157 ret ptr %stof158}159 160define ptr @constant32bit_to_flat_addrspacecast_constant() #0 {161; CHECK-LABEL: constant32bit_to_flat_addrspacecast_constant:162; CHECK: ; %bb.0:163; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)164; CHECK-NEXT: v_mov_b32_e32 v0, 0x3039165; CHECK-NEXT: v_mov_b32_e32 v1, 0xffff8000166; CHECK-NEXT: s_setpc_b64 s[30:31]167 %stof = addrspacecast ptr addrspace(6) inttoptr (i32 12345 to ptr addrspace(6)) to ptr168 ret ptr %stof169}170 171define ptr addrspace(1) @addrspacecast_flat_null_to_global() {172; CHECK-LABEL: addrspacecast_flat_null_to_global:173; CHECK: ; %bb.0:174; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)175; CHECK-NEXT: v_mov_b32_e32 v0, 0176; CHECK-NEXT: v_mov_b32_e32 v1, 0177; CHECK-NEXT: s_setpc_b64 s[30:31]178 ret ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1))179}180 181define ptr addrspace(3) @addrspacecast_flat_null_to_group() {182; CHECK-LABEL: addrspacecast_flat_null_to_group:183; CHECK: ; %bb.0:184; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)185; CHECK-NEXT: v_mov_b32_e32 v0, -1186; CHECK-NEXT: s_setpc_b64 s[30:31]187 ret ptr addrspace(3) addrspacecast (ptr null to ptr addrspace(3))188}189 190define ptr addrspace(5) @addrspacecast_flat_null_to_private() {191; CHECK-LABEL: addrspacecast_flat_null_to_private:192; CHECK: ; %bb.0:193; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)194; CHECK-NEXT: v_mov_b32_e32 v0, -1195; CHECK-NEXT: s_setpc_b64 s[30:31]196 ret ptr addrspace(5) addrspacecast (ptr null to ptr addrspace(5))197}198 199define ptr addrspace(6) @addrspacecast_flat_null_to_constant32bit() {200; CHECK-LABEL: addrspacecast_flat_null_to_constant32bit:201; CHECK: ; %bb.0:202; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)203; CHECK-NEXT: v_mov_b32_e32 v0, 0204; CHECK-NEXT: s_setpc_b64 s[30:31]205 ret ptr addrspace(6) addrspacecast (ptr null to ptr addrspace(6))206}207 208attributes #0 = { "amdgpu-32bit-address-high-bits"="0xffff8000" }209 210