1; Make sure this testcase codegens to the fabs instruction, not a call to fabsf 2; RUN: llc < %s -mtriple=i686-apple-macosx -mattr=-sse2,-sse3,-sse | FileCheck %s 3; RUN: llc < %s -mtriple=i686-apple-macosx -mattr=-sse,-sse2,-sse3 -enable-unsafe-fp-math -enable-no-nans-fp-math | FileCheck %s --check-prefix=UNSAFE 4; RUN: llc < %s -mtriple=x86_64-apple-macosx -O0 | FileCheck %s --check-prefix=NOOPT 5 6declare float @fabsf(float) 7 8declare x86_fp80 @fabsl(x86_fp80) 9 10; CHECK-LABEL: test1: 11; UNSAFE-LABEL: test1: 12; NOOPT-LABEL: test1: 13define float @test1(float %X) { 14 %Y = call float @fabsf(float %X) readnone 15 ret float %Y 16} 17; CHECK: {{^[ \t]+fabs$}} 18; UNSAFE: {{^[ \t]+fabs$}} 19 20; CHECK-NOT: fabs 21; UNSAFE-NOT: fabs 22; NOOPT-NOT: fabsf 23 24; CHECK-LABEL: test2: 25; UNSAFE-LABEL: test2: 26; NOOPT-LABEL: test2: 27define double @test2(double %X) { 28 %Y = fcmp oge double %X, -0.0 29 %Z = fsub double -0.0, %X 30 %Q = select i1 %Y, double %X, double %Z 31 ret double %Q 32} 33; fabs is not used here. 34; CHECK-NOT: fabs 35; NOOPT-NOT: fabs 36 37; UNSAFE: {{^[ \t]+fabs$}} 38 39; UNSAFE-NOT: fabs 40 41; CHECK-LABEL: test3: 42; UNSAFE-LABEL: test3: 43; NOOPT-LABEL: test3: 44define x86_fp80 @test3(x86_fp80 %X) { 45 %Y = call x86_fp80 @fabsl(x86_fp80 %X) readnone 46 ret x86_fp80 %Y 47} 48; CHECK: {{^[ \t]+fabs$}} 49; UNSAFE: {{^[ \t]+fabs$}} 50; NOOPT: {{^[ \t]+fabs$}} 51 52; CHECK-NOT: fabs 53; UNSAFE-NOT: fabs 54; NOOPT-NOT: fabs 55