xref: /llvm-project/llvm/test/Transforms/SCCP/strictfp-phis-fcmps.ll (revision 819abe412dd554303cb932d6ec2200b9b9ebdd78)
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