1; RUN: opt < %s -passes=libcalls-shrinkwrap -S | FileCheck %s 2 3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 4target triple = "x86_64-unknown-linux-gnu" 5 6define void @test_range_error(float %value) { 7entry: 8 %call_0 = call float @coshf(float %value) 9; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -8.900000e+01 10; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 8.900000e+01 11; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 12; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT:[0-9]+]] 13; CHECK: [[CALL_LABEL]]: 14; CHECK-NEXT: %call_0 = call float @coshf(float %value) 15; CHECK-NEXT: br label %[[END_LABEL]] 16; CHECK: [[END_LABEL]]: 17 18 %call_1 = call float @expf(float %value) 19; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -1.030000e+02 20; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 8.800000e+01 21; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 22; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 23; CHECK: [[CALL_LABEL]]: 24; CHECK-NEXT: %call_1 = call float @expf(float %value) 25; CHECK-NEXT: br label %[[END_LABEL]] 26; CHECK: [[END_LABEL]]: 27 28 %call_3 = call float @exp2f(float %value) 29; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -1.490000e+02 30; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 1.270000e+02 31; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 32; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 33; CHECK: [[CALL_LABEL]]: 34; CHECK-NEXT: %call_3 = call float @exp2f(float %value) 35; CHECK-NEXT: br label %[[END_LABEL]] 36; CHECK: [[END_LABEL]]: 37 38 %call_4 = call float @sinhf(float %value) 39; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -8.900000e+01 40; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 8.900000e+01 41; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 42; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 43; CHECK: [[CALL_LABEL]]: 44; CHECK-NEXT: %call_4 = call float @sinhf(float %value) 45; CHECK-NEXT: br label %[[END_LABEL]] 46; CHECK: [[END_LABEL]]: 47 48 %call_5 = call float @expm1f(float %value) 49; CHECK: [[COND:%[0-9]+]] = fcmp ogt float %value, 8.800000e+01 50; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 51; CHECK: [[CALL_LABEL]]: 52; CHECK-NEXT: %call_5 = call float @expm1f(float %value) 53; CHECK-NEXT: br label %[[END_LABEL]] 54; CHECK: [[END_LABEL]]: 55 56 ret void 57} 58 59define void @test_range_error_strictfp(float %value) strictfp { 60entry: 61 %call_0 = call float @coshf(float %value) strictfp 62; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE:%.*]], float -8.900000e+01, metadata !"olt", metadata !"fpexcept.strict") 63; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 8.900000e+01, metadata !"ogt", metadata !"fpexcept.strict") 64; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 65; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT:[0-9]+]] 66; CHECK: [[CALL_LABEL]]: 67; CHECK-NEXT: %call_0 = call float @coshf(float %value) 68; CHECK-NEXT: br label %[[END_LABEL]] 69; CHECK: [[END_LABEL]]: 70 71 %call_1 = call float @expf(float %value) strictfp 72; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.030000e+02, metadata !"olt", metadata !"fpexcept.strict") 73; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 8.800000e+01, metadata !"ogt", metadata !"fpexcept.strict") 74; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 75; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 76; CHECK: [[CALL_LABEL]]: 77; CHECK-NEXT: %call_1 = call float @expf(float %value) 78; CHECK-NEXT: br label %[[END_LABEL]] 79; CHECK: [[END_LABEL]]: 80 81 %call_3 = call float @exp2f(float %value) strictfp 82; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.490000e+02, metadata !"olt", metadata !"fpexcept.strict") 83; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 1.270000e+02, metadata !"ogt", metadata !"fpexcept.strict") 84; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 85; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 86; CHECK: [[CALL_LABEL]]: 87; CHECK-NEXT: %call_3 = call float @exp2f(float %value) 88; CHECK-NEXT: br label %[[END_LABEL]] 89; CHECK: [[END_LABEL]]: 90 91 %call_4 = call float @sinhf(float %value) strictfp 92; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -8.900000e+01, metadata !"olt", metadata !"fpexcept.strict") 93; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 8.900000e+01, metadata !"ogt", metadata !"fpexcept.strict") 94; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 95; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 96; CHECK: [[CALL_LABEL]]: 97; CHECK-NEXT: %call_4 = call float @sinhf(float %value) 98; CHECK-NEXT: br label %[[END_LABEL]] 99; CHECK: [[END_LABEL]]: 100 101 %call_5 = call float @expm1f(float %value) strictfp 102; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 8.800000e+01, metadata !"ogt", metadata !"fpexcept.strict") 103; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 104; CHECK: [[CALL_LABEL]]: 105; CHECK-NEXT: %call_5 = call float @expm1f(float %value) 106; CHECK-NEXT: br label %[[END_LABEL]] 107; CHECK: [[END_LABEL]]: 108 109 ret void 110} 111 112declare float @coshf(float) 113declare float @expf(float) 114declare float @exp2f(float) 115declare float @sinhf(float) 116declare float @expm1f(float) 117 118define void @test_domain_error(float %value) { 119entry: 120 121 %call_00 = call float @acosf(float %value) 122; CHECK: [[COND1:%[0-9]+]] = fcmp ogt float %value, 1.000000e+00 123; CHECK: [[COND2:%[0-9]+]] = fcmp olt float %value, -1.000000e+00 124; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 125; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 126; CHECK: [[CALL_LABEL]]: 127; CHECK-NEXT: %call_00 = call float @acosf(float %value) 128; CHECK-NEXT: br label %[[END_LABEL]] 129; CHECK: [[END_LABEL]]: 130 131 %call_01 = call float @asinf(float %value) 132; CHECK: [[COND1:%[0-9]+]] = fcmp ogt float %value, 1.000000e+00 133; CHECK: [[COND2:%[0-9]+]] = fcmp olt float %value, -1.000000e+00 134; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 135; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 136; CHECK: [[CALL_LABEL]]: 137; CHECK-NEXT: %call_01 = call float @asinf(float %value) 138; CHECK-NEXT: br label %[[END_LABEL]] 139; CHECK: [[END_LABEL]]: 140 141 %call_02 = call float @cosf(float %value) 142; CHECK: [[COND1:%[0-9]+]] = fcmp oeq float %value, 0xFFF0000000000000 143; CHECK: [[COND2:%[0-9]+]] = fcmp oeq float %value, 0x7FF0000000000000 144; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 145; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 146; CHECK: [[CALL_LABEL]]: 147; CHECK-NEXT: %call_02 = call float @cosf(float %value) 148; CHECK-NEXT: br label %[[END_LABEL]] 149; CHECK: [[END_LABEL]]: 150 151 %call_03 = call float @sinf(float %value) 152; CHECK: [[COND1:%[0-9]+]] = fcmp oeq float %value, 0xFFF0000000000000 153; CHECK: [[COND2:%[0-9]+]] = fcmp oeq float %value, 0x7FF0000000000000 154; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 155; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 156; CHECK: [[CALL_LABEL]]: 157; CHECK-NEXT: %call_03 = call float @sinf(float %value) 158; CHECK-NEXT: br label %[[END_LABEL]] 159; CHECK: [[END_LABEL]]: 160 161 %call_04 = call float @acoshf(float %value) 162; CHECK: [[COND:%[0-9]+]] = fcmp olt float %value, 1.000000e+00 163; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 164; CHECK: [[CALL_LABEL]]: 165; CHECK-NEXT: %call_04 = call float @acoshf(float %value) 166; CHECK-NEXT: br label %[[END_LABEL]] 167; CHECK: [[END_LABEL]]: 168 169 %call_05 = call float @sqrtf(float %value) 170; CHECK: [[COND:%[0-9]+]] = fcmp olt float %value, 0.000000e+00 171; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 172; CHECK: [[CALL_LABEL]]: 173; CHECK-NEXT: %call_05 = call float @sqrtf(float %value) 174; CHECK-NEXT: br label %[[END_LABEL]] 175; CHECK: [[END_LABEL]]: 176 177 %call_06 = call float @atanhf(float %value) 178; CHECK: [[COND1:%[0-9]+]] = fcmp oge float %value, 1.000000e+00 179; CHECK: [[COND2:%[0-9]+]] = fcmp ole float %value, -1.000000e+00 180; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 181; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 182; CHECK: [[CALL_LABEL]]: 183; CHECK-NEXT: %call_06 = call float @atanhf(float %value) 184; CHECK-NEXT: br label %[[END_LABEL]] 185; CHECK: [[END_LABEL]]: 186 187 %call_07 = call float @logf(float %value) 188; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00 189; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 190; CHECK: [[CALL_LABEL]]: 191; CHECK-NEXT: %call_07 = call float @logf(float %value) 192; CHECK-NEXT: br label %[[END_LABEL]] 193; CHECK: [[END_LABEL]]: 194 195 %call_08 = call float @log10f(float %value) 196; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00 197; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 198; CHECK: [[CALL_LABEL]]: 199; CHECK-NEXT: %call_08 = call float @log10f(float %value) 200; CHECK-NEXT: br label %[[END_LABEL]] 201; CHECK: [[END_LABEL]]: 202 203 %call_09 = call float @log2f(float %value) 204; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00 205; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 206; CHECK: [[CALL_LABEL]]: 207; CHECK-NEXT: %call_09 = call float @log2f(float %value) 208; CHECK-NEXT: br label %[[END_LABEL]] 209; CHECK: [[END_LABEL]]: 210 211 %call_10 = call float @logbf(float %value) 212; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00 213; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 214; CHECK: [[CALL_LABEL]]: 215; CHECK-NEXT: %call_10 = call float @logbf(float %value) 216; CHECK-NEXT: br label %[[END_LABEL]] 217; CHECK: [[END_LABEL]]: 218 219 %call_11 = call float @log1pf(float %value) 220; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, -1.000000e+00 221; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 222; CHECK: [[CALL_LABEL]]: 223; CHECK-NEXT: %call_11 = call float @log1pf(float %value) 224; CHECK-NEXT: br label %[[END_LABEL]] 225; CHECK: [[END_LABEL]]: 226 ret void 227} 228 229define void @test_domain_error_strictfp(float %value) strictfp { 230entry: 231 232 %call_00 = call float @acosf(float %value) strictfp 233; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE:%.*]], float 1.000000e+00, metadata !"ogt", metadata !"fpexcept.strict") 234; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.000000e+00, metadata !"olt", metadata !"fpexcept.strict") 235; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 236; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 237; CHECK: [[CALL_LABEL]]: 238; CHECK-NEXT: %call_00 = call float @acosf(float %value) 239; CHECK-NEXT: br label %[[END_LABEL]] 240; CHECK: [[END_LABEL]]: 241 242 %call_01 = call float @asinf(float %value) strictfp 243; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 1.000000e+00, metadata !"ogt", metadata !"fpexcept.strict") 244; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.000000e+00, metadata !"olt", metadata !"fpexcept.strict") 245; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 246; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 247; CHECK: [[CALL_LABEL]]: 248; CHECK-NEXT: %call_01 = call float @asinf(float %value) 249; CHECK-NEXT: br label %[[END_LABEL]] 250; CHECK: [[END_LABEL]]: 251 252 %call_02 = call float @cosf(float %value) strictfp 253; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0xFFF0000000000000, metadata !"oeq", metadata !"fpexcept.strict") 254; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0x7FF0000000000000, metadata !"oeq", metadata !"fpexcept.strict") 255; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 256; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 257; CHECK: [[CALL_LABEL]]: 258; CHECK-NEXT: %call_02 = call float @cosf(float %value) 259; CHECK-NEXT: br label %[[END_LABEL]] 260; CHECK: [[END_LABEL]]: 261 262 %call_03 = call float @sinf(float %value) strictfp 263; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0xFFF0000000000000, metadata !"oeq", metadata !"fpexcept.strict") 264; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0x7FF0000000000000, metadata !"oeq", metadata !"fpexcept.strict") 265; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 266; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 267; CHECK: [[CALL_LABEL]]: 268; CHECK-NEXT: %call_03 = call float @sinf(float %value) 269; CHECK-NEXT: br label %[[END_LABEL]] 270; CHECK: [[END_LABEL]]: 271 272 %call_04 = call float @acoshf(float %value) strictfp 273; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 1.000000e+00, metadata !"olt", metadata !"fpexcept.strict") 274; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 275; CHECK: [[CALL_LABEL]]: 276; CHECK-NEXT: %call_04 = call float @acoshf(float %value) 277; CHECK-NEXT: br label %[[END_LABEL]] 278; CHECK: [[END_LABEL]]: 279 280 %call_05 = call float @sqrtf(float %value) strictfp 281; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0.000000e+00, metadata !"olt", metadata !"fpexcept.strict") 282; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 283; CHECK: [[CALL_LABEL]]: 284; CHECK-NEXT: %call_05 = call float @sqrtf(float %value) 285; CHECK-NEXT: br label %[[END_LABEL]] 286; CHECK: [[END_LABEL]]: 287 288 %call_06 = call float @atanhf(float %value) strictfp 289; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 1.000000e+00, metadata !"oge", metadata !"fpexcept.strict") 290; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.000000e+00, metadata !"ole", metadata !"fpexcept.strict") 291; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] 292; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 293; CHECK: [[CALL_LABEL]]: 294; CHECK-NEXT: %call_06 = call float @atanhf(float %value) 295; CHECK-NEXT: br label %[[END_LABEL]] 296; CHECK: [[END_LABEL]]: 297 298 %call_07 = call float @logf(float %value) strictfp 299; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0.000000e+00, metadata !"ole", metadata !"fpexcept.strict") 300; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 301; CHECK: [[CALL_LABEL]]: 302; CHECK-NEXT: %call_07 = call float @logf(float %value) 303; CHECK-NEXT: br label %[[END_LABEL]] 304; CHECK: [[END_LABEL]]: 305 306 %call_08 = call float @log10f(float %value) strictfp 307; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0.000000e+00, metadata !"ole", metadata !"fpexcept.strict") 308; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 309; CHECK: [[CALL_LABEL]]: 310; CHECK-NEXT: %call_08 = call float @log10f(float %value) 311; CHECK-NEXT: br label %[[END_LABEL]] 312; CHECK: [[END_LABEL]]: 313 314 %call_09 = call float @log2f(float %value) strictfp 315; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0.000000e+00, metadata !"ole", metadata !"fpexcept.strict") 316; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 317; CHECK: [[CALL_LABEL]]: 318; CHECK-NEXT: %call_09 = call float @log2f(float %value) 319; CHECK-NEXT: br label %[[END_LABEL]] 320; CHECK: [[END_LABEL]]: 321 322 %call_10 = call float @logbf(float %value) strictfp 323; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0.000000e+00, metadata !"ole", metadata !"fpexcept.strict") 324; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 325; CHECK: [[CALL_LABEL]]: 326; CHECK-NEXT: %call_10 = call float @logbf(float %value) 327; CHECK-NEXT: br label %[[END_LABEL]] 328; CHECK: [[END_LABEL]]: 329 330 %call_11 = call float @log1pf(float %value) strictfp 331; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.000000e+00, metadata !"ole", metadata !"fpexcept.strict") 332; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] 333; CHECK: [[CALL_LABEL]]: 334; CHECK-NEXT: %call_11 = call float @log1pf(float %value) 335; CHECK-NEXT: br label %[[END_LABEL]] 336; CHECK: [[END_LABEL]]: 337 ret void 338} 339 340declare float @acosf(float) 341declare float @asinf(float) 342declare float @cosf(float) 343declare float @sinf(float) 344declare float @acoshf(float) 345declare float @sqrtf(float) 346declare float @atanhf(float) 347declare float @logf(float) 348declare float @log10f(float) 349declare float @log2f(float) 350declare float @logbf(float) 351declare float @log1pf(float) 352 353; CHECK: ![[BRANCH_WEIGHT]] = !{!"branch_weights", i32 1, i32 1048575} 354