1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.x() readnone 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_sub_i32: 8*9880d681SAndroid Build Coastguard Worker; EG: SUB_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; SI: v_subrev_i32_e32 v{{[0-9]+, vcc, v[0-9]+, v[0-9]+}} 11*9880d681SAndroid Build Coastguard Workerdefine void @test_sub_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) { 12*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr i32, i32 addrspace(1)* %in, i32 1 13*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %in 14*9880d681SAndroid Build Coastguard Worker %b = load i32, i32 addrspace(1)* %b_ptr 15*9880d681SAndroid Build Coastguard Worker %result = sub i32 %a, %b 16*9880d681SAndroid Build Coastguard Worker store i32 %result, i32 addrspace(1)* %out 17*9880d681SAndroid Build Coastguard Worker ret void 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_sub_v2i32: 22*9880d681SAndroid Build Coastguard Worker; EG: SUB_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 23*9880d681SAndroid Build Coastguard Worker; EG: SUB_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker; SI: v_sub_i32_e32 v{{[0-9]+, vcc, v[0-9]+, v[0-9]+}} 26*9880d681SAndroid Build Coastguard Worker; SI: v_sub_i32_e32 v{{[0-9]+, vcc, v[0-9]+, v[0-9]+}} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine void @test_sub_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> addrspace(1)* %in) { 29*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <2 x i32>, <2 x i32> addrspace(1)* %in, i32 1 30*9880d681SAndroid Build Coastguard Worker %a = load <2 x i32>, <2 x i32> addrspace(1) * %in 31*9880d681SAndroid Build Coastguard Worker %b = load <2 x i32>, <2 x i32> addrspace(1) * %b_ptr 32*9880d681SAndroid Build Coastguard Worker %result = sub <2 x i32> %a, %b 33*9880d681SAndroid Build Coastguard Worker store <2 x i32> %result, <2 x i32> addrspace(1)* %out 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_sub_v4i32: 38*9880d681SAndroid Build Coastguard Worker; EG: SUB_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 39*9880d681SAndroid Build Coastguard Worker; EG: SUB_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 40*9880d681SAndroid Build Coastguard Worker; EG: SUB_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 41*9880d681SAndroid Build Coastguard Worker; EG: SUB_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker; SI: v_sub_i32_e32 v{{[0-9]+, vcc, v[0-9]+, v[0-9]+}} 44*9880d681SAndroid Build Coastguard Worker; SI: v_sub_i32_e32 v{{[0-9]+, vcc, v[0-9]+, v[0-9]+}} 45*9880d681SAndroid Build Coastguard Worker; SI: v_sub_i32_e32 v{{[0-9]+, vcc, v[0-9]+, v[0-9]+}} 46*9880d681SAndroid Build Coastguard Worker; SI: v_sub_i32_e32 v{{[0-9]+, vcc, v[0-9]+, v[0-9]+}} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine void @test_sub_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) { 49*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <4 x i32>, <4 x i32> addrspace(1)* %in, i32 1 50*9880d681SAndroid Build Coastguard Worker %a = load <4 x i32>, <4 x i32> addrspace(1) * %in 51*9880d681SAndroid Build Coastguard Worker %b = load <4 x i32>, <4 x i32> addrspace(1) * %b_ptr 52*9880d681SAndroid Build Coastguard Worker %result = sub <4 x i32> %a, %b 53*9880d681SAndroid Build Coastguard Worker store <4 x i32> %result, <4 x i32> addrspace(1)* %out 54*9880d681SAndroid Build Coastguard Worker ret void 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_sub_i64: 58*9880d681SAndroid Build Coastguard Worker; SI: s_sub_u32 59*9880d681SAndroid Build Coastguard Worker; SI: s_subb_u32 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW T{{[0-9]+}}.XY 62*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT {{[* ]*}} 63*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUBB_UINT 64*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT 65*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT {{[* ]*}} 66*9880d681SAndroid Build Coastguard Workerdefine void @s_sub_i64(i64 addrspace(1)* noalias %out, i64 %a, i64 %b) nounwind { 67*9880d681SAndroid Build Coastguard Worker %result = sub i64 %a, %b 68*9880d681SAndroid Build Coastguard Worker store i64 %result, i64 addrspace(1)* %out, align 8 69*9880d681SAndroid Build Coastguard Worker ret void 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_sub_i64: 73*9880d681SAndroid Build Coastguard Worker; SI: v_sub_i32_e32 74*9880d681SAndroid Build Coastguard Worker; SI: v_subb_u32_e32 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW T{{[0-9]+}}.XY 77*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT {{[* ]*}} 78*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUBB_UINT 79*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT 80*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT {{[* ]*}} 81*9880d681SAndroid Build Coastguard Workerdefine void @v_sub_i64(i64 addrspace(1)* noalias %out, i64 addrspace(1)* noalias %inA, i64 addrspace(1)* noalias %inB) nounwind { 82*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() readnone 83*9880d681SAndroid Build Coastguard Worker %a_ptr = getelementptr i64, i64 addrspace(1)* %inA, i32 %tid 84*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr i64, i64 addrspace(1)* %inB, i32 %tid 85*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %a_ptr 86*9880d681SAndroid Build Coastguard Worker %b = load i64, i64 addrspace(1)* %b_ptr 87*9880d681SAndroid Build Coastguard Worker %result = sub i64 %a, %b 88*9880d681SAndroid Build Coastguard Worker store i64 %result, i64 addrspace(1)* %out, align 8 89*9880d681SAndroid Build Coastguard Worker ret void 90*9880d681SAndroid Build Coastguard Worker} 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_test_sub_v2i64: 93*9880d681SAndroid Build Coastguard Worker; SI: v_sub_i32_e32 94*9880d681SAndroid Build Coastguard Worker; SI: v_subb_u32_e32 95*9880d681SAndroid Build Coastguard Worker; SI: v_sub_i32_e32 96*9880d681SAndroid Build Coastguard Worker; SI: v_subb_u32_e32 97*9880d681SAndroid Build Coastguard Workerdefine void @v_test_sub_v2i64(<2 x i64> addrspace(1)* %out, <2 x i64> addrspace(1)* noalias %inA, <2 x i64> addrspace(1)* noalias %inB) { 98*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() readnone 99*9880d681SAndroid Build Coastguard Worker %a_ptr = getelementptr <2 x i64>, <2 x i64> addrspace(1)* %inA, i32 %tid 100*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <2 x i64>, <2 x i64> addrspace(1)* %inB, i32 %tid 101*9880d681SAndroid Build Coastguard Worker %a = load <2 x i64>, <2 x i64> addrspace(1)* %a_ptr 102*9880d681SAndroid Build Coastguard Worker %b = load <2 x i64>, <2 x i64> addrspace(1)* %b_ptr 103*9880d681SAndroid Build Coastguard Worker %result = sub <2 x i64> %a, %b 104*9880d681SAndroid Build Coastguard Worker store <2 x i64> %result, <2 x i64> addrspace(1)* %out 105*9880d681SAndroid Build Coastguard Worker ret void 106*9880d681SAndroid Build Coastguard Worker} 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_test_sub_v4i64: 109*9880d681SAndroid Build Coastguard Worker; SI: v_subrev_i32_e32 110*9880d681SAndroid Build Coastguard Worker; SI: v_subb_u32_e32 111*9880d681SAndroid Build Coastguard Worker; SI: v_subrev_i32_e32 112*9880d681SAndroid Build Coastguard Worker; SI: v_subb_u32_e32 113*9880d681SAndroid Build Coastguard Worker; SI: v_subrev_i32_e32 114*9880d681SAndroid Build Coastguard Worker; SI: v_subb_u32_e32 115*9880d681SAndroid Build Coastguard Worker; SI: v_subrev_i32_e32 116*9880d681SAndroid Build Coastguard Worker; SI: v_subb_u32_e32 117*9880d681SAndroid Build Coastguard Workerdefine void @v_test_sub_v4i64(<4 x i64> addrspace(1)* %out, <4 x i64> addrspace(1)* noalias %inA, <4 x i64> addrspace(1)* noalias %inB) { 118*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() readnone 119*9880d681SAndroid Build Coastguard Worker %a_ptr = getelementptr <4 x i64>, <4 x i64> addrspace(1)* %inA, i32 %tid 120*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <4 x i64>, <4 x i64> addrspace(1)* %inB, i32 %tid 121*9880d681SAndroid Build Coastguard Worker %a = load <4 x i64>, <4 x i64> addrspace(1)* %a_ptr 122*9880d681SAndroid Build Coastguard Worker %b = load <4 x i64>, <4 x i64> addrspace(1)* %b_ptr 123*9880d681SAndroid Build Coastguard Worker %result = sub <4 x i64> %a, %b 124*9880d681SAndroid Build Coastguard Worker store <4 x i64> %result, <4 x i64> addrspace(1)* %out 125*9880d681SAndroid Build Coastguard Worker ret void 126*9880d681SAndroid Build Coastguard Worker} 127