1; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -mattr=+neon | FileCheck %s 2 3define float @frecp0(float %x) #0 { 4 %div = fdiv fast float 1.0, %x 5 ret float %div 6 7; CHECK-LABEL: frecp0: 8; CHECK-NEXT: BB#0 9; CHECK-NEXT: fmov 10; CHECK-NEXT: fdiv 11} 12 13define float @frecp1(float %x) #1 { 14 %div = fdiv fast float 1.0, %x 15 ret float %div 16 17; CHECK-LABEL: frecp1: 18; CHECK-NEXT: BB#0 19; CHECK-NEXT: frecpe [[R:s[0-7]]] 20; CHECK-NEXT: frecps {{s[0-7](, s[0-7])?}}, [[R]] 21} 22 23define <2 x float> @f2recp0(<2 x float> %x) #0 { 24 %div = fdiv fast <2 x float> <float 1.0, float 1.0>, %x 25 ret <2 x float> %div 26 27; CHECK-LABEL: f2recp0: 28; CHECK-NEXT: BB#0 29; CHECK-NEXT: fmov 30; CHECK-NEXT: fdiv 31} 32 33define <2 x float> @f2recp1(<2 x float> %x) #1 { 34 %div = fdiv fast <2 x float> <float 1.0, float 1.0>, %x 35 ret <2 x float> %div 36 37; CHECK-LABEL: f2recp1: 38; CHECK-NEXT: BB#0 39; CHECK-NEXT: frecpe [[R:v[0-7]\.2s]] 40; CHECK-NEXT: frecps {{v[0-7]\.2s(, v[0-7].2s)?}}, [[R]] 41} 42 43define <4 x float> @f4recp0(<4 x float> %x) #0 { 44 %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x 45 ret <4 x float> %div 46 47; CHECK-LABEL: f4recp0: 48; CHECK-NEXT: BB#0 49; CHECK-NEXT: fmov 50; CHECK-NEXT: fdiv 51} 52 53define <4 x float> @f4recp1(<4 x float> %x) #1 { 54 %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x 55 ret <4 x float> %div 56 57; CHECK-LABEL: f4recp1: 58; CHECK-NEXT: BB#0 59; CHECK-NEXT: frecpe [[R:v[0-7]\.4s]] 60; CHECK-NEXT: frecps {{v[0-7]\.4s(, v[0-7].4s)?}}, [[R]] 61} 62 63define <8 x float> @f8recp0(<8 x float> %x) #0 { 64 %div = fdiv fast <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, %x 65 ret <8 x float> %div 66 67; CHECK-LABEL: f8recp0: 68; CHECK-NEXT: BB#0 69; CHECK-NEXT: fmov 70; CHECK-NEXT: fdiv 71; CHECK-NEXT: fdiv 72} 73 74define <8 x float> @f8recp1(<8 x float> %x) #1 { 75 %div = fdiv fast <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, %x 76 ret <8 x float> %div 77 78; CHECK-LABEL: f8recp1: 79; CHECK-NEXT: BB#0 80; CHECK-NEXT: frecpe [[RA:v[0-7]\.4s]] 81; CHECK-NEXT: frecpe [[RB:v[0-7]\.4s]] 82; CHECK-NEXT: frecps {{v[0-7]\.4s(, v[0-7].4s)?}}, [[RA]] 83; CHECK: frecps {{v[0-7]\.4s(, v[0-7].4s)?}}, [[RB]] 84} 85 86define double @drecp0(double %x) #0 { 87 %div = fdiv fast double 1.0, %x 88 ret double %div 89 90; CHECK-LABEL: drecp0: 91; CHECK-NEXT: BB#0 92; CHECK-NEXT: fmov 93; CHECK-NEXT: fdiv 94} 95 96define double @drecp1(double %x) #1 { 97 %div = fdiv fast double 1.0, %x 98 ret double %div 99 100; CHECK-LABEL: drecp1: 101; CHECK-NEXT: BB#0 102; CHECK-NEXT: frecpe [[R:d[0-7]]] 103; CHECK-NEXT: frecps {{d[0-7](, d[0-7])?}}, [[R]] 104} 105 106define <2 x double> @d2recp0(<2 x double> %x) #0 { 107 %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %x 108 ret <2 x double> %div 109 110; CHECK-LABEL: d2recp0: 111; CHECK-NEXT: BB#0 112; CHECK-NEXT: fmov 113; CHECK-NEXT: fdiv 114} 115 116define <2 x double> @d2recp1(<2 x double> %x) #1 { 117 %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %x 118 ret <2 x double> %div 119 120; CHECK-LABEL: d2recp1: 121; CHECK-NEXT: BB#0 122; CHECK-NEXT: frecpe [[R:v[0-7]\.2d]] 123; CHECK-NEXT: frecps {{v[0-7]\.2d(, v[0-7].2d)?}}, [[R]] 124} 125 126define <4 x double> @d4recp0(<4 x double> %x) #0 { 127 %div = fdiv fast <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, %x 128 ret <4 x double> %div 129 130; CHECK-LABEL: d4recp0: 131; CHECK-NEXT: BB#0 132; CHECK-NEXT: fmov 133; CHECK-NEXT: fdiv 134; CHECK-NEXT: fdiv 135} 136 137define <4 x double> @d4recp1(<4 x double> %x) #1 { 138 %div = fdiv fast <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, %x 139 ret <4 x double> %div 140 141; CHECK-LABEL: d4recp1: 142; CHECK-NEXT: BB#0 143; CHECK-NEXT: frecpe [[RA:v[0-7]\.2d]] 144; CHECK-NEXT: frecpe [[RB:v[0-7]\.2d]] 145; CHECK-NEXT: frecps {{v[0-7]\.2d(, v[0-7].2d)?}}, [[RA]] 146; CHECK: frecps {{v[0-7]\.2d(, v[0-7].2d)?}}, [[RB]] 147} 148 149attributes #0 = { nounwind "unsafe-fp-math"="true" } 150attributes #1 = { nounwind "unsafe-fp-math"="true" "reciprocal-estimates"="div,vec-div" } 151