383 lines · plain
1; RUN: llvm-as < %s | llvm-dis | FileCheck %s2 3; Test to verify that constrained intrinsics all have the strictfp attribute.4; Ordering is from Intrinsics.td.5 6define void @func(double %a, double %b, double %c, i32 %i) strictfp {7; CHECK-LABEL: define void @func8; CHECK-SAME: (double [[A:%.*]], double [[B:%.*]], double [[C:%.*]], i32 [[I:%.*]]) #[[ATTR0:[0-9]+]] {9 10 %add = call double @llvm.experimental.constrained.fadd.f64(11 double %a, double %b,12 metadata !"round.dynamic",13 metadata !"fpexcept.strict")14 15 %sub = call double @llvm.experimental.constrained.fsub.f64(16 double %a, double %b,17 metadata !"round.dynamic",18 metadata !"fpexcept.strict")19 20 %mul = call double @llvm.experimental.constrained.fmul.f64(21 double %a, double %b,22 metadata !"round.dynamic",23 metadata !"fpexcept.strict")24 25 %div = call double @llvm.experimental.constrained.fdiv.f64(26 double %a, double %b,27 metadata !"round.dynamic",28 metadata !"fpexcept.strict")29 30 %rem = call double @llvm.experimental.constrained.frem.f64(31 double %a, double %b,32 metadata !"round.dynamic",33 metadata !"fpexcept.strict")34 35 %fma = call double @llvm.experimental.constrained.fma.f64(36 double %a, double %b, double %c,37 metadata !"round.dynamic",38 metadata !"fpexcept.strict")39 40 %fmuladd = call double @llvm.experimental.constrained.fmuladd.f64(41 double %a, double %b, double %c,42 metadata !"round.dynamic",43 metadata !"fpexcept.strict")44 45 %si = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %a,46 metadata !"fpexcept.strict")47 48 %ui = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %a,49 metadata !"fpexcept.strict")50 51 %sfp = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %i,52 metadata !"round.dynamic",53 metadata !"fpexcept.strict")54 55 %ufp = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %i,56 metadata !"round.dynamic",57 metadata !"fpexcept.strict")58 59 %fptrunc = call float @llvm.experimental.constrained.fptrunc.f32.f64(60 double %a,61 metadata !"round.dynamic",62 metadata !"fpexcept.strict")63 64 %ext = call double @llvm.experimental.constrained.fpext.f64.f32(65 float %fptrunc,66 metadata !"fpexcept.strict")67 68 %sqrt = call double @llvm.experimental.constrained.sqrt.f64(69 double %a,70 metadata !"round.dynamic",71 metadata !"fpexcept.strict")72 73 %powi = call double @llvm.experimental.constrained.powi.f64(74 double %a, i32 %i,75 metadata !"round.dynamic",76 metadata !"fpexcept.strict")77 78 %sin = call double @llvm.experimental.constrained.sin.f64(79 double %a,80 metadata !"round.dynamic",81 metadata !"fpexcept.strict")82 83 %cos = call double @llvm.experimental.constrained.cos.f64(84 double %a,85 metadata !"round.dynamic",86 metadata !"fpexcept.strict")87 88 %tan = call double @llvm.experimental.constrained.tan.f64(89 double %a,90 metadata !"round.dynamic",91 metadata !"fpexcept.strict")92 93 %acos = call double @llvm.experimental.constrained.acos.f64(94 double %a,95 metadata !"round.dynamic",96 metadata !"fpexcept.strict")97 98 %asin = call double @llvm.experimental.constrained.asin.f64(99 double %a,100 metadata !"round.dynamic",101 metadata !"fpexcept.strict")102 103 %atan = call double @llvm.experimental.constrained.atan.f64(104 double %a,105 metadata !"round.dynamic",106 metadata !"fpexcept.strict")107 108 %atan2 = call double @llvm.experimental.constrained.atan2.f64(109 double %a, double %b,110 metadata !"round.dynamic",111 metadata !"fpexcept.strict")112 113 %cosh = call double @llvm.experimental.constrained.cosh.f64(114 double %a,115 metadata !"round.dynamic",116 metadata !"fpexcept.strict")117 118 %sinh = call double @llvm.experimental.constrained.sinh.f64(119 double %a,120 metadata !"round.dynamic",121 metadata !"fpexcept.strict")122 123 %tanh = call double @llvm.experimental.constrained.tanh.f64(124 double %a,125 metadata !"round.dynamic",126 metadata !"fpexcept.strict")127 128 %pow = call double @llvm.experimental.constrained.pow.f64(129 double %a, double %b,130 metadata !"round.dynamic",131 metadata !"fpexcept.strict")132 133 %log = call double @llvm.experimental.constrained.log.f64(134 double %a,135 metadata !"round.dynamic",136 metadata !"fpexcept.strict")137 138 %log10 = call double @llvm.experimental.constrained.log10.f64(139 double %a,140 metadata !"round.dynamic",141 metadata !"fpexcept.strict")142 143 %log2 = call double @llvm.experimental.constrained.log2.f64(144 double %a,145 metadata !"round.dynamic",146 metadata !"fpexcept.strict")147 148 %exp = call double @llvm.experimental.constrained.exp.f64(149 double %a,150 metadata !"round.dynamic",151 metadata !"fpexcept.strict")152 153 %exp2 = call double @llvm.experimental.constrained.exp2.f64(154 double %a,155 metadata !"round.dynamic",156 metadata !"fpexcept.strict")157 158 %rint = call double @llvm.experimental.constrained.rint.f64(159 double %a,160 metadata !"round.dynamic",161 metadata !"fpexcept.strict")162 163 %neari = call double @llvm.experimental.constrained.nearbyint.f64(164 double %a,165 metadata !"round.dynamic",166 metadata !"fpexcept.strict")167 168 %x32 = call i32 @llvm.experimental.constrained.lrint.i32.f64(169 double %a,170 metadata !"round.dynamic",171 metadata !"fpexcept.strict")172 173 %x64 = call i64 @llvm.experimental.constrained.llrint.i64.f64(174 double %a,175 metadata !"round.dynamic",176 metadata !"fpexcept.strict")177 178 %maxnum = call double @llvm.experimental.constrained.maxnum.f64(179 double %a, double %b,180 metadata !"fpexcept.strict")181 182 %minnum = call double @llvm.experimental.constrained.minnum.f64(183 double %a, double %b,184 metadata !"fpexcept.strict")185 186 %maxmum = call double @llvm.experimental.constrained.maximum.f64(187 double %a, double %b,188 metadata !"fpexcept.strict")189 190 %minmum = call double @llvm.experimental.constrained.minimum.f64(191 double %a, double %b,192 metadata !"fpexcept.strict")193 194 %ceil = call double @llvm.experimental.constrained.ceil.f64(195 double %a,196 metadata !"fpexcept.strict")197 198 %floor = call double @llvm.experimental.constrained.floor.f64(199 double %a,200 metadata !"fpexcept.strict")201 202 %y32 = call i32 @llvm.experimental.constrained.lround.i32.f64(203 double %a,204 metadata !"fpexcept.strict")205 206 %y64 = call i64 @llvm.experimental.constrained.llround.i64.f64(207 double %a,208 metadata !"fpexcept.strict")209 210 %round = call double @llvm.experimental.constrained.round.f64(211 double %a,212 metadata !"fpexcept.strict")213 214 %roundev = call double @llvm.experimental.constrained.roundeven.f64(215 double %a,216 metadata !"fpexcept.strict")217 218 %trunc = call double @llvm.experimental.constrained.trunc.f64(219 double %a,220 metadata !"fpexcept.strict")221 222 %q1 = call i1 @llvm.experimental.constrained.fcmp.f64(223 double %a, double %b,224 metadata !"oeq",225 metadata !"fpexcept.strict")226 227 %s1 = call i1 @llvm.experimental.constrained.fcmps.f64(228 double %a, double %b,229 metadata !"oeq",230 metadata !"fpexcept.strict")231 232; CHECK: ret void233 ret void234}235 236declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata)237; CHECK: @llvm.experimental.constrained.fadd.f64({{.*}}) #[[ATTR1:[0-9]+]]238 239declare double @llvm.experimental.constrained.fsub.f64(double, double, metadata, metadata)240; CHECK: @llvm.experimental.constrained.fsub.f64({{.*}}) #[[ATTR1]]241 242declare double @llvm.experimental.constrained.fmul.f64(double, double, metadata, metadata)243; CHECK: @llvm.experimental.constrained.fmul.f64({{.*}}) #[[ATTR1]]244 245declare double @llvm.experimental.constrained.fdiv.f64(double, double, metadata, metadata)246; CHECK: @llvm.experimental.constrained.fdiv.f64({{.*}}) #[[ATTR1]]247 248declare double @llvm.experimental.constrained.frem.f64(double, double, metadata, metadata)249; CHECK: @llvm.experimental.constrained.frem.f64({{.*}}) #[[ATTR1]]250 251declare double @llvm.experimental.constrained.fma.f64(double, double, double, metadata, metadata)252; CHECK: @llvm.experimental.constrained.fma.f64({{.*}}) #[[ATTR1]]253 254declare double @llvm.experimental.constrained.fmuladd.f64(double, double, double, metadata, metadata)255; CHECK: @llvm.experimental.constrained.fmuladd.f64({{.*}}) #[[ATTR1]]256 257declare i32 @llvm.experimental.constrained.fptosi.i32.f64(double, metadata)258; CHECK: @llvm.experimental.constrained.fptosi.i32.f64({{.*}}) #[[ATTR1]]259 260declare i32 @llvm.experimental.constrained.fptoui.i32.f64(double, metadata)261; CHECK: @llvm.experimental.constrained.fptoui.i32.f64({{.*}}) #[[ATTR1]]262 263declare double @llvm.experimental.constrained.sitofp.f64.i32(i32, metadata, metadata)264; CHECK: @llvm.experimental.constrained.sitofp.f64.i32({{.*}}) #[[ATTR1]]265 266declare double @llvm.experimental.constrained.uitofp.f64.i32(i32, metadata, metadata)267; CHECK: @llvm.experimental.constrained.uitofp.f64.i32({{.*}}) #[[ATTR1]]268 269declare float @llvm.experimental.constrained.fptrunc.f32.f64(double, metadata, metadata)270; CHECK: @llvm.experimental.constrained.fptrunc.f32.f64({{.*}}) #[[ATTR1]]271 272declare double @llvm.experimental.constrained.fpext.f64.f32(float, metadata)273; CHECK: @llvm.experimental.constrained.fpext.f64.f32({{.*}}) #[[ATTR1]]274 275declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadata)276; CHECK: @llvm.experimental.constrained.sqrt.f64({{.*}}) #[[ATTR1]]277 278declare double @llvm.experimental.constrained.powi.f64(double, i32, metadata, metadata)279; CHECK: @llvm.experimental.constrained.powi.f64({{.*}}) #[[ATTR1]]280 281declare double @llvm.experimental.constrained.sin.f64(double, metadata, metadata)282; CHECK: @llvm.experimental.constrained.sin.f64({{.*}}) #[[ATTR1]]283 284declare double @llvm.experimental.constrained.cos.f64(double, metadata, metadata)285; CHECK: @llvm.experimental.constrained.cos.f64({{.*}}) #[[ATTR1]]286 287declare double @llvm.experimental.constrained.tan.f64(double, metadata, metadata)288; CHECK: @llvm.experimental.constrained.tan.f64({{.*}}) #[[ATTR1]]289 290declare double @llvm.experimental.constrained.asin.f64(double, metadata, metadata)291; CHECK: @llvm.experimental.constrained.asin.f64({{.*}}) #[[ATTR1]]292 293declare double @llvm.experimental.constrained.acos.f64(double, metadata, metadata)294; CHECK: @llvm.experimental.constrained.acos.f64({{.*}}) #[[ATTR1]]295 296declare double @llvm.experimental.constrained.atan.f64(double, metadata, metadata)297; CHECK: @llvm.experimental.constrained.atan.f64({{.*}}) #[[ATTR1]]298 299declare double @llvm.experimental.constrained.atan2.f64(double, double, metadata, metadata)300; CHECK: @llvm.experimental.constrained.atan2.f64({{.*}}) #[[ATTR1]]301 302declare double @llvm.experimental.constrained.sinh.f64(double, metadata, metadata)303; CHECK: @llvm.experimental.constrained.sinh.f64({{.*}}) #[[ATTR1]]304 305declare double @llvm.experimental.constrained.cosh.f64(double, metadata, metadata)306; CHECK: @llvm.experimental.constrained.cosh.f64({{.*}}) #[[ATTR1]]307 308declare double @llvm.experimental.constrained.tanh.f64(double, metadata, metadata)309; CHECK: @llvm.experimental.constrained.tanh.f64({{.*}}) #[[ATTR1]]310 311declare double @llvm.experimental.constrained.pow.f64(double, double, metadata, metadata)312; CHECK: @llvm.experimental.constrained.pow.f64({{.*}}) #[[ATTR1]]313 314declare double @llvm.experimental.constrained.log.f64(double, metadata, metadata)315; CHECK: @llvm.experimental.constrained.log.f64({{.*}}) #[[ATTR1]]316 317declare double @llvm.experimental.constrained.log10.f64(double, metadata, metadata)318; CHECK: @llvm.experimental.constrained.log10.f64({{.*}}) #[[ATTR1]]319 320declare double @llvm.experimental.constrained.log2.f64(double, metadata, metadata)321; CHECK: @llvm.experimental.constrained.log2.f64({{.*}}) #[[ATTR1]]322 323declare double @llvm.experimental.constrained.exp.f64(double, metadata, metadata)324; CHECK: @llvm.experimental.constrained.exp.f64({{.*}}) #[[ATTR1]]325 326declare double @llvm.experimental.constrained.exp2.f64(double, metadata, metadata)327; CHECK: @llvm.experimental.constrained.exp2.f64({{.*}}) #[[ATTR1]]328 329declare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata)330; CHECK: @llvm.experimental.constrained.rint.f64({{.*}}) #[[ATTR1]]331 332declare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata)333; CHECK: @llvm.experimental.constrained.nearbyint.f64({{.*}}) #[[ATTR1]]334 335declare i32 @llvm.experimental.constrained.lrint.i32.f64(double, metadata, metadata)336; CHECK: @llvm.experimental.constrained.lrint.i32.f64({{.*}}) #[[ATTR1]]337 338declare i64 @llvm.experimental.constrained.llrint.i64.f64(double, metadata, metadata)339; CHECK: @llvm.experimental.constrained.llrint.i64.f64({{.*}}) #[[ATTR1]]340 341declare double @llvm.experimental.constrained.maxnum.f64(double, double, metadata)342; CHECK: @llvm.experimental.constrained.maxnum.f64({{.*}}) #[[ATTR1]]343 344declare double @llvm.experimental.constrained.minnum.f64(double, double, metadata)345; CHECK: @llvm.experimental.constrained.minnum.f64({{.*}}) #[[ATTR1]]346 347declare double @llvm.experimental.constrained.maximum.f64(double, double, metadata)348; CHECK: @llvm.experimental.constrained.maximum.f64({{.*}}) #[[ATTR1]]349 350declare double @llvm.experimental.constrained.minimum.f64(double, double, metadata)351; CHECK: @llvm.experimental.constrained.minimum.f64({{.*}}) #[[ATTR1]]352 353declare double @llvm.experimental.constrained.ceil.f64(double, metadata)354; CHECK: @llvm.experimental.constrained.ceil.f64({{.*}}) #[[ATTR1]]355 356declare double @llvm.experimental.constrained.floor.f64(double, metadata)357; CHECK: @llvm.experimental.constrained.floor.f64({{.*}}) #[[ATTR1]]358 359declare i32 @llvm.experimental.constrained.lround.i32.f64(double, metadata)360; CHECK: @llvm.experimental.constrained.lround.i32.f64({{.*}}) #[[ATTR1]]361 362declare i64 @llvm.experimental.constrained.llround.i64.f64(double, metadata)363; CHECK: @llvm.experimental.constrained.llround.i64.f64({{.*}}) #[[ATTR1]]364 365declare double @llvm.experimental.constrained.round.f64(double, metadata)366; CHECK: @llvm.experimental.constrained.round.f64({{.*}}) #[[ATTR1]]367 368declare double @llvm.experimental.constrained.roundeven.f64(double, metadata)369; CHECK: @llvm.experimental.constrained.roundeven.f64({{.*}}) #[[ATTR1]]370 371declare double @llvm.experimental.constrained.trunc.f64(double, metadata)372; CHECK: @llvm.experimental.constrained.trunc.f64({{.*}}) #[[ATTR1]]373 374declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)375; CHECK: @llvm.experimental.constrained.fcmp.f64({{.*}}) #[[ATTR1]]376 377declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)378; CHECK: @llvm.experimental.constrained.fcmps.f64({{.*}}) #[[ATTR1]]379 380; CHECK: attributes #[[ATTR0]] = {{{.*}} strictfp {{.*}}}381; CHECK: attributes #[[ATTR1]] = { {{.*}} strictfp {{.*}} }382 383