11f331224SKevin P. Neal; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 21f331224SKevin P. Neal; RUN: opt < %s -passes=sccp -S | FileCheck %s 31f331224SKevin P. Neal 41f331224SKevin P. Nealdefine i1 @float.1.defaultenv(i1 %cmp) #0 { 51f331224SKevin P. Neal; CHECK-LABEL: @float.1.defaultenv( 61f331224SKevin P. Neal; CHECK-NEXT: entry: 71f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 81f331224SKevin P. Neal; CHECK: if.true: 91f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 101f331224SKevin P. Neal; CHECK: end: 11cfb88ee3SKevin P. Neal; CHECK-NEXT: ret i1 true 121f331224SKevin P. Neal; 131f331224SKevin P. Neal 141f331224SKevin P. Nealentry: 151f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 161f331224SKevin P. Neal 171f331224SKevin P. Nealif.true: 181f331224SKevin P. Neal br label %end 191f331224SKevin P. Neal 201f331224SKevin P. Nealend: 211f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ 1.0, %if.true] 22*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.ignore") #0 231f331224SKevin P. Neal 241f331224SKevin P. Neal ret i1 %c 251f331224SKevin P. Neal} 261f331224SKevin P. Neal 271f331224SKevin P. Nealdefine i1 @float.1.maytrap(i1 %cmp) #0 { 281f331224SKevin P. Neal; CHECK-LABEL: @float.1.maytrap( 291f331224SKevin P. Neal; CHECK-NEXT: entry: 301f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 311f331224SKevin P. Neal; CHECK: if.true: 321f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 331f331224SKevin P. Neal; CHECK: end: 34cfb88ee3SKevin P. Neal; CHECK-NEXT: ret i1 true 351f331224SKevin P. Neal; 361f331224SKevin P. Neal 371f331224SKevin P. Nealentry: 381f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 391f331224SKevin P. Neal 401f331224SKevin P. Nealif.true: 411f331224SKevin P. Neal br label %end 421f331224SKevin P. Neal 431f331224SKevin P. Nealend: 441f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ 1.0, %if.true] 45*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.maytrap") #0 461f331224SKevin P. Neal 471f331224SKevin P. Neal ret i1 %c 481f331224SKevin P. Neal} 491f331224SKevin P. Neal 501f331224SKevin P. Nealdefine i1 @float.1.strict(i1 %cmp) #0 { 511f331224SKevin P. Neal; CHECK-LABEL: @float.1.strict( 521f331224SKevin P. Neal; CHECK-NEXT: entry: 531f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 541f331224SKevin P. Neal; CHECK: if.true: 551f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 561f331224SKevin P. Neal; CHECK: end: 57cfb88ee3SKevin P. Neal; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float 1.000000e+00, float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.strict") #[[ATTR0:[0-9]+]] 58cfb88ee3SKevin P. Neal; CHECK-NEXT: ret i1 true 591f331224SKevin P. Neal; 601f331224SKevin P. Neal 611f331224SKevin P. Nealentry: 621f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 631f331224SKevin P. Neal 641f331224SKevin P. Nealif.true: 651f331224SKevin P. Neal br label %end 661f331224SKevin P. Neal 671f331224SKevin P. Nealend: 681f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ 1.0, %if.true] 69*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.strict") #0 701f331224SKevin P. Neal 711f331224SKevin P. Neal ret i1 %c 721f331224SKevin P. Neal} 731f331224SKevin P. Neal 741f331224SKevin P. Nealdefine i1 @float.2.defaultenv(i1 %cmp) #0 { 751f331224SKevin P. Neal; CHECK-LABEL: @float.2.defaultenv( 761f331224SKevin P. Neal; CHECK-NEXT: entry: 771f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 781f331224SKevin P. Neal; CHECK: if.true: 791f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 801f331224SKevin P. Neal; CHECK: end: 811f331224SKevin P. Neal; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ 2.000000e+00, [[IF_TRUE]] ] 821f331224SKevin P. Neal; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.ignore") #[[ATTR0]] 831f331224SKevin P. Neal; CHECK-NEXT: ret i1 [[C]] 841f331224SKevin P. Neal; 851f331224SKevin P. Neal 861f331224SKevin P. Nealentry: 871f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 881f331224SKevin P. Neal 891f331224SKevin P. Nealif.true: 901f331224SKevin P. Neal br label %end 911f331224SKevin P. Neal 921f331224SKevin P. Nealend: 931f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ 2.0, %if.true] 94*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.ignore") #0 951f331224SKevin P. Neal ret i1 %c 961f331224SKevin P. Neal} 971f331224SKevin P. Neal 981f331224SKevin P. Nealdefine i1 @float.2.maytrap(i1 %cmp) #0 { 991f331224SKevin P. Neal; CHECK-LABEL: @float.2.maytrap( 1001f331224SKevin P. Neal; CHECK-NEXT: entry: 1011f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 1021f331224SKevin P. Neal; CHECK: if.true: 1031f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 1041f331224SKevin P. Neal; CHECK: end: 1051f331224SKevin P. Neal; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ 2.000000e+00, [[IF_TRUE]] ] 1061f331224SKevin P. Neal; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.maytrap") #[[ATTR0]] 1071f331224SKevin P. Neal; CHECK-NEXT: ret i1 [[C]] 1081f331224SKevin P. Neal; 1091f331224SKevin P. Neal 1101f331224SKevin P. Nealentry: 1111f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 1121f331224SKevin P. Neal 1131f331224SKevin P. Nealif.true: 1141f331224SKevin P. Neal br label %end 1151f331224SKevin P. Neal 1161f331224SKevin P. Nealend: 1171f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ 2.0, %if.true] 118*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.maytrap") #0 1191f331224SKevin P. Neal ret i1 %c 1201f331224SKevin P. Neal} 1211f331224SKevin P. Neal 1221f331224SKevin P. Nealdefine i1 @float.2.strict(i1 %cmp) #0 { 1231f331224SKevin P. Neal; CHECK-LABEL: @float.2.strict( 1241f331224SKevin P. Neal; CHECK-NEXT: entry: 1251f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 1261f331224SKevin P. Neal; CHECK: if.true: 1271f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 1281f331224SKevin P. Neal; CHECK: end: 1291f331224SKevin P. Neal; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ 2.000000e+00, [[IF_TRUE]] ] 1301f331224SKevin P. Neal; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.strict") #[[ATTR0]] 1311f331224SKevin P. Neal; CHECK-NEXT: ret i1 [[C]] 1321f331224SKevin P. Neal; 1331f331224SKevin P. Neal 1341f331224SKevin P. Nealentry: 1351f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 1361f331224SKevin P. Neal 1371f331224SKevin P. Nealif.true: 1381f331224SKevin P. Neal br label %end 1391f331224SKevin P. Neal 1401f331224SKevin P. Nealend: 1411f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ 2.0, %if.true] 142*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.strict") #0 1431f331224SKevin P. Neal ret i1 %c 1441f331224SKevin P. Neal} 1451f331224SKevin P. Neal 1461f331224SKevin P. Nealdefine i1 @float.3.defaultenv(float %f, i1 %cmp) #0 { 1471f331224SKevin P. Neal; CHECK-LABEL: @float.3.defaultenv( 1481f331224SKevin P. Neal; CHECK-NEXT: entry: 1491f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 1501f331224SKevin P. Neal; CHECK: if.true: 1511f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 1521f331224SKevin P. Neal; CHECK: end: 1531f331224SKevin P. Neal; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ [[F:%.*]], [[IF_TRUE]] ] 1541f331224SKevin P. Neal; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.ignore") #[[ATTR0]] 1551f331224SKevin P. Neal; CHECK-NEXT: ret i1 [[C]] 1561f331224SKevin P. Neal; 1571f331224SKevin P. Neal 1581f331224SKevin P. Nealentry: 1591f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 1601f331224SKevin P. Neal 1611f331224SKevin P. Nealif.true: 1621f331224SKevin P. Neal br label %end 1631f331224SKevin P. Neal 1641f331224SKevin P. Nealend: 1651f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ %f, %if.true] 166*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.ignore") #0 1671f331224SKevin P. Neal ret i1 %c 1681f331224SKevin P. Neal} 1691f331224SKevin P. Neal 1701f331224SKevin P. Nealdefine i1 @float.3.maytrap(float %f, i1 %cmp) #0 { 1711f331224SKevin P. Neal; CHECK-LABEL: @float.3.maytrap( 1721f331224SKevin P. Neal; CHECK-NEXT: entry: 1731f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 1741f331224SKevin P. Neal; CHECK: if.true: 1751f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 1761f331224SKevin P. Neal; CHECK: end: 1771f331224SKevin P. Neal; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ [[F:%.*]], [[IF_TRUE]] ] 1781f331224SKevin P. Neal; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.maytrap") #[[ATTR0]] 1791f331224SKevin P. Neal; CHECK-NEXT: ret i1 [[C]] 1801f331224SKevin P. Neal; 1811f331224SKevin P. Neal 1821f331224SKevin P. Nealentry: 1831f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 1841f331224SKevin P. Neal 1851f331224SKevin P. Nealif.true: 1861f331224SKevin P. Neal br label %end 1871f331224SKevin P. Neal 1881f331224SKevin P. Nealend: 1891f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ %f, %if.true] 190*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.maytrap") #0 1911f331224SKevin P. Neal ret i1 %c 1921f331224SKevin P. Neal} 1931f331224SKevin P. Neal 1941f331224SKevin P. Nealdefine i1 @float.3.strict(float %f, i1 %cmp) #0 { 1951f331224SKevin P. Neal; CHECK-LABEL: @float.3.strict( 1961f331224SKevin P. Neal; CHECK-NEXT: entry: 1971f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 1981f331224SKevin P. Neal; CHECK: if.true: 1991f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 2001f331224SKevin P. Neal; CHECK: end: 2011f331224SKevin P. Neal; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ [[F:%.*]], [[IF_TRUE]] ] 2021f331224SKevin P. Neal; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.strict") #[[ATTR0]] 2031f331224SKevin P. Neal; CHECK-NEXT: ret i1 [[C]] 2041f331224SKevin P. Neal; 2051f331224SKevin P. Neal 2061f331224SKevin P. Nealentry: 2071f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 2081f331224SKevin P. Neal 2091f331224SKevin P. Nealif.true: 2101f331224SKevin P. Neal br label %end 2111f331224SKevin P. Neal 2121f331224SKevin P. Nealend: 2131f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ %f, %if.true] 214*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.strict") #0 2151f331224SKevin P. Neal ret i1 %c 2161f331224SKevin P. Neal} 2171f331224SKevin P. Neal 2181f331224SKevin P. Nealdefine i1 @float.4_unreachable.defaultenv(float %f, i1 %cmp) #0 { 2191f331224SKevin P. Neal; CHECK-LABEL: @float.4_unreachable.defaultenv( 2201f331224SKevin P. Neal; CHECK-NEXT: entry: 2211f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 2221f331224SKevin P. Neal; CHECK: if.true: 2231f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 2241f331224SKevin P. Neal; CHECK: end: 225cfb88ee3SKevin P. Neal; CHECK-NEXT: ret i1 false 2261f331224SKevin P. Neal; 2271f331224SKevin P. Neal 2281f331224SKevin P. Nealentry: 2291f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 2301f331224SKevin P. Neal 2311f331224SKevin P. Nealif.true: 2321f331224SKevin P. Neal br label %end 2331f331224SKevin P. Neal 2341f331224SKevin P. Nealdead: 2351f331224SKevin P. Neal br label %end 2361f331224SKevin P. Neal 2371f331224SKevin P. Nealend: 2381f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ 1.0, %if.true], [ %f, %dead ] 239*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"une", metadata !"fpexcept.ignore") #0 2401f331224SKevin P. Neal ret i1 %c 2411f331224SKevin P. Neal} 2421f331224SKevin P. Neal 2431f331224SKevin P. Nealdefine i1 @float.4_unreachable.maytrap(float %f, i1 %cmp) #0 { 2441f331224SKevin P. Neal; CHECK-LABEL: @float.4_unreachable.maytrap( 2451f331224SKevin P. Neal; CHECK-NEXT: entry: 2461f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 2471f331224SKevin P. Neal; CHECK: if.true: 2481f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 2491f331224SKevin P. Neal; CHECK: end: 250cfb88ee3SKevin P. Neal; CHECK-NEXT: ret i1 false 2511f331224SKevin P. Neal; 2521f331224SKevin P. Neal 2531f331224SKevin P. Nealentry: 2541f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 2551f331224SKevin P. Neal 2561f331224SKevin P. Nealif.true: 2571f331224SKevin P. Neal br label %end 2581f331224SKevin P. Neal 2591f331224SKevin P. Nealdead: 2601f331224SKevin P. Neal br label %end 2611f331224SKevin P. Neal 2621f331224SKevin P. Nealend: 2631f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ 1.0, %if.true], [ %f, %dead ] 264*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"une", metadata !"fpexcept.maytrap") #0 2651f331224SKevin P. Neal ret i1 %c 2661f331224SKevin P. Neal} 2671f331224SKevin P. Neal 2681f331224SKevin P. Neal; FIXME: It's a shame we can't eliminate this fcmps here: 2691f331224SKevin P. Nealdefine i1 @float.4_unreachable.strict(float %f, i1 %cmp) #0 { 2701f331224SKevin P. Neal; CHECK-LABEL: @float.4_unreachable.strict( 2711f331224SKevin P. Neal; CHECK-NEXT: entry: 2721f331224SKevin P. Neal; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 2731f331224SKevin P. Neal; CHECK: if.true: 2741f331224SKevin P. Neal; CHECK-NEXT: br label [[END]] 2751f331224SKevin P. Neal; CHECK: end: 2761f331224SKevin P. Neal; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float 1.000000e+00, float 1.000000e+00, metadata !"une", metadata !"fpexcept.strict") #[[ATTR0]] 277cfb88ee3SKevin P. Neal; CHECK-NEXT: ret i1 false 2781f331224SKevin P. Neal; 2791f331224SKevin P. Neal 2801f331224SKevin P. Nealentry: 2811f331224SKevin P. Neal br i1 %cmp, label %if.true, label %end 2821f331224SKevin P. Neal 2831f331224SKevin P. Nealif.true: 2841f331224SKevin P. Neal br label %end 2851f331224SKevin P. Neal 2861f331224SKevin P. Nealdead: 2871f331224SKevin P. Neal br label %end 2881f331224SKevin P. Neal 2891f331224SKevin P. Nealend: 2901f331224SKevin P. Neal %p = phi float [ 1.0, %entry ], [ 1.0, %if.true], [ %f, %dead ] 291*819abe41SSerge Pavlov %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"une", metadata !"fpexcept.strict") #0 2921f331224SKevin P. Neal ret i1 %c 2931f331224SKevin P. Neal} 2941f331224SKevin P. Neal 2951f331224SKevin P. Nealattributes #0 = { strictfp } 2961f331224SKevin P. Neal 297*819abe41SSerge Pavlovdeclare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata) 2981f331224SKevin P. Neal 299