@@ -201,6 +201,25 @@ define <2 x float> @sqrt_exp_vec(<2 x float> %x) {
201201 ret <2 x float > %res
202202}
203203
204+ define dso_local fp128 @sqrt_exp_long_double (fp128 %x , fp128 %y ) {
205+ ; CHECK-LABEL: @sqrt_exp_long_double(
206+ ; CHECK-NEXT: entry:
207+ ; CHECK-NEXT: [[MERGED_SQRT:%.*]] = fmul fast fp128 [[X:%.*]], 0xL00000000000000003FFE000000000000
208+ ; CHECK-NEXT: [[TMP0:%.*]] = call fast fp128 @llvm.exp.f128(fp128 [[MERGED_SQRT]])
209+ ; CHECK-NEXT: [[MERGED_SQRT1:%.*]] = fmul fast fp128 [[Y:%.*]], 0xL00000000000000003FFE000000000000
210+ ; CHECK-NEXT: [[TMP1:%.*]] = call fast fp128 @llvm.exp2.f128(fp128 [[MERGED_SQRT1]])
211+ ; CHECK-NEXT: [[ADD:%.*]] = fadd fast fp128 [[TMP0]], [[TMP1]]
212+ ; CHECK-NEXT: ret fp128 [[ADD]]
213+ ;
214+ entry:
215+ %0 = call fast fp128 @llvm.exp.f128 (fp128 %x )
216+ %1 = call fast fp128 @llvm.sqrt.f128 (fp128 %0 )
217+ %2 = call fast fp128 @llvm.exp2.f128 (fp128 %y )
218+ %3 = call fast fp128 @llvm.sqrt.f128 (fp128 %2 )
219+ %add = fadd fast fp128 %1 , %3
220+ ret fp128 %add
221+ }
222+
204223declare i32 @foo (double )
205224declare double @sqrt (double ) readnone
206225declare float @sqrtf (float )
@@ -212,3 +231,6 @@ declare double @exp2(double)
212231declare double @exp10 (double )
213232declare <2 x float > @llvm.exp.v2f32 (<2 x float >)
214233declare <2 x float > @llvm.sqrt.v2f32 (<2 x float >)
234+ declare fp128 @llvm.exp.f128 (fp128 )
235+ declare fp128 @llvm.sqrt.f128 (fp128 )
236+ declare fp128 @llvm.exp2.f128 (fp128 )
0 commit comments