1*9880d681SAndroid Build Coastguard Worker; Make sure this testcase codegens to the sin and cos instructions, not calls 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-apple-macosx -mattr=-sse,-sse2,-sse3 -enable-unsafe-fp-math | FileCheck %s --check-prefix=SIN 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-apple-macosx -mattr=-sse,-sse2,-sse3 -enable-unsafe-fp-math | FileCheck %s --check-prefix=COS 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-apple-macosx -mattr=-sse,-sse2,-sse3 | FileCheck %s --check-prefix=SAFE 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdeclare float @sinf(float) readonly 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdeclare double @sin(double) readonly 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdeclare x86_fp80 @sinl(x86_fp80) readonly 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker; SIN-LABEL: test1: 13*9880d681SAndroid Build Coastguard Workerdefine float @test1(float %X) { 14*9880d681SAndroid Build Coastguard Worker %Y = call float @sinf(float %X) readonly 15*9880d681SAndroid Build Coastguard Worker ret float %Y 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker; SIN: {{^[ \t]*fsin$}} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; SIN-NOT: fsin 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker; SAFE: test1 22*9880d681SAndroid Build Coastguard Worker; SAFE-NOT: fsin 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; SIN-LABEL: test2: 25*9880d681SAndroid Build Coastguard Workerdefine double @test2(double %X) { 26*9880d681SAndroid Build Coastguard Worker %Y = call double @sin(double %X) readonly 27*9880d681SAndroid Build Coastguard Worker ret double %Y 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker; SIN: {{^[ \t]*fsin$}} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; SIN-NOT: fsin 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker; SAFE: test2 34*9880d681SAndroid Build Coastguard Worker; SAFE-NOT: fsin 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker; SIN-LABEL: test3: 37*9880d681SAndroid Build Coastguard Workerdefine x86_fp80 @test3(x86_fp80 %X) { 38*9880d681SAndroid Build Coastguard Worker %Y = call x86_fp80 @sinl(x86_fp80 %X) readonly 39*9880d681SAndroid Build Coastguard Worker ret x86_fp80 %Y 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker; SIN: {{^[ \t]*fsin$}} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker; SIN-NOT: fsin 44*9880d681SAndroid Build Coastguard Worker; COS-NOT: fcos 45*9880d681SAndroid Build Coastguard Workerdeclare float @cosf(float) readonly 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdeclare double @cos(double) readonly 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerdeclare x86_fp80 @cosl(x86_fp80) readonly 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker; SIN-LABEL: test4: 53*9880d681SAndroid Build Coastguard Worker; COS-LABEL: test3: 54*9880d681SAndroid Build Coastguard Workerdefine float @test4(float %X) { 55*9880d681SAndroid Build Coastguard Worker %Y = call float @cosf(float %X) readonly 56*9880d681SAndroid Build Coastguard Worker ret float %Y 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker; COS: {{^[ \t]*fcos}} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; SAFE: test4 61*9880d681SAndroid Build Coastguard Worker; SAFE-NOT: fcos 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdefine double @test5(double %X) { 64*9880d681SAndroid Build Coastguard Worker %Y = call double @cos(double %X) readonly 65*9880d681SAndroid Build Coastguard Worker ret double %Y 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker; COS: {{^[ \t]*fcos}} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker; SAFE: test5 70*9880d681SAndroid Build Coastguard Worker; SAFE-NOT: fcos 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerdefine x86_fp80 @test6(x86_fp80 %X) { 73*9880d681SAndroid Build Coastguard Worker %Y = call x86_fp80 @cosl(x86_fp80 %X) readonly 74*9880d681SAndroid Build Coastguard Worker ret x86_fp80 %Y 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker; COS: {{^[ \t]*fcos}} 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker; SIN-NOT: fsin 79*9880d681SAndroid Build Coastguard Worker; COS-NOT: fcos 80