1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -codegenprepare -mtriple=amdgcn-unknown-unknown -mcpu=bonaire < %s | FileCheck -check-prefix=OPT -check-prefix=OPT-CI %s 2*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -codegenprepare -mtriple=amdgcn-unknown-unknown -mcpu=tonga < %s | FileCheck -check-prefix=OPT -check-prefix=OPT-VI %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=bonaire -mattr=-promote-alloca < %s | FileCheck -check-prefix=GCN -check-prefix=CI %s 4*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-promote-alloca < %s | FileCheck -check-prefix=GCN -check-prefix=VI %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @test_no_sink_flat_small_offset_i32( 7*9880d681SAndroid Build Coastguard Worker; OPT: getelementptr i32, i32 addrspace(4)* %in 8*9880d681SAndroid Build Coastguard Worker; OPT: br i1 9*9880d681SAndroid Build Coastguard Worker; OPT-NOT: ptrtoint 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}test_no_sink_flat_small_offset_i32: 12*9880d681SAndroid Build Coastguard Worker; GCN: flat_load_dword 13*9880d681SAndroid Build Coastguard Worker; GCN: {{^}}BB0_2: 14*9880d681SAndroid Build Coastguard Workerdefine void @test_no_sink_flat_small_offset_i32(i32 addrspace(4)* %out, i32 addrspace(4)* %in, i32 %cond) { 15*9880d681SAndroid Build Coastguard Workerentry: 16*9880d681SAndroid Build Coastguard Worker %out.gep = getelementptr i32, i32 addrspace(4)* %out, i64 999999 17*9880d681SAndroid Build Coastguard Worker %in.gep = getelementptr i32, i32 addrspace(4)* %in, i64 7 18*9880d681SAndroid Build Coastguard Worker %tmp0 = icmp eq i32 %cond, 0 19*9880d681SAndroid Build Coastguard Worker br i1 %tmp0, label %endif, label %if 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerif: 22*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32 addrspace(4)* %in.gep 23*9880d681SAndroid Build Coastguard Worker br label %endif 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerendif: 26*9880d681SAndroid Build Coastguard Worker %x = phi i32 [ %tmp1, %if ], [ 0, %entry ] 27*9880d681SAndroid Build Coastguard Worker store i32 %x, i32 addrspace(4)* %out.gep 28*9880d681SAndroid Build Coastguard Worker br label %done 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdone: 31*9880d681SAndroid Build Coastguard Worker ret void 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @test_sink_noop_addrspacecast_flat_to_global_i32( 35*9880d681SAndroid Build Coastguard Worker; OPT: getelementptr i32, i32 addrspace(4)* %out, 36*9880d681SAndroid Build Coastguard Worker; OPT-CI-NOT: getelementptr 37*9880d681SAndroid Build Coastguard Worker; OPT: br i1 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; OPT-CI: ptrtoint 40*9880d681SAndroid Build Coastguard Worker; OPT-CI: add 41*9880d681SAndroid Build Coastguard Worker; OPT-CI: inttoptr 42*9880d681SAndroid Build Coastguard Worker; OPT: br label 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}test_sink_noop_addrspacecast_flat_to_global_i32: 45*9880d681SAndroid Build Coastguard Worker; CI: buffer_load_dword {{v[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, 0 offset:28 46*9880d681SAndroid Build Coastguard Workerdefine void @test_sink_noop_addrspacecast_flat_to_global_i32(i32 addrspace(4)* %out, i32 addrspace(4)* %in, i32 %cond) { 47*9880d681SAndroid Build Coastguard Workerentry: 48*9880d681SAndroid Build Coastguard Worker %out.gep = getelementptr i32, i32 addrspace(4)* %out, i64 999999 49*9880d681SAndroid Build Coastguard Worker %in.gep = getelementptr i32, i32 addrspace(4)* %in, i64 7 50*9880d681SAndroid Build Coastguard Worker %cast = addrspacecast i32 addrspace(4)* %in.gep to i32 addrspace(1)* 51*9880d681SAndroid Build Coastguard Worker %tmp0 = icmp eq i32 %cond, 0 52*9880d681SAndroid Build Coastguard Worker br i1 %tmp0, label %endif, label %if 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerif: 55*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32 addrspace(1)* %cast 56*9880d681SAndroid Build Coastguard Worker br label %endif 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerendif: 59*9880d681SAndroid Build Coastguard Worker %x = phi i32 [ %tmp1, %if ], [ 0, %entry ] 60*9880d681SAndroid Build Coastguard Worker store i32 %x, i32 addrspace(4)* %out.gep 61*9880d681SAndroid Build Coastguard Worker br label %done 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdone: 64*9880d681SAndroid Build Coastguard Worker ret void 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @test_sink_noop_addrspacecast_flat_to_constant_i32( 68*9880d681SAndroid Build Coastguard Worker; OPT: getelementptr i32, i32 addrspace(4)* %out, 69*9880d681SAndroid Build Coastguard Worker; OPT-CI-NOT: getelementptr 70*9880d681SAndroid Build Coastguard Worker; OPT: br i1 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker; OPT-CI: ptrtoint 73*9880d681SAndroid Build Coastguard Worker; OPT-CI: add 74*9880d681SAndroid Build Coastguard Worker; OPT-CI: inttoptr 75*9880d681SAndroid Build Coastguard Worker; OPT: br label 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}test_sink_noop_addrspacecast_flat_to_constant_i32: 78*9880d681SAndroid Build Coastguard Worker; CI: s_load_dword {{s[0-9]+}}, s{{\[[0-9]+:[0-9]+\]}}, 0xd 79*9880d681SAndroid Build Coastguard Workerdefine void @test_sink_noop_addrspacecast_flat_to_constant_i32(i32 addrspace(4)* %out, i32 addrspace(4)* %in, i32 %cond) { 80*9880d681SAndroid Build Coastguard Workerentry: 81*9880d681SAndroid Build Coastguard Worker %out.gep = getelementptr i32, i32 addrspace(4)* %out, i64 999999 82*9880d681SAndroid Build Coastguard Worker %in.gep = getelementptr i32, i32 addrspace(4)* %in, i64 7 83*9880d681SAndroid Build Coastguard Worker %cast = addrspacecast i32 addrspace(4)* %in.gep to i32 addrspace(2)* 84*9880d681SAndroid Build Coastguard Worker %tmp0 = icmp eq i32 %cond, 0 85*9880d681SAndroid Build Coastguard Worker br i1 %tmp0, label %endif, label %if 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerif: 88*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32 addrspace(2)* %cast 89*9880d681SAndroid Build Coastguard Worker br label %endif 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerendif: 92*9880d681SAndroid Build Coastguard Worker %x = phi i32 [ %tmp1, %if ], [ 0, %entry ] 93*9880d681SAndroid Build Coastguard Worker store i32 %x, i32 addrspace(4)* %out.gep 94*9880d681SAndroid Build Coastguard Worker br label %done 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Workerdone: 97*9880d681SAndroid Build Coastguard Worker ret void 98*9880d681SAndroid Build Coastguard Worker} 99