1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tahiti -verify-machineinstrs < %s | FileCheck -check-prefix=SI %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.fabs.f64(double) #0 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; SI-LABEL: {{^}}fsub_f64: 7*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 8*9880d681SAndroid Build Coastguard Workerdefine void @fsub_f64(double addrspace(1)* %out, double addrspace(1)* %in1, 9*9880d681SAndroid Build Coastguard Worker double addrspace(1)* %in2) { 10*9880d681SAndroid Build Coastguard Worker %r0 = load double, double addrspace(1)* %in1 11*9880d681SAndroid Build Coastguard Worker %r1 = load double, double addrspace(1)* %in2 12*9880d681SAndroid Build Coastguard Worker %r2 = fsub double %r0, %r1 13*9880d681SAndroid Build Coastguard Worker store double %r2, double addrspace(1)* %out 14*9880d681SAndroid Build Coastguard Worker ret void 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; SI-LABEL: {{^}}fsub_fabs_f64: 18*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], -\|v\[[0-9]+:[0-9]+\]\|}} 19*9880d681SAndroid Build Coastguard Workerdefine void @fsub_fabs_f64(double addrspace(1)* %out, double addrspace(1)* %in1, 20*9880d681SAndroid Build Coastguard Worker double addrspace(1)* %in2) { 21*9880d681SAndroid Build Coastguard Worker %r0 = load double, double addrspace(1)* %in1 22*9880d681SAndroid Build Coastguard Worker %r1 = load double, double addrspace(1)* %in2 23*9880d681SAndroid Build Coastguard Worker %r1.fabs = call double @llvm.fabs.f64(double %r1) #0 24*9880d681SAndroid Build Coastguard Worker %r2 = fsub double %r0, %r1.fabs 25*9880d681SAndroid Build Coastguard Worker store double %r2, double addrspace(1)* %out 26*9880d681SAndroid Build Coastguard Worker ret void 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker; SI-LABEL: {{^}}fsub_fabs_inv_f64: 30*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], |v\[[0-9]+:[0-9]+\]|, -v\[[0-9]+:[0-9]+\]}} 31*9880d681SAndroid Build Coastguard Workerdefine void @fsub_fabs_inv_f64(double addrspace(1)* %out, double addrspace(1)* %in1, 32*9880d681SAndroid Build Coastguard Worker double addrspace(1)* %in2) { 33*9880d681SAndroid Build Coastguard Worker %r0 = load double, double addrspace(1)* %in1 34*9880d681SAndroid Build Coastguard Worker %r1 = load double, double addrspace(1)* %in2 35*9880d681SAndroid Build Coastguard Worker %r0.fabs = call double @llvm.fabs.f64(double %r0) #0 36*9880d681SAndroid Build Coastguard Worker %r2 = fsub double %r0.fabs, %r1 37*9880d681SAndroid Build Coastguard Worker store double %r2, double addrspace(1)* %out 38*9880d681SAndroid Build Coastguard Worker ret void 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; SI-LABEL: {{^}}s_fsub_f64: 42*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 43*9880d681SAndroid Build Coastguard Workerdefine void @s_fsub_f64(double addrspace(1)* %out, double %a, double %b) { 44*9880d681SAndroid Build Coastguard Worker %sub = fsub double %a, %b 45*9880d681SAndroid Build Coastguard Worker store double %sub, double addrspace(1)* %out 46*9880d681SAndroid Build Coastguard Worker ret void 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker; SI-LABEL: {{^}}s_fsub_imm_f64: 50*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], -s\[[0-9]+:[0-9]+\]}}, 4.0 51*9880d681SAndroid Build Coastguard Workerdefine void @s_fsub_imm_f64(double addrspace(1)* %out, double %a, double %b) { 52*9880d681SAndroid Build Coastguard Worker %sub = fsub double 4.0, %a 53*9880d681SAndroid Build Coastguard Worker store double %sub, double 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; SI-LABEL: {{^}}s_fsub_imm_inv_f64: 58*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\]}}, -4.0 59*9880d681SAndroid Build Coastguard Workerdefine void @s_fsub_imm_inv_f64(double addrspace(1)* %out, double %a, double %b) { 60*9880d681SAndroid Build Coastguard Worker %sub = fsub double %a, 4.0 61*9880d681SAndroid Build Coastguard Worker store double %sub, double addrspace(1)* %out 62*9880d681SAndroid Build Coastguard Worker ret void 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker; SI-LABEL: {{^}}s_fsub_self_f64: 66*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], -s\[[0-9]+:[0-9]+\]}} 67*9880d681SAndroid Build Coastguard Workerdefine void @s_fsub_self_f64(double addrspace(1)* %out, double %a) { 68*9880d681SAndroid Build Coastguard Worker %sub = fsub double %a, %a 69*9880d681SAndroid Build Coastguard Worker store double %sub, double addrspace(1)* %out 70*9880d681SAndroid Build Coastguard Worker ret void 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker; SI-LABEL: {{^}}fsub_v2f64: 74*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 75*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 76*9880d681SAndroid Build Coastguard Workerdefine void @fsub_v2f64(<2 x double> addrspace(1)* %out, <2 x double> %a, <2 x double> %b) { 77*9880d681SAndroid Build Coastguard Worker %sub = fsub <2 x double> %a, %b 78*9880d681SAndroid Build Coastguard Worker store <2 x double> %sub, <2 x double> addrspace(1)* %out 79*9880d681SAndroid Build Coastguard Worker ret void 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker; SI-LABEL: {{^}}fsub_v4f64: 83*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 84*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 85*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 86*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 87*9880d681SAndroid Build Coastguard Workerdefine void @fsub_v4f64(<4 x double> addrspace(1)* %out, <4 x double> addrspace(1)* %in) { 88*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <4 x double>, <4 x double> addrspace(1)* %in, i32 1 89*9880d681SAndroid Build Coastguard Worker %a = load <4 x double>, <4 x double> addrspace(1)* %in 90*9880d681SAndroid Build Coastguard Worker %b = load <4 x double>, <4 x double> addrspace(1)* %b_ptr 91*9880d681SAndroid Build Coastguard Worker %result = fsub <4 x double> %a, %b 92*9880d681SAndroid Build Coastguard Worker store <4 x double> %result, <4 x double> addrspace(1)* %out 93*9880d681SAndroid Build Coastguard Worker ret void 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Worker; SI-LABEL: {{^}}s_fsub_v4f64: 97*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 98*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 99*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 100*9880d681SAndroid Build Coastguard Worker; SI: v_add_f64 {{v\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], -v\[[0-9]+:[0-9]+\]}} 101*9880d681SAndroid Build Coastguard Workerdefine void @s_fsub_v4f64(<4 x double> addrspace(1)* %out, <4 x double> %a, <4 x double> %b) { 102*9880d681SAndroid Build Coastguard Worker %result = fsub <4 x double> %a, %b 103*9880d681SAndroid Build Coastguard Worker store <4 x double> %result, <4 x double> addrspace(1)* %out, align 16 104*9880d681SAndroid Build Coastguard Worker ret void 105*9880d681SAndroid Build Coastguard Worker} 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone } 108