1 ; RUN: opt < %s -libcalls-shrinkwrap -S | FileCheck %s 2 ; New PM 3 ; RUN: opt < %s -passes=libcalls-shrinkwrap -S | FileCheck %s 4 5 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 6 target triple = "x86_64-unknown-linux-gnu" 7 8 define void @test_range_error(x86_fp80 %value) { 9 entry: 10 %call_0 = call x86_fp80 @coshl(x86_fp80 %value) 11 ; CHECK: [[COND1:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKC00CB174000000000000 12 ; CHECK: [[COND2:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK400CB174000000000000 13 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 14 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT:[0-9]+]] 15 ; CHECK: [[CALL_LABEL]]: 16 ; CHECK-NEXT: %call_0 = call x86_fp80 @coshl(x86_fp80 %value) 17 ; CHECK-NEXT: br label %[[END_LABEL]] 18 ; CHECK: [[END_LABEL]]: 19 20 %call_1 = call x86_fp80 @expl(x86_fp80 %value) 21 ; CHECK: [[COND1:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKC00CB21C000000000000 22 ; CHECK: [[COND2:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK400CB170000000000000 23 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 24 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 25 ; CHECK: [[CALL_LABEL]]: 26 ; CHECK-NEXT: %call_1 = call x86_fp80 @expl(x86_fp80 %value) 27 ; CHECK-NEXT: br label %[[END_LABEL]] 28 ; CHECK: [[END_LABEL]]: 29 30 %call_3 = call x86_fp80 @exp2l(x86_fp80 %value) 31 ; CHECK: [[COND1:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKC00D807A000000000000 32 ; CHECK: [[COND2:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK400CB1DC000000000000 33 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 34 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 35 ; CHECK: [[CALL_LABEL]]: 36 ; CHECK-NEXT: %call_3 = call x86_fp80 @exp2l(x86_fp80 %value) 37 ; CHECK-NEXT: br label %[[END_LABEL]] 38 ; CHECK: [[END_LABEL]]: 39 40 %call_4 = call x86_fp80 @sinhl(x86_fp80 %value) 41 ; CHECK: [[COND1:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKC00CB174000000000000 42 ; CHECK: [[COND2:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK400CB174000000000000 43 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 44 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 45 ; CHECK: [[CALL_LABEL]]: 46 ; CHECK-NEXT: %call_4 = call x86_fp80 @sinhl(x86_fp80 %value) 47 ; CHECK-NEXT: br label %[[END_LABEL]] 48 ; CHECK: [[END_LABEL]]: 49 50 %call_5 = call x86_fp80 @expm1l(x86_fp80 %value) 51 ; CHECK: [[COND:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK400CB170000000000000 52 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 53 ; CHECK: [[CALL_LABEL]]: 54 ; CHECK-NEXT: %call_5 = call x86_fp80 @expm1l(x86_fp80 %value) 55 ; CHECK-NEXT: br label %[[END_LABEL]] 56 ; CHECK: [[END_LABEL]]: 57 58 ret void 59 } 60 61 declare x86_fp80 @coshl(x86_fp80) 62 declare x86_fp80 @expl(x86_fp80) 63 declare x86_fp80 @exp10l(x86_fp80) 64 declare x86_fp80 @exp2l(x86_fp80) 65 declare x86_fp80 @sinhl(x86_fp80) 66 declare x86_fp80 @expm1l(x86_fp80) 67 68 define void @test_domain_error(x86_fp80 %value) { 69 entry: 70 %call_00 = call x86_fp80 @acosl(x86_fp80 %value) 71 ; CHECK: [[COND1:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK3FFF8000000000000000 72 ; CHECK: [[COND2:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKBFFF8000000000000000 73 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 74 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 75 ; CHECK: [[CALL_LABEL]]: 76 ; CHECK-NEXT: %call_00 = call x86_fp80 @acosl(x86_fp80 %value) 77 ; CHECK-NEXT: br label %[[END_LABEL]] 78 ; CHECK: [[END_LABEL]]: 79 80 %call_01 = call x86_fp80 @asinl(x86_fp80 %value) 81 ; CHECK: [[COND1:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK3FFF8000000000000000 82 ; CHECK: [[COND2:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKBFFF8000000000000000 83 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 84 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 85 ; CHECK: [[CALL_LABEL]]: 86 ; CHECK-NEXT: %call_01 = call x86_fp80 @asinl(x86_fp80 %value) 87 ; CHECK-NEXT: br label %[[END_LABEL]] 88 ; CHECK: [[END_LABEL]]: 89 90 %call_02 = call x86_fp80 @cosl(x86_fp80 %value) 91 ; CHECK: [[COND1:%[0-9]+]] = fcmp oeq x86_fp80 %value, 0xKFFFF8000000000000000 92 ; CHECK: [[COND2:%[0-9]+]] = fcmp oeq x86_fp80 %value, 0xK7FFF8000000000000000 93 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 94 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 95 ; CHECK: [[CALL_LABEL]]: 96 ; CHECK-NEXT: %call_02 = call x86_fp80 @cosl(x86_fp80 %value) 97 ; CHECK-NEXT: br label %[[END_LABEL]] 98 ; CHECK: [[END_LABEL]]: 99 100 %call_03 = call x86_fp80 @sinl(x86_fp80 %value) 101 ; CHECK: [[COND1:%[0-9]+]] = fcmp oeq x86_fp80 %value, 0xKFFFF8000000000000000 102 ; CHECK: [[COND2:%[0-9]+]] = fcmp oeq x86_fp80 %value, 0xK7FFF8000000000000000 103 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 104 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 105 ; CHECK: [[CALL_LABEL]]: 106 ; CHECK-NEXT: %call_03 = call x86_fp80 @sinl(x86_fp80 %value) 107 ; CHECK-NEXT: br label %[[END_LABEL]] 108 ; CHECK: [[END_LABEL]]: 109 110 %call_04 = call x86_fp80 @acoshl(x86_fp80 %value) 111 ; CHECK: [[COND:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xK3FFF8000000000000000 112 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 113 ; CHECK: [[CALL_LABEL]]: 114 ; CHECK-NEXT: %call_04 = call x86_fp80 @acoshl(x86_fp80 %value) 115 ; CHECK-NEXT: br label %[[END_LABEL]] 116 ; CHECK: [[END_LABEL]]: 117 118 %call_05 = call x86_fp80 @sqrtl(x86_fp80 %value) 119 ; CHECK: [[COND:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xK00000000000000000000 120 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 121 ; CHECK: [[CALL_LABEL]]: 122 ; CHECK-NEXT: %call_05 = call x86_fp80 @sqrtl(x86_fp80 %value) 123 ; CHECK-NEXT: br label %[[END_LABEL]] 124 ; CHECK: [[END_LABEL]]: 125 126 %call_06 = call x86_fp80 @atanhl(x86_fp80 %value) 127 ; CHECK: [[COND1:%[0-9]+]] = fcmp oge x86_fp80 %value, 0xK3FFF8000000000000000 128 ; CHECK: [[COND2:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xKBFFF8000000000000000 129 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 130 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 131 ; CHECK: [[CALL_LABEL]]: 132 ; CHECK-NEXT: %call_06 = call x86_fp80 @atanhl(x86_fp80 %value) 133 ; CHECK-NEXT: br label %[[END_LABEL]] 134 ; CHECK: [[END_LABEL]]: 135 136 %call_07 = call x86_fp80 @logl(x86_fp80 %value) 137 ; CHECK: [[COND:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xK00000000000000000000 138 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 139 ; CHECK: [[CALL_LABEL]]: 140 ; CHECK-NEXT: %call_07 = call x86_fp80 @logl(x86_fp80 %value) 141 ; CHECK-NEXT: br label %[[END_LABEL]] 142 ; CHECK: [[END_LABEL]]: 143 144 %call_08 = call x86_fp80 @log10l(x86_fp80 %value) 145 ; CHECK: [[COND:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xK00000000000000000000 146 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 147 ; CHECK: [[CALL_LABEL]]: 148 ; CHECK-NEXT: %call_08 = call x86_fp80 @log10l(x86_fp80 %value) 149 ; CHECK-NEXT: br label %[[END_LABEL]] 150 ; CHECK: [[END_LABEL]]: 151 152 %call_09 = call x86_fp80 @log2l(x86_fp80 %value) 153 ; CHECK: [[COND:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xK00000000000000000000 154 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 155 ; CHECK: [[CALL_LABEL]]: 156 ; CHECK-NEXT: %call_09 = call x86_fp80 @log2l(x86_fp80 %value) 157 ; CHECK-NEXT: br label %[[END_LABEL]] 158 ; CHECK: [[END_LABEL]]: 159 160 %call_10 = call x86_fp80 @logbl(x86_fp80 %value) 161 ; CHECK: [[COND:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xK00000000000000000000 162 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 163 ; CHECK: [[CALL_LABEL]]: 164 ; CHECK-NEXT: %call_10 = call x86_fp80 @logbl(x86_fp80 %value) 165 ; CHECK-NEXT: br label %[[END_LABEL]] 166 ; CHECK: [[END_LABEL]]: 167 168 %call_11 = call x86_fp80 @log1pl(x86_fp80 %value) 169 ; CHECK: [[COND:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xKBFFF8000000000000000 170 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 171 ; CHECK: [[CALL_LABEL]]: 172 ; CHECK-NEXT: %call_11 = call x86_fp80 @log1pl(x86_fp80 %value) 173 ; CHECK-NEXT: br label %[[END_LABEL]] 174 ; CHECK: [[END_LABEL]]: 175 176 ret void 177 } 178 179 declare x86_fp80 @acosl(x86_fp80) 180 declare x86_fp80 @asinl(x86_fp80) 181 declare x86_fp80 @cosl(x86_fp80) 182 declare x86_fp80 @sinl(x86_fp80) 183 declare x86_fp80 @acoshl(x86_fp80) 184 declare x86_fp80 @sqrtl(x86_fp80) 185 declare x86_fp80 @atanhl(x86_fp80) 186 declare x86_fp80 @logl(x86_fp80) 187 declare x86_fp80 @log10l(x86_fp80) 188 declare x86_fp80 @log2l(x86_fp80) 189 declare x86_fp80 @logbl(x86_fp80) 190 declare x86_fp80 @log1pl(x86_fp80) 191 192 ; CHECK: ![[BRANCH_WEIGHT]] = !{!"branch_weights", i32 1, i32 2000} 193