1 ; RUN: llc -O3 < %s -mcpu=cyclone | FileCheck %s 2 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n32:64" 3 target triple = "arm64-apple-ios6.0.0" 4 5 ; CHECK: test1 6 ; CHECK: frintx 7 ; CHECK: frintm 8 define float @test1(float %a) #0 { 9 entry: 10 %call = tail call float @floorf(float %a) nounwind readnone 11 ret float %call 12 } 13 14 declare float @floorf(float) nounwind readnone 15 16 ; CHECK: test2 17 ; CHECK: frintx 18 ; CHECK: frintm 19 define double @test2(double %a) #0 { 20 entry: 21 %call = tail call double @floor(double %a) nounwind readnone 22 ret double %call 23 } 24 25 declare double @floor(double) nounwind readnone 26 27 ; CHECK: test3 28 ; CHECK: frinti 29 define float @test3(float %a) #0 { 30 entry: 31 %call = tail call float @nearbyintf(float %a) nounwind readnone 32 ret float %call 33 } 34 35 declare float @nearbyintf(float) nounwind readnone 36 37 ; CHECK: test4 38 ; CHECK: frinti 39 define double @test4(double %a) #0 { 40 entry: 41 %call = tail call double @nearbyint(double %a) nounwind readnone 42 ret double %call 43 } 44 45 declare double @nearbyint(double) nounwind readnone 46 47 ; CHECK: test5 48 ; CHECK: frintx 49 ; CHECK: frintp 50 define float @test5(float %a) #0 { 51 entry: 52 %call = tail call float @ceilf(float %a) nounwind readnone 53 ret float %call 54 } 55 56 declare float @ceilf(float) nounwind readnone 57 58 ; CHECK: test6 59 ; CHECK: frintx 60 ; CHECK: frintp 61 define double @test6(double %a) #0 { 62 entry: 63 %call = tail call double @ceil(double %a) nounwind readnone 64 ret double %call 65 } 66 67 declare double @ceil(double) nounwind readnone 68 69 ; CHECK: test7 70 ; CHECK: frintx 71 define float @test7(float %a) #0 { 72 entry: 73 %call = tail call float @rintf(float %a) nounwind readnone 74 ret float %call 75 } 76 77 declare float @rintf(float) nounwind readnone 78 79 ; CHECK: test8 80 ; CHECK: frintx 81 define double @test8(double %a) #0 { 82 entry: 83 %call = tail call double @rint(double %a) nounwind readnone 84 ret double %call 85 } 86 87 declare double @rint(double) nounwind readnone 88 89 ; CHECK: test9 90 ; CHECK: frintx 91 ; CHECK: frintz 92 define float @test9(float %a) #0 { 93 entry: 94 %call = tail call float @truncf(float %a) nounwind readnone 95 ret float %call 96 } 97 98 declare float @truncf(float) nounwind readnone 99 100 ; CHECK: test10 101 ; CHECK: frintx 102 ; CHECK: frintz 103 define double @test10(double %a) #0 { 104 entry: 105 %call = tail call double @trunc(double %a) nounwind readnone 106 ret double %call 107 } 108 109 declare double @trunc(double) nounwind readnone 110 111 ; CHECK: test11 112 ; CHECK: frintx 113 ; CHECK: frinta 114 define float @test11(float %a) #0 { 115 entry: 116 %call = tail call float @roundf(float %a) nounwind readnone 117 ret float %call 118 } 119 120 declare float @roundf(float %a) nounwind readnone 121 122 ; CHECK: test12 123 ; CHECK: frintx 124 ; CHECK: frinta 125 define double @test12(double %a) #0 { 126 entry: 127 %call = tail call double @round(double %a) nounwind readnone 128 ret double %call 129 } 130 131 declare double @round(double %a) nounwind readnone 132 133 ; CHECK: test13 134 ; CHECK-NOT: frintx 135 ; CHECK: frintm 136 define float @test13(float %a) #1 { 137 entry: 138 %call = tail call float @floorf(float %a) nounwind readnone 139 ret float %call 140 } 141 142 ; CHECK: test14 143 ; CHECK-NOT: frintx 144 ; CHECK: frintm 145 define double @test14(double %a) #1 { 146 entry: 147 %call = tail call double @floor(double %a) nounwind readnone 148 ret double %call 149 } 150 151 ; CHECK: test15 152 ; CHECK-NOT: frintx 153 ; CHECK: frintp 154 define float @test15(float %a) #1 { 155 entry: 156 %call = tail call float @ceilf(float %a) nounwind readnone 157 ret float %call 158 } 159 160 ; CHECK: test16 161 ; CHECK-NOT: frintx 162 ; CHECK: frintp 163 define double @test16(double %a) #1 { 164 entry: 165 %call = tail call double @ceil(double %a) nounwind readnone 166 ret double %call 167 } 168 169 ; CHECK: test17 170 ; CHECK-NOT: frintx 171 ; CHECK: frintz 172 define float @test17(float %a) #1 { 173 entry: 174 %call = tail call float @truncf(float %a) nounwind readnone 175 ret float %call 176 } 177 178 ; CHECK: test18 179 ; CHECK-NOT: frintx 180 ; CHECK: frintz 181 define double @test18(double %a) #1 { 182 entry: 183 %call = tail call double @trunc(double %a) nounwind readnone 184 ret double %call 185 } 186 187 ; CHECK: test19 188 ; CHECK-NOT: frintx 189 ; CHECK: frinta 190 define float @test19(float %a) #1 { 191 entry: 192 %call = tail call float @roundf(float %a) nounwind readnone 193 ret float %call 194 } 195 196 ; CHECK: test20 197 ; CHECK-NOT: frintx 198 ; CHECK: frinta 199 define double @test20(double %a) #1 { 200 entry: 201 %call = tail call double @round(double %a) nounwind readnone 202 ret double %call 203 } 204 205 206 207 attributes #0 = { nounwind } 208 attributes #1 = { nounwind "unsafe-fp-math"="true" } 209