brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.3 KiB · 3871822 Raw
323 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -S -passes=early-cse -earlycse-debug-hash | FileCheck %s3; RUN: opt < %s -S -passes='early-cse<memssa>' | FileCheck %s4 5; Test use of constrained floating point intrinsics in the default6; floating point environment.7 8define double @multiple_fadd(double %a, double %b) #0 {9; CHECK-LABEL: @multiple_fadd(10; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[A:%.*]], double [[B:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0:[0-9]+]]11; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]12; CHECK-NEXT:    ret double [[TMP1]]13;14  %1 = call double @llvm.experimental.constrained.fadd.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #015  %2 = call double @llvm.experimental.constrained.fadd.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #016  %3 = call double @foo.f64(double %1, double %2) #017  ret double %218}19 20define double @multiple_fadd_split(double %a, double %b) #0 {21; CHECK-LABEL: @multiple_fadd_split(22; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[A:%.*]], double [[B:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]23; CHECK-NEXT:    call void @arbitraryfunc() #[[ATTR0]]24; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]25; CHECK-NEXT:    ret double [[TMP1]]26;27  %1 = call double @llvm.experimental.constrained.fadd.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #028  call void @arbitraryfunc() #029  %2 = call double @llvm.experimental.constrained.fadd.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #030  %3 = call double @foo.f64(double %1, double %2) #031  ret double %232}33 34define double @multiple_fsub(double %a, double %b) #0 {35; CHECK-LABEL: @multiple_fsub(36; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.fsub.f64(double [[A:%.*]], double [[B:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]37; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]38; CHECK-NEXT:    ret double [[TMP1]]39;40  %1 = call double @llvm.experimental.constrained.fsub.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #041  %2 = call double @llvm.experimental.constrained.fsub.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #042  %3 = call double @foo.f64(double %1, double %2) #043  ret double %244}45 46define double @multiple_fsub_split(double %a, double %b) #0 {47; CHECK-LABEL: @multiple_fsub_split(48; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.fsub.f64(double [[A:%.*]], double [[B:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]49; CHECK-NEXT:    call void @arbitraryfunc() #[[ATTR0]]50; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]51; CHECK-NEXT:    ret double [[TMP1]]52;53  %1 = call double @llvm.experimental.constrained.fsub.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #054  call void @arbitraryfunc() #055  %2 = call double @llvm.experimental.constrained.fsub.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #056  %3 = call double @foo.f64(double %1, double %2) #057  ret double %258}59 60define double @multiple_fmul(double %a, double %b) #0 {61; CHECK-LABEL: @multiple_fmul(62; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.fmul.f64(double [[A:%.*]], double [[B:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]63; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]64; CHECK-NEXT:    ret double [[TMP1]]65;66  %1 = call double @llvm.experimental.constrained.fmul.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #067  %2 = call double @llvm.experimental.constrained.fmul.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #068  %3 = call double @foo.f64(double %1, double %2) #069  ret double %270}71 72define double @multiple_fmul_split(double %a, double %b) #0 {73; CHECK-LABEL: @multiple_fmul_split(74; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.fmul.f64(double [[A:%.*]], double [[B:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]75; CHECK-NEXT:    call void @arbitraryfunc() #[[ATTR0]]76; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]77; CHECK-NEXT:    ret double [[TMP1]]78;79  %1 = call double @llvm.experimental.constrained.fmul.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #080  call void @arbitraryfunc() #081  %2 = call double @llvm.experimental.constrained.fmul.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #082  %3 = call double @foo.f64(double %1, double %2) #083  ret double %284}85 86define double @multiple_fdiv(double %a, double %b) #0 {87; CHECK-LABEL: @multiple_fdiv(88; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.fdiv.f64(double [[A:%.*]], double [[B:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]89; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]90; CHECK-NEXT:    ret double [[TMP1]]91;92  %1 = call double @llvm.experimental.constrained.fdiv.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #093  %2 = call double @llvm.experimental.constrained.fdiv.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #094  %3 = call double @foo.f64(double %1, double %2) #095  ret double %296}97 98define double @multiple_fdiv_split(double %a, double %b) #0 {99; CHECK-LABEL: @multiple_fdiv_split(100; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.fdiv.f64(double [[A:%.*]], double [[B:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]101; CHECK-NEXT:    call void @arbitraryfunc() #[[ATTR0]]102; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]103; CHECK-NEXT:    ret double [[TMP1]]104;105  %1 = call double @llvm.experimental.constrained.fdiv.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0106  call void @arbitraryfunc() #0107  %2 = call double @llvm.experimental.constrained.fdiv.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0108  %3 = call double @foo.f64(double %1, double %2) #0109  ret double %2110}111 112define double @multiple_frem(double %a, double %b) #0 {113; CHECK-LABEL: @multiple_frem(114; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.frem.f64(double [[A:%.*]], double [[B:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]115; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]116; CHECK-NEXT:    ret double [[TMP1]]117;118  %1 = call double @llvm.experimental.constrained.frem.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0119  %2 = call double @llvm.experimental.constrained.frem.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0120  %3 = call double @foo.f64(double %1, double %2) #0121  ret double %2122}123 124define double @multiple_frem_split(double %a, double %b) #0 {125; CHECK-LABEL: @multiple_frem_split(126; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.frem.f64(double [[A:%.*]], double [[B:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]127; CHECK-NEXT:    call void @arbitraryfunc() #[[ATTR0]]128; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]129; CHECK-NEXT:    ret double [[TMP1]]130;131  %1 = call double @llvm.experimental.constrained.frem.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0132  call void @arbitraryfunc() #0133  %2 = call double @llvm.experimental.constrained.frem.f64(double %a, double %b, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0134  %3 = call double @foo.f64(double %1, double %2) #0135  ret double %2136}137 138define i32 @multiple_fptoui(double %a) #0 {139; CHECK-LABEL: @multiple_fptoui(140; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double [[A:%.*]], metadata !"fpexcept.ignore") #[[ATTR0]]141; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @bar.i32(i32 [[TMP1]], i32 [[TMP1]]) #[[ATTR0]]142; CHECK-NEXT:    ret i32 [[TMP1]]143;144  %1 = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %a, metadata !"fpexcept.ignore") #0145  %2 = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %a, metadata !"fpexcept.ignore") #0146  %3 = call i32 @bar.i32(i32 %1, i32 %1) #0147  ret i32 %2148}149 150define i32 @multiple_fptoui_split(double %a, double %b) #0 {151; CHECK-LABEL: @multiple_fptoui_split(152; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double [[A:%.*]], metadata !"fpexcept.ignore") #[[ATTR0]]153; CHECK-NEXT:    call void @arbitraryfunc() #[[ATTR0]]154; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @bar.i32(i32 [[TMP1]], i32 [[TMP1]]) #[[ATTR0]]155; CHECK-NEXT:    ret i32 [[TMP1]]156;157  %1 = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %a, metadata !"fpexcept.ignore") #0158  call void @arbitraryfunc() #0159  %2 = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %a, metadata !"fpexcept.ignore") #0160  %3 = call i32 @bar.i32(i32 %1, i32 %1) #0161  ret i32 %2162}163 164define double @multiple_uitofp(i32 %a) #0 {165; CHECK-LABEL: @multiple_uitofp(166; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 [[A:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]167; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]168; CHECK-NEXT:    ret double [[TMP1]]169;170  %1 = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %a, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0171  %2 = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %a, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0172  %3 = call double @foo.f64(double %1, double %1) #0173  ret double %2174}175 176define double @multiple_uitofp_split(i32 %a) #0 {177; CHECK-LABEL: @multiple_uitofp_split(178; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 [[A:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]179; CHECK-NEXT:    call void @arbitraryfunc() #[[ATTR0]]180; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]181; CHECK-NEXT:    ret double [[TMP1]]182;183  %1 = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %a, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0184  call void @arbitraryfunc() #0185  %2 = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %a, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0186  %3 = call double @foo.f64(double %1, double %1) #0187  ret double %2188}189 190define i32 @multiple_fptosi(double %a) #0 {191; CHECK-LABEL: @multiple_fptosi(192; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double [[A:%.*]], metadata !"fpexcept.ignore") #[[ATTR0]]193; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @bar.i32(i32 [[TMP1]], i32 [[TMP1]]) #[[ATTR0]]194; CHECK-NEXT:    ret i32 [[TMP1]]195;196  %1 = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %a, metadata !"fpexcept.ignore") #0197  %2 = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %a, metadata !"fpexcept.ignore") #0198  %3 = call i32 @bar.i32(i32 %1, i32 %1) #0199  ret i32 %2200}201 202define i32 @multiple_fptosi_split(double %a, double %b) #0 {203; CHECK-LABEL: @multiple_fptosi_split(204; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double [[A:%.*]], metadata !"fpexcept.ignore") #[[ATTR0]]205; CHECK-NEXT:    call void @arbitraryfunc() #[[ATTR0]]206; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @bar.i32(i32 [[TMP1]], i32 [[TMP1]]) #[[ATTR0]]207; CHECK-NEXT:    ret i32 [[TMP1]]208;209  %1 = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %a, metadata !"fpexcept.ignore") #0210  call void @arbitraryfunc() #0211  %2 = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %a, metadata !"fpexcept.ignore") #0212  %3 = call i32 @bar.i32(i32 %1, i32 %1) #0213  ret i32 %2214}215 216define double @multiple_sitofp(i32 %a) #0 {217; CHECK-LABEL: @multiple_sitofp(218; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 [[A:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]219; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]220; CHECK-NEXT:    ret double [[TMP1]]221;222  %1 = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %a, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0223  %2 = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %a, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0224  %3 = call double @foo.f64(double %1, double %1) #0225  ret double %2226}227 228define double @multiple_sitofp_split(i32 %a) #0 {229; CHECK-LABEL: @multiple_sitofp_split(230; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 [[A:%.*]], metadata !"round.tonearest", metadata !"fpexcept.ignore") #[[ATTR0]]231; CHECK-NEXT:    call void @arbitraryfunc() #[[ATTR0]]232; CHECK-NEXT:    [[TMP2:%.*]] = call double @foo.f64(double [[TMP1]], double [[TMP1]]) #[[ATTR0]]233; CHECK-NEXT:    ret double [[TMP1]]234;235  %1 = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %a, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0236  call void @arbitraryfunc() #0237  %2 = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %a, metadata !"round.tonearest", metadata !"fpexcept.ignore") #0238  %3 = call double @foo.f64(double %1, double %1) #0239  ret double %2240}241 242define i1 @multiple_fcmp(double %a, double %b) #0 {243; CHECK-LABEL: @multiple_fcmp(244; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f64(double [[A:%.*]], double [[B:%.*]], metadata !"oeq", metadata !"fpexcept.ignore") #[[ATTR0]]245; CHECK-NEXT:    [[TMP2:%.*]] = zext i1 [[TMP1]] to i32246; CHECK-NEXT:    [[TMP3:%.*]] = call i32 @bar.i32(i32 [[TMP2]], i32 [[TMP2]]) #[[ATTR0]]247; CHECK-NEXT:    ret i1 [[TMP1]]248;249  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.ignore") #0250  %2 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.ignore") #0251  %3 = zext i1 %1 to i32252  %4 = zext i1 %2 to i32253  %5 = call i32 @bar.i32(i32 %3, i32 %4) #0254  ret i1 %2255}256 257define i1 @multiple_fcmp_split(double %a, double %b) #0 {258; CHECK-LABEL: @multiple_fcmp_split(259; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f64(double [[A:%.*]], double [[B:%.*]], metadata !"oeq", metadata !"fpexcept.ignore") #[[ATTR0]]260; CHECK-NEXT:    call void @arbitraryfunc() #[[ATTR0]]261; CHECK-NEXT:    [[TMP2:%.*]] = zext i1 [[TMP1]] to i32262; CHECK-NEXT:    [[TMP3:%.*]] = call i32 @bar.i32(i32 [[TMP2]], i32 [[TMP2]]) #[[ATTR0]]263; CHECK-NEXT:    ret i1 [[TMP1]]264;265  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.ignore") #0266  call void @arbitraryfunc() #0267  %2 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.ignore") #0268  %3 = zext i1 %1 to i32269  %4 = zext i1 %2 to i32270  %5 = call i32 @bar.i32(i32 %3, i32 %4) #0271  ret i1 %2272}273 274define i1 @multiple_fcmps(double %a, double %b) #0 {275; CHECK-LABEL: @multiple_fcmps(276; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f64(double [[A:%.*]], double [[B:%.*]], metadata !"oeq", metadata !"fpexcept.ignore") #[[ATTR0]]277; CHECK-NEXT:    [[TMP2:%.*]] = zext i1 [[TMP1]] to i32278; CHECK-NEXT:    [[TMP3:%.*]] = call i32 @bar.i32(i32 [[TMP2]], i32 [[TMP2]]) #[[ATTR0]]279; CHECK-NEXT:    ret i1 [[TMP1]]280;281  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.ignore") #0282  %2 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.ignore") #0283  %3 = zext i1 %1 to i32284  %4 = zext i1 %2 to i32285  %5 = call i32 @bar.i32(i32 %3, i32 %4) #0286  ret i1 %2287}288 289define i1 @multiple_fcmps_split(double %a, double %b) #0 {290; CHECK-LABEL: @multiple_fcmps_split(291; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f64(double [[A:%.*]], double [[B:%.*]], metadata !"oeq", metadata !"fpexcept.ignore") #[[ATTR0]]292; CHECK-NEXT:    call void @arbitraryfunc() #[[ATTR0]]293; CHECK-NEXT:    [[TMP2:%.*]] = zext i1 [[TMP1]] to i32294; CHECK-NEXT:    [[TMP3:%.*]] = call i32 @bar.i32(i32 [[TMP2]], i32 [[TMP2]]) #[[ATTR0]]295; CHECK-NEXT:    ret i1 [[TMP1]]296;297  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.ignore") #0298  call void @arbitraryfunc() #0299  %2 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.ignore") #0300  %3 = zext i1 %1 to i32301  %4 = zext i1 %2 to i32302  %5 = call i32 @bar.i32(i32 %3, i32 %4) #0303  ret i1 %2304}305 306attributes #0 = { strictfp }307 308declare void @arbitraryfunc() #0309declare double @foo.f64(double, double) #0310declare i32 @bar.i32(i32, i32) #0311 312declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata)313declare double @llvm.experimental.constrained.fsub.f64(double, double, metadata, metadata)314declare double @llvm.experimental.constrained.fmul.f64(double, double, metadata, metadata)315declare double @llvm.experimental.constrained.fdiv.f64(double, double, metadata, metadata)316declare double @llvm.experimental.constrained.frem.f64(double, double, metadata, metadata)317declare i32 @llvm.experimental.constrained.fptoui.i32.f64(double, metadata)318declare double @llvm.experimental.constrained.uitofp.f64.i32(i32, metadata, metadata)319declare i32 @llvm.experimental.constrained.fptosi.i32.f64(double, metadata)320declare double @llvm.experimental.constrained.sitofp.f64.i32(i32, metadata, metadata)321declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)322declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)323