1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=aarch64 -mattr=neon -recip=!div,!vec-div | FileCheck %s --check-prefix=FAULT 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=aarch64 -mattr=neon -recip=div,vec-div | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine float @frecp(float %x) #0 { 5*9880d681SAndroid Build Coastguard Worker %div = fdiv fast float 1.0, %x 6*9880d681SAndroid Build Coastguard Worker ret float %div 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; FAULT-LABEL: frecp: 9*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: BB#0 10*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: fmov 11*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: fdiv 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: frecp: 14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: BB#0 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: frecpe 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmov 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @f2recp(<2 x float> %x) #0 { 20*9880d681SAndroid Build Coastguard Worker %div = fdiv fast <2 x float> <float 1.0, float 1.0>, %x 21*9880d681SAndroid Build Coastguard Worker ret <2 x float> %div 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker; FAULT-LABEL: f2recp: 24*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: BB#0 25*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: fmov 26*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: fdiv 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2recp: 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: BB#0 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmov 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: frecpe 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @f4recp(<4 x float> %x) #0 { 35*9880d681SAndroid Build Coastguard Worker %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x 36*9880d681SAndroid Build Coastguard Worker ret <4 x float> %div 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; FAULT-LABEL: f4recp: 39*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: BB#0 40*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: fmov 41*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: fdiv 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4recp: 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: BB#0 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmov 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: frecpe 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerdefine double @drecp(double %x) #0 { 50*9880d681SAndroid Build Coastguard Worker %div = fdiv fast double 1.0, %x 51*9880d681SAndroid Build Coastguard Worker ret double %div 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; FAULT-LABEL: drecp: 54*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: BB#0 55*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: fmov 56*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: fdiv 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: drecp: 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: BB#0 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: frecpe 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmov 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @d2recp(<2 x double> %x) #0 { 65*9880d681SAndroid Build Coastguard Worker %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %x 66*9880d681SAndroid Build Coastguard Worker ret <2 x double> %div 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker; FAULT-LABEL: d2recp: 69*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: BB#0 70*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: fmov 71*9880d681SAndroid Build Coastguard Worker; FAULT-NEXT: fdiv 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: d2recp: 74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: BB#0 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmov 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: frecpe 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind "unsafe-fp-math"="true" } 80