1; RUN: llc < %s -mtriple=arm64-apple-ios7 | FileCheck %s --check-prefix CHECK-IOS 2; RUN: llc < %s -mtriple=arm64-linux-gnu | FileCheck %s --check-prefix CHECK-LINUX 3 4; Combine sin / cos into a single call unless they may write errno (as 5; captured by readnone attrbiute, controlled by clang -fmath-errno 6; setting). 7; rdar://12856873 8 9define float @test1(float %x) nounwind { 10entry: 11; CHECK-IOS-LABEL: test1: 12; CHECK-IOS: bl ___sincosf_stret 13; CHECK-IOS: fadd s0, s0, s1 14 15; CHECK-LINUX-LABEL: test1: 16; CHECK-LINUX: bl sincosf 17 18 %call = tail call float @sinf(float %x) readnone 19 %call1 = tail call float @cosf(float %x) readnone 20 %add = fadd float %call, %call1 21 ret float %add 22} 23 24define float @test1_errno(float %x) nounwind { 25entry: 26; CHECK-IOS-LABEL: test1_errno: 27; CHECK-IOS: bl _sinf 28; CHECK-IOS: bl _cosf 29 30; CHECK-LINUX-LABEL: test1_errno: 31; CHECK-LINUX: bl sinf 32; CHECK-LINUX: bl cosf 33 34 %call = tail call float @sinf(float %x) 35 %call1 = tail call float @cosf(float %x) 36 %add = fadd float %call, %call1 37 ret float %add 38} 39 40define double @test2(double %x) nounwind { 41entry: 42; CHECK-IOS-LABEL: test2: 43; CHECK-IOS: bl ___sincos_stret 44; CHECK-IOS: fadd d0, d0, d1 45 46; CHECK-LINUX-LABEL: test2: 47; CHECK-LINUX: bl sincos 48 49 %call = tail call double @sin(double %x) readnone 50 %call1 = tail call double @cos(double %x) readnone 51 %add = fadd double %call, %call1 52 ret double %add 53} 54 55define double @test2_errno(double %x) nounwind { 56entry: 57; CHECK-IOS-LABEL: test2_errno: 58; CHECK-IOS: bl _sin 59; CHECK-IOS: bl _cos 60 61; CHECK-LINUX-LABEL: test2_errno: 62; CHECK-LINUX: bl sin 63; CHECK-LINUX: bl cos 64 65 %call = tail call double @sin(double %x) 66 %call1 = tail call double @cos(double %x) 67 %add = fadd double %call, %call1 68 ret double %add 69} 70 71declare float @sinf(float) 72declare double @sin(double) 73declare float @cosf(float) 74declare double @cos(double) 75