1*5785cbb4SAlex Rønne Petersen; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2*5785cbb4SAlex Rønne Petersen; RUN: llc -mtriple=arm < %s | FileCheck %s -check-prefix=SOFT-FLOAT 3*5785cbb4SAlex Rønne Petersen; RUN: llc -mtriple=arm -mattr=+vfp4d16sp < %s | FileCheck %s -check-prefix=SOFT-FLOAT-VFP32 4*5785cbb4SAlex Rønne Petersen; RUN: llc -mtriple=arm -mattr=+vfp4d16sp,+fp64 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-VFP64 5*5785cbb4SAlex Rønne Petersen 6*5785cbb4SAlex Rønne Petersendefine float @fmuladd_intrinsic_f32(float %a, float %b, float %c) #0 { 7*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_intrinsic_f32: 8*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT: @ %bb.0: 9*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: push {r4, lr} 10*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r4, r2 11*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __mulsf3 12*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r1, r4 13*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __addsf3 14*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: pop {r4, lr} 15*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov pc, lr 16*5785cbb4SAlex Rønne Petersen; 17*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_intrinsic_f32: 18*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32: @ %bb.0: 19*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: push {r4, lr} 20*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r4, r2 21*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __mulsf3 22*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r1, r4 23*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __addsf3 24*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: pop {r4, lr} 25*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov pc, lr 26*5785cbb4SAlex Rønne Petersen; 27*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_intrinsic_f32: 28*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64: @ %bb.0: 29*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: push {r4, lr} 30*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r4, r2 31*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __mulsf3 32*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r1, r4 33*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __addsf3 34*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: pop {r4, lr} 35*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov pc, lr 36*5785cbb4SAlex Rønne Petersen %result = call float @llvm.fmuladd.f32(float %a, float %b, float %c) 37*5785cbb4SAlex Rønne Petersen ret float %result 38*5785cbb4SAlex Rønne Petersen} 39*5785cbb4SAlex Rønne Petersen 40*5785cbb4SAlex Rønne Petersendefine double @fmuladd_intrinsic_f64(double %a, double %b, double %c) #0 { 41*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_intrinsic_f64: 42*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT: @ %bb.0: 43*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: push {r11, lr} 44*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __muldf3 45*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r2, [sp, #8] 46*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r3, [sp, #12] 47*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __adddf3 48*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: pop {r11, lr} 49*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov pc, lr 50*5785cbb4SAlex Rønne Petersen; 51*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_intrinsic_f64: 52*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32: @ %bb.0: 53*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: push {r11, lr} 54*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __muldf3 55*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r2, [sp, #8] 56*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r3, [sp, #12] 57*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __adddf3 58*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: pop {r11, lr} 59*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov pc, lr 60*5785cbb4SAlex Rønne Petersen; 61*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_intrinsic_f64: 62*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64: @ %bb.0: 63*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: push {r11, lr} 64*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __muldf3 65*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r2, [sp, #8] 66*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r3, [sp, #12] 67*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __adddf3 68*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: pop {r11, lr} 69*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov pc, lr 70*5785cbb4SAlex Rønne Petersen %result = call double @llvm.fmuladd.f64(double %a, double %b, double %c) 71*5785cbb4SAlex Rønne Petersen ret double %result 72*5785cbb4SAlex Rønne Petersen} 73*5785cbb4SAlex Rønne Petersen 74*5785cbb4SAlex Rønne Petersendefine float @fmuladd_contract_f32(float %a, float %b, float %c) #0 { 75*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_contract_f32: 76*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT: @ %bb.0: 77*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: push {r4, lr} 78*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r4, r2 79*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __mulsf3 80*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r1, r4 81*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __addsf3 82*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: pop {r4, lr} 83*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov pc, lr 84*5785cbb4SAlex Rønne Petersen; 85*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_contract_f32: 86*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32: @ %bb.0: 87*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: push {r4, lr} 88*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r4, r2 89*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __mulsf3 90*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r1, r4 91*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __addsf3 92*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: pop {r4, lr} 93*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov pc, lr 94*5785cbb4SAlex Rønne Petersen; 95*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_contract_f32: 96*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64: @ %bb.0: 97*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: push {r4, lr} 98*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r4, r2 99*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __mulsf3 100*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r1, r4 101*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __addsf3 102*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: pop {r4, lr} 103*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov pc, lr 104*5785cbb4SAlex Rønne Petersen %product = fmul contract float %a, %b 105*5785cbb4SAlex Rønne Petersen %result = fadd contract float %product, %c 106*5785cbb4SAlex Rønne Petersen ret float %result 107*5785cbb4SAlex Rønne Petersen} 108*5785cbb4SAlex Rønne Petersen 109*5785cbb4SAlex Rønne Petersendefine double @fmuladd_contract_f64(double %a, double %b, double %c) #0 { 110*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_contract_f64: 111*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT: @ %bb.0: 112*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: push {r11, lr} 113*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __muldf3 114*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r2, [sp, #8] 115*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r3, [sp, #12] 116*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __adddf3 117*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: pop {r11, lr} 118*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov pc, lr 119*5785cbb4SAlex Rønne Petersen; 120*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_contract_f64: 121*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32: @ %bb.0: 122*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: push {r11, lr} 123*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __muldf3 124*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r2, [sp, #8] 125*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r3, [sp, #12] 126*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __adddf3 127*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: pop {r11, lr} 128*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov pc, lr 129*5785cbb4SAlex Rønne Petersen; 130*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_contract_f64: 131*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64: @ %bb.0: 132*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: push {r11, lr} 133*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __muldf3 134*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r2, [sp, #8] 135*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r3, [sp, #12] 136*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __adddf3 137*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: pop {r11, lr} 138*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov pc, lr 139*5785cbb4SAlex Rønne Petersen %product = fmul contract double %a, %b 140*5785cbb4SAlex Rønne Petersen %result = fadd contract double %product, %c 141*5785cbb4SAlex Rønne Petersen ret double %result 142*5785cbb4SAlex Rønne Petersen} 143*5785cbb4SAlex Rønne Petersen 144*5785cbb4SAlex Rønne Petersendefine <4 x float> @fmuladd_contract_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) #0 { 145*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_contract_v4f32: 146*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT: @ %bb.0: 147*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: push {r4, r5, r6, r7, r11, lr} 148*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r7, r1 149*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r1, [sp, #24] 150*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r4, r3 151*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r6, r2 152*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __mulsf3 153*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r1, [sp, #40] 154*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __addsf3 155*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r1, [sp, #28] 156*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r5, r0 157*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r0, r7 158*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __mulsf3 159*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r1, [sp, #44] 160*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __addsf3 161*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r1, [sp, #32] 162*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r7, r0 163*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r0, r6 164*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __mulsf3 165*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r1, [sp, #48] 166*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __addsf3 167*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r1, [sp, #36] 168*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r6, r0 169*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r0, r4 170*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __mulsf3 171*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r1, [sp, #52] 172*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __addsf3 173*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r3, r0 174*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r0, r5 175*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r1, r7 176*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r2, r6 177*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: pop {r4, r5, r6, r7, r11, lr} 178*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov pc, lr 179*5785cbb4SAlex Rønne Petersen; 180*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_contract_v4f32: 181*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32: @ %bb.0: 182*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: push {r4, r5, r6, r7, r11, lr} 183*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r7, r1 184*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r1, [sp, #24] 185*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r4, r3 186*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r6, r2 187*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __mulsf3 188*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r1, [sp, #40] 189*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __addsf3 190*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r1, [sp, #28] 191*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r5, r0 192*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r0, r7 193*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __mulsf3 194*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r1, [sp, #44] 195*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __addsf3 196*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r1, [sp, #32] 197*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r7, r0 198*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r0, r6 199*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __mulsf3 200*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r1, [sp, #48] 201*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __addsf3 202*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r1, [sp, #36] 203*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r6, r0 204*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r0, r4 205*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __mulsf3 206*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r1, [sp, #52] 207*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __addsf3 208*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r3, r0 209*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r0, r5 210*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r1, r7 211*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r2, r6 212*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: pop {r4, r5, r6, r7, r11, lr} 213*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov pc, lr 214*5785cbb4SAlex Rønne Petersen; 215*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_contract_v4f32: 216*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64: @ %bb.0: 217*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: push {r4, r5, r6, r7, r11, lr} 218*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r7, r1 219*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r1, [sp, #24] 220*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r4, r3 221*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r6, r2 222*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __mulsf3 223*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r1, [sp, #40] 224*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __addsf3 225*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r1, [sp, #28] 226*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r5, r0 227*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r0, r7 228*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __mulsf3 229*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r1, [sp, #44] 230*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __addsf3 231*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r1, [sp, #32] 232*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r7, r0 233*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r0, r6 234*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __mulsf3 235*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r1, [sp, #48] 236*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __addsf3 237*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r1, [sp, #36] 238*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r6, r0 239*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r0, r4 240*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __mulsf3 241*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r1, [sp, #52] 242*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __addsf3 243*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r3, r0 244*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r0, r5 245*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r1, r7 246*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r2, r6 247*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: pop {r4, r5, r6, r7, r11, lr} 248*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov pc, lr 249*5785cbb4SAlex Rønne Petersen %product = fmul contract <4 x float> %a, %b 250*5785cbb4SAlex Rønne Petersen %result = fadd contract <4 x float> %product, %c 251*5785cbb4SAlex Rønne Petersen ret <4 x float> %result 252*5785cbb4SAlex Rønne Petersen} 253*5785cbb4SAlex Rønne Petersen 254*5785cbb4SAlex Rønne Petersendefine <4 x double> @fmuladd_contract_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) #0 { 255*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_contract_v4f64: 256*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT: @ %bb.0: 257*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: push {r4, r5, r6, lr} 258*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r5, r3 259*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r6, r2 260*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r4, r0 261*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r0, [sp, #32] 262*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r1, [sp, #36] 263*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r2, [sp, #64] 264*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r3, [sp, #68] 265*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __muldf3 266*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r2, [sp, #96] 267*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r3, [sp, #100] 268*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __adddf3 269*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: str r0, [r4, #24] 270*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: str r1, [r4, #28] 271*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r0, [sp, #24] 272*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r1, [sp, #28] 273*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r2, [sp, #56] 274*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r3, [sp, #60] 275*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __muldf3 276*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r2, [sp, #88] 277*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r3, [sp, #92] 278*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __adddf3 279*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: str r0, [r4, #16] 280*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: str r1, [r4, #20] 281*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r0, [sp, #16] 282*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r1, [sp, #20] 283*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r2, [sp, #48] 284*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r3, [sp, #52] 285*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __muldf3 286*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r2, [sp, #80] 287*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r3, [sp, #84] 288*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __adddf3 289*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r2, [sp, #40] 290*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r3, [sp, #44] 291*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: str r0, [r4, #8] 292*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r0, r6 293*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: str r1, [r4, #12] 294*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov r1, r5 295*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __muldf3 296*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r2, [sp, #72] 297*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: ldr r3, [sp, #76] 298*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: bl __adddf3 299*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: stm r4, {r0, r1} 300*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: pop {r4, r5, r6, lr} 301*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT: mov pc, lr 302*5785cbb4SAlex Rønne Petersen; 303*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_contract_v4f64: 304*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32: @ %bb.0: 305*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: push {r4, r5, r6, lr} 306*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r5, r3 307*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r6, r2 308*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r4, r0 309*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r0, [sp, #32] 310*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r1, [sp, #36] 311*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r2, [sp, #64] 312*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r3, [sp, #68] 313*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __muldf3 314*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r2, [sp, #96] 315*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r3, [sp, #100] 316*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __adddf3 317*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: str r0, [r4, #24] 318*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: str r1, [r4, #28] 319*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r0, [sp, #24] 320*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r1, [sp, #28] 321*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r2, [sp, #56] 322*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r3, [sp, #60] 323*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __muldf3 324*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r2, [sp, #88] 325*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r3, [sp, #92] 326*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __adddf3 327*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: str r0, [r4, #16] 328*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: str r1, [r4, #20] 329*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r0, [sp, #16] 330*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r1, [sp, #20] 331*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r2, [sp, #48] 332*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r3, [sp, #52] 333*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __muldf3 334*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r2, [sp, #80] 335*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r3, [sp, #84] 336*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __adddf3 337*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r2, [sp, #40] 338*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r3, [sp, #44] 339*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: str r0, [r4, #8] 340*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r0, r6 341*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: str r1, [r4, #12] 342*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov r1, r5 343*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __muldf3 344*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r2, [sp, #72] 345*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: ldr r3, [sp, #76] 346*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: bl __adddf3 347*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: stm r4, {r0, r1} 348*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: pop {r4, r5, r6, lr} 349*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT: mov pc, lr 350*5785cbb4SAlex Rønne Petersen; 351*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_contract_v4f64: 352*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64: @ %bb.0: 353*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: push {r4, r5, r6, lr} 354*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r5, r3 355*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r6, r2 356*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r4, r0 357*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r0, [sp, #32] 358*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r1, [sp, #36] 359*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r2, [sp, #64] 360*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r3, [sp, #68] 361*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __muldf3 362*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r2, [sp, #96] 363*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r3, [sp, #100] 364*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __adddf3 365*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: str r0, [r4, #24] 366*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: str r1, [r4, #28] 367*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r0, [sp, #24] 368*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r1, [sp, #28] 369*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r2, [sp, #56] 370*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r3, [sp, #60] 371*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __muldf3 372*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r2, [sp, #88] 373*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r3, [sp, #92] 374*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __adddf3 375*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: str r0, [r4, #16] 376*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: str r1, [r4, #20] 377*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r0, [sp, #16] 378*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r1, [sp, #20] 379*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r2, [sp, #48] 380*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r3, [sp, #52] 381*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __muldf3 382*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r2, [sp, #80] 383*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r3, [sp, #84] 384*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __adddf3 385*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r2, [sp, #40] 386*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r3, [sp, #44] 387*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: str r0, [r4, #8] 388*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r0, r6 389*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: str r1, [r4, #12] 390*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov r1, r5 391*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __muldf3 392*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r2, [sp, #72] 393*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: ldr r3, [sp, #76] 394*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: bl __adddf3 395*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: stm r4, {r0, r1} 396*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: pop {r4, r5, r6, lr} 397*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT: mov pc, lr 398*5785cbb4SAlex Rønne Petersen %product = fmul contract <4 x double> %a, %b 399*5785cbb4SAlex Rønne Petersen %result = fadd contract <4 x double> %product, %c 400*5785cbb4SAlex Rønne Petersen ret <4 x double> %result 401*5785cbb4SAlex Rønne Petersen} 402*5785cbb4SAlex Rønne Petersen 403*5785cbb4SAlex Rønne Petersenattributes #0 = { "use-soft-float"="true" } 404*5785cbb4SAlex Rønne Petersen 405*5785cbb4SAlex Rønne Petersendeclare float @llvm.fmuladd.f32(float %a, float %b, float %c) 406*5785cbb4SAlex Rønne Petersendeclare double @llvm.fmuladd.f64(double %a, double %b, double %c) 407