1*9880d681SAndroid Build Coastguard Worker# RUN: llc -march=amdgcn -mcpu=SI -start-after postrapseudos -stop-after postrapseudos -o - %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker# This test verifies that the MIR parser can parse target index operands. 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker--- | 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker %struct.foo = type { float, [5 x i32] } 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker @float_gv = internal unnamed_addr addrspace(2) constant [5 x float] [float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00], align 4 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker define void @float(float addrspace(1)* %out, i32 %index) #0 { 11*9880d681SAndroid Build Coastguard Worker entry: 12*9880d681SAndroid Build Coastguard Worker %0 = getelementptr inbounds [5 x float], [5 x float] addrspace(2)* @float_gv, i32 0, i32 %index 13*9880d681SAndroid Build Coastguard Worker %1 = load float, float addrspace(2)* %0 14*9880d681SAndroid Build Coastguard Worker store float %1, float addrspace(1)* %out 15*9880d681SAndroid Build Coastguard Worker ret void 16*9880d681SAndroid Build Coastguard Worker } 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker define void @float2(float addrspace(1)* %out, i32 %index) #0 { 19*9880d681SAndroid Build Coastguard Worker entry: 20*9880d681SAndroid Build Coastguard Worker %0 = getelementptr inbounds [5 x float], [5 x float] addrspace(2)* @float_gv, i32 0, i32 %index 21*9880d681SAndroid Build Coastguard Worker %1 = load float, float addrspace(2)* %0 22*9880d681SAndroid Build Coastguard Worker store float %1, float addrspace(1)* %out 23*9880d681SAndroid Build Coastguard Worker ret void 24*9880d681SAndroid Build Coastguard Worker } 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker declare { i1, i64 } @llvm.SI.if(i1) 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker declare { i1, i64 } @llvm.SI.else(i64) 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker declare i64 @llvm.SI.break(i64) 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker declare i64 @llvm.SI.if.break(i1, i64) 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker declare i64 @llvm.SI.else.break(i64, i64) 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker declare i1 @llvm.SI.loop(i64) 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker declare void @llvm.SI.end.cf(i64) 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker attributes #0 = { "target-cpu"="SI" } 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker... 43*9880d681SAndroid Build Coastguard Worker--- 44*9880d681SAndroid Build Coastguard Workername: float 45*9880d681SAndroid Build Coastguard WorkertracksSubRegLiveness: true 46*9880d681SAndroid Build Coastguard Workerliveins: 47*9880d681SAndroid Build Coastguard Worker - { reg: '%sgpr0_sgpr1' } 48*9880d681SAndroid Build Coastguard WorkerframeInfo: 49*9880d681SAndroid Build Coastguard Worker maxAlignment: 8 50*9880d681SAndroid Build Coastguard Workerbody: | 51*9880d681SAndroid Build Coastguard Worker bb.0.entry: 52*9880d681SAndroid Build Coastguard Worker liveins: %sgpr0_sgpr1 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker %sgpr2_sgpr3 = S_GETPC_B64 55*9880d681SAndroid Build Coastguard Worker ; CHECK: %sgpr2 = S_ADD_U32 %sgpr2, target-index(amdgpu-constdata-start), implicit-def %scc, implicit-def %scc 56*9880d681SAndroid Build Coastguard Worker %sgpr2 = S_ADD_U32 %sgpr2, target-index(amdgpu-constdata-start), implicit-def %scc, implicit-def %scc 57*9880d681SAndroid Build Coastguard Worker %sgpr3 = S_ADDC_U32 %sgpr3, 0, implicit-def %scc, implicit %scc, implicit-def %scc, implicit %scc 58*9880d681SAndroid Build Coastguard Worker %sgpr4_sgpr5 = S_LSHR_B64 %sgpr2_sgpr3, 32, implicit-def dead %scc 59*9880d681SAndroid Build Coastguard Worker %sgpr6 = S_LOAD_DWORD_IMM %sgpr0_sgpr1, 11 60*9880d681SAndroid Build Coastguard Worker %sgpr7 = S_ASHR_I32 %sgpr6, 31, implicit-def dead %scc 61*9880d681SAndroid Build Coastguard Worker %sgpr6_sgpr7 = S_LSHL_B64 %sgpr6_sgpr7, 2, implicit-def dead %scc 62*9880d681SAndroid Build Coastguard Worker %sgpr2 = S_ADD_U32 %sgpr2, @float_gv, implicit-def %scc 63*9880d681SAndroid Build Coastguard Worker %sgpr3 = S_ADDC_U32 %sgpr4, 0, implicit-def dead %scc, implicit %scc 64*9880d681SAndroid Build Coastguard Worker %sgpr4 = S_ADD_U32 %sgpr2, %sgpr6, implicit-def %scc 65*9880d681SAndroid Build Coastguard Worker %sgpr5 = S_ADDC_U32 %sgpr3, %sgpr7, implicit-def dead %scc, implicit %scc 66*9880d681SAndroid Build Coastguard Worker %sgpr2 = S_LOAD_DWORD_IMM %sgpr4_sgpr5, 0 67*9880d681SAndroid Build Coastguard Worker %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM killed %sgpr0_sgpr1, 9 68*9880d681SAndroid Build Coastguard Worker %sgpr7 = S_MOV_B32 61440 69*9880d681SAndroid Build Coastguard Worker %sgpr6 = S_MOV_B32 -1 70*9880d681SAndroid Build Coastguard Worker %vgpr0 = V_MOV_B32_e32 killed %sgpr2, implicit %exec 71*9880d681SAndroid Build Coastguard Worker BUFFER_STORE_DWORD_OFFSET killed %vgpr0, %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec 72*9880d681SAndroid Build Coastguard Worker S_ENDPGM 73*9880d681SAndroid Build Coastguard Worker... 74*9880d681SAndroid Build Coastguard Worker--- 75*9880d681SAndroid Build Coastguard Workername: float2 76*9880d681SAndroid Build Coastguard WorkertracksSubRegLiveness: true 77*9880d681SAndroid Build Coastguard Workerliveins: 78*9880d681SAndroid Build Coastguard Worker - { reg: '%sgpr0_sgpr1' } 79*9880d681SAndroid Build Coastguard WorkerframeInfo: 80*9880d681SAndroid Build Coastguard Worker maxAlignment: 8 81*9880d681SAndroid Build Coastguard Workerbody: | 82*9880d681SAndroid Build Coastguard Worker bb.0.entry: 83*9880d681SAndroid Build Coastguard Worker liveins: %sgpr0_sgpr1 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker %sgpr2_sgpr3 = S_GETPC_B64 86*9880d681SAndroid Build Coastguard Worker ; CHECK: %sgpr2 = S_ADD_U32 %sgpr2, target-index(amdgpu-constdata-start) + 1, implicit-def %scc, implicit-def %scc 87*9880d681SAndroid Build Coastguard Worker %sgpr2 = S_ADD_U32 %sgpr2, target-index(amdgpu-constdata-start) + 1, implicit-def %scc, implicit-def %scc 88*9880d681SAndroid Build Coastguard Worker %sgpr3 = S_ADDC_U32 %sgpr3, 0, implicit-def %scc, implicit %scc, implicit-def %scc, implicit %scc 89*9880d681SAndroid Build Coastguard Worker %sgpr4_sgpr5 = S_LSHR_B64 %sgpr2_sgpr3, 32, implicit-def dead %scc 90*9880d681SAndroid Build Coastguard Worker %sgpr6 = S_LOAD_DWORD_IMM %sgpr0_sgpr1, 11 91*9880d681SAndroid Build Coastguard Worker %sgpr7 = S_ASHR_I32 %sgpr6, 31, implicit-def dead %scc 92*9880d681SAndroid Build Coastguard Worker %sgpr6_sgpr7 = S_LSHL_B64 %sgpr6_sgpr7, 2, implicit-def dead %scc 93*9880d681SAndroid Build Coastguard Worker %sgpr2 = S_ADD_U32 %sgpr2, @float_gv, implicit-def %scc 94*9880d681SAndroid Build Coastguard Worker %sgpr3 = S_ADDC_U32 %sgpr4, 0, implicit-def dead %scc, implicit %scc 95*9880d681SAndroid Build Coastguard Worker %sgpr4 = S_ADD_U32 %sgpr2, %sgpr6, implicit-def %scc 96*9880d681SAndroid Build Coastguard Worker %sgpr5 = S_ADDC_U32 %sgpr3, %sgpr7, implicit-def dead %scc, implicit %scc 97*9880d681SAndroid Build Coastguard Worker %sgpr2 = S_LOAD_DWORD_IMM %sgpr4_sgpr5, 0 98*9880d681SAndroid Build Coastguard Worker %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM killed %sgpr0_sgpr1, 9 99*9880d681SAndroid Build Coastguard Worker %sgpr7 = S_MOV_B32 61440 100*9880d681SAndroid Build Coastguard Worker %sgpr6 = S_MOV_B32 -1 101*9880d681SAndroid Build Coastguard Worker %vgpr0 = V_MOV_B32_e32 killed %sgpr2, implicit %exec 102*9880d681SAndroid Build Coastguard Worker BUFFER_STORE_DWORD_OFFSET killed %vgpr0, %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec 103*9880d681SAndroid Build Coastguard Worker S_ENDPGM 104*9880d681SAndroid Build Coastguard Worker... 105