Skip to content

Commit 2c7395e

Browse files
committed
[InstCombine] Add more tests. NFC.
1 parent f0cea1f commit 2c7395e

File tree

1 file changed

+220
-0
lines changed
  • llvm/test/Transforms/InstCombine

1 file changed

+220
-0
lines changed

llvm/test/Transforms/InstCombine/fabs.ll

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1454,6 +1454,226 @@ define i1 @test_fabs_used_is_fpclass_zero_or_pinf(float %x) {
14541454
ret i1 %is_fpclass
14551455
}
14561456

1457+
define float @test_fabs_nsz_used_by_fadd(float %x) {
1458+
; CHECK-LABEL: @test_fabs_nsz_used_by_fadd(
1459+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1460+
; CHECK-NEXT: [[OP:%.*]] = fadd float [[SEL]], 1.000000e+00
1461+
; CHECK-NEXT: ret float [[OP]]
1462+
;
1463+
%cmp = fcmp oge float %x, 0.000000e+00
1464+
%neg = fneg float %x
1465+
%sel = select nsz i1 %cmp, float %x, float %neg
1466+
%op = fadd float %sel, 1.000000e+00
1467+
ret float %op
1468+
}
1469+
1470+
define float @test_fabs_nsz_used_by_fsub(float %x) {
1471+
; CHECK-LABEL: @test_fabs_nsz_used_by_fsub(
1472+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1473+
; CHECK-NEXT: [[OP:%.*]] = fsub float 1.000000e+00, [[SEL]]
1474+
; CHECK-NEXT: ret float [[OP]]
1475+
;
1476+
%cmp = fcmp oge float %x, 0.000000e+00
1477+
%neg = fneg float %x
1478+
%sel = select nsz i1 %cmp, float %x, float %neg
1479+
%op = fsub float 1.000000e+00, %sel
1480+
ret float %op
1481+
}
1482+
1483+
define float @test_fabs_nsz_used_by_fmul(float %x) {
1484+
; CHECK-LABEL: @test_fabs_nsz_used_by_fmul(
1485+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1486+
; CHECK-NEXT: [[OP:%.*]] = fmul float [[SEL]], 3.000000e+00
1487+
; CHECK-NEXT: ret float [[OP]]
1488+
;
1489+
%cmp = fcmp oge float %x, 0.000000e+00
1490+
%neg = fneg float %x
1491+
%sel = select nsz i1 %cmp, float %x, float %neg
1492+
%op = fmul float %sel, 3.000000e+00
1493+
ret float %op
1494+
}
1495+
1496+
define float @test_fabs_nsz_used_by_fdiv(float %x) {
1497+
; CHECK-LABEL: @test_fabs_nsz_used_by_fdiv(
1498+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1499+
; CHECK-NEXT: [[OP:%.*]] = fdiv float [[SEL]], 3.000000e+00
1500+
; CHECK-NEXT: ret float [[OP]]
1501+
;
1502+
%cmp = fcmp oge float %x, 0.000000e+00
1503+
%neg = fneg float %x
1504+
%sel = select nsz i1 %cmp, float %x, float %neg
1505+
%op = fdiv float %sel, 3.000000e+00
1506+
ret float %op
1507+
}
1508+
1509+
define float @test_fabs_nsz_used_by_frem(float %x) {
1510+
; CHECK-LABEL: @test_fabs_nsz_used_by_frem(
1511+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1512+
; CHECK-NEXT: [[OP:%.*]] = fdiv float [[SEL]], 3.000000e+00
1513+
; CHECK-NEXT: ret float [[OP]]
1514+
;
1515+
%cmp = fcmp oge float %x, 0.000000e+00
1516+
%neg = fneg float %x
1517+
%sel = select nsz i1 %cmp, float %x, float %neg
1518+
%op = fdiv float %sel, 3.000000e+00
1519+
ret float %op
1520+
}
1521+
1522+
define half @test_fabs_nsz_used_by_fptrunc(float %x) {
1523+
; CHECK-LABEL: @test_fabs_nsz_used_by_fptrunc(
1524+
; CHECK-NEXT: [[TMP1:%.*]] = fptrunc float [[X:%.*]] to half
1525+
; CHECK-NEXT: [[OP:%.*]] = call nsz half @llvm.fabs.f16(half [[TMP1]])
1526+
; CHECK-NEXT: ret half [[OP]]
1527+
;
1528+
%cmp = fcmp oge float %x, 0.000000e+00
1529+
%neg = fneg float %x
1530+
%sel = select nsz i1 %cmp, float %x, float %neg
1531+
%op = fptrunc float %sel to half
1532+
ret half %op
1533+
}
1534+
1535+
define float @test_fabs_nsz_used_by_fpext(half %x) {
1536+
; CHECK-LABEL: @test_fabs_nsz_used_by_fpext(
1537+
; CHECK-NEXT: [[SEL:%.*]] = call nsz half @llvm.fabs.f16(half [[X:%.*]])
1538+
; CHECK-NEXT: [[OP:%.*]] = fpext half [[SEL]] to float
1539+
; CHECK-NEXT: ret float [[OP]]
1540+
;
1541+
%cmp = fcmp oge half %x, 0.000000e+00
1542+
%neg = fneg half %x
1543+
%sel = select nsz i1 %cmp, half %x, half %neg
1544+
%op = fpext half %sel to float
1545+
ret float %op
1546+
}
1547+
1548+
define float @test_fabs_nsz_used_by_maximum(float %x, float %y) {
1549+
; CHECK-LABEL: @test_fabs_nsz_used_by_maximum(
1550+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1551+
; CHECK-NEXT: [[MAX:%.*]] = call float @llvm.maximum.f32(float [[Y:%.*]], float [[SEL]])
1552+
; CHECK-NEXT: ret float [[MAX]]
1553+
;
1554+
%cmp = fcmp oge float %x, 0.000000e+00
1555+
%neg = fneg float %x
1556+
%sel = select nsz i1 %cmp, float %x, float %neg
1557+
%max = call float @llvm.maximum.f32(float %y, float %sel)
1558+
ret float %max
1559+
}
1560+
1561+
define float @test_fabs_nsz_used_by_maximumnum(float %x, float %y) {
1562+
; CHECK-LABEL: @test_fabs_nsz_used_by_maximumnum(
1563+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1564+
; CHECK-NEXT: [[MAX:%.*]] = call float @llvm.maximumnum.f32(float [[Y:%.*]], float [[SEL]])
1565+
; CHECK-NEXT: ret float [[MAX]]
1566+
;
1567+
%cmp = fcmp oge float %x, 0.000000e+00
1568+
%neg = fneg float %x
1569+
%sel = select nsz i1 %cmp, float %x, float %neg
1570+
%max = call float @llvm.maximumnum.f32(float %y, float %sel)
1571+
ret float %max
1572+
}
1573+
1574+
define float @test_fabs_nsz_used_by_fma(float %x, float %y, float %z) {
1575+
; CHECK-LABEL: @test_fabs_nsz_used_by_fma(
1576+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1577+
; CHECK-NEXT: [[MAX:%.*]] = call float @llvm.fma.f32(float [[SEL]], float [[Z:%.*]], float [[Z]])
1578+
; CHECK-NEXT: ret float [[MAX]]
1579+
;
1580+
%cmp = fcmp oge float %x, 0.000000e+00
1581+
%neg = fneg float %x
1582+
%sel = select nsz i1 %cmp, float %x, float %neg
1583+
%max = call float @llvm.fma.f32(float %sel, float %z, float %z)
1584+
ret float %max
1585+
}
1586+
1587+
define float @test_fabs_nsz_used_by_sqrt(float %x) {
1588+
; CHECK-LABEL: @test_fabs_nsz_used_by_sqrt(
1589+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1590+
; CHECK-NEXT: [[OP:%.*]] = call float @llvm.sqrt.f32(float [[SEL]])
1591+
; CHECK-NEXT: ret float [[OP]]
1592+
;
1593+
%cmp = fcmp oge float %x, 0.000000e+00
1594+
%neg = fneg float %x
1595+
%sel = select nsz i1 %cmp, float %x, float %neg
1596+
%op = call float @llvm.sqrt.f32(float %sel)
1597+
ret float %op
1598+
}
1599+
1600+
define float @test_fabs_nsz_used_by_pow(float %x, float %y) {
1601+
; CHECK-LABEL: @test_fabs_nsz_used_by_pow(
1602+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1603+
; CHECK-NEXT: [[OP:%.*]] = call float @llvm.pow.f32(float [[SEL]], float [[Y:%.*]])
1604+
; CHECK-NEXT: ret float [[OP]]
1605+
;
1606+
%cmp = fcmp oge float %x, 0.000000e+00
1607+
%neg = fneg float %x
1608+
%sel = select nsz i1 %cmp, float %x, float %neg
1609+
%op = call float @llvm.pow.f32(float %sel, float %y)
1610+
ret float %op
1611+
}
1612+
1613+
define float @test_fabs_nsz_used_by_powi(float %x, i32 %y) {
1614+
; CHECK-LABEL: @test_fabs_nsz_used_by_powi(
1615+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1616+
; CHECK-NEXT: [[OP:%.*]] = call float @llvm.powi.f32.i32(float [[SEL]], i32 [[Y:%.*]])
1617+
; CHECK-NEXT: ret float [[OP]]
1618+
;
1619+
%cmp = fcmp oge float %x, 0.000000e+00
1620+
%neg = fneg float %x
1621+
%sel = select nsz i1 %cmp, float %x, float %neg
1622+
%op = call float @llvm.powi.f32(float %sel, i32 %y)
1623+
ret float %op
1624+
}
1625+
1626+
define i32 @test_fabs_nsz_used_by_fptoui_sat(float %x) {
1627+
; CHECK-LABEL: @test_fabs_nsz_used_by_fptoui_sat(
1628+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1629+
; CHECK-NEXT: [[OP:%.*]] = call i32 @llvm.fptoui.sat.i32.f32(float [[SEL]])
1630+
; CHECK-NEXT: ret i32 [[OP]]
1631+
;
1632+
%cmp = fcmp oge float %x, 0.000000e+00
1633+
%neg = fneg float %x
1634+
%sel = select nsz i1 %cmp, float %x, float %neg
1635+
%op = call i32 @llvm.fptoui.sat.i32.f32(float %sel)
1636+
ret i32 %op
1637+
}
1638+
1639+
define <2 x i1> @test_fabs_used_vp_is_fpclass_zero_or_pinf(<2 x float> %x, <2 x i1> %mask, i32 %evl) {
1640+
; CHECK-LABEL: @test_fabs_used_vp_is_fpclass_zero_or_pinf(
1641+
; CHECK-NEXT: [[SEL:%.*]] = call <2 x float> @llvm.fabs.v2f32(<2 x float> [[X:%.*]])
1642+
; CHECK-NEXT: [[IS_FPCLASS:%.*]] = call <2 x i1> @llvm.vp.is.fpclass.v2f32(<2 x float> [[SEL]], i32 608, <2 x i1> [[MASK:%.*]], i32 [[EVL:%.*]])
1643+
; CHECK-NEXT: ret <2 x i1> [[IS_FPCLASS]]
1644+
;
1645+
%cmp = fcmp oge <2 x float> %x, zeroinitializer
1646+
%neg = fneg <2 x float> %x
1647+
%sel = select <2 x i1> %cmp, <2 x float> %x, <2 x float> %neg
1648+
%is_fpclass = call <2 x i1> @llvm.vp.is.fpclass.v2f32(<2 x float> %sel, i32 608, <2 x i1> %mask, i32 %evl)
1649+
ret <2 x i1> %is_fpclass
1650+
}
1651+
1652+
define void @test_fabs_nsz_used_by_invoke(float %x) personality ptr null {
1653+
; CHECK-LABEL: @test_fabs_nsz_used_by_invoke(
1654+
; CHECK-NEXT: [[SEL:%.*]] = call nsz float @llvm.fabs.f32(float [[X:%.*]])
1655+
; CHECK-NEXT: invoke void @use(float nofpclass(nan) [[SEL]])
1656+
; CHECK-NEXT: to label [[NORMAL:%.*]] unwind label [[UNWIND:%.*]]
1657+
; CHECK: normal:
1658+
; CHECK-NEXT: ret void
1659+
; CHECK: unwind:
1660+
; CHECK-NEXT: [[TMP1:%.*]] = landingpad ptr
1661+
; CHECK-NEXT: cleanup
1662+
; CHECK-NEXT: resume ptr null
1663+
;
1664+
%cmp = fcmp oge float %x, 0.000000e+00
1665+
%neg = fneg float %x
1666+
%sel = select nsz i1 %cmp, float %x, float %neg
1667+
invoke void @use(float nofpclass(nan) %sel) to label %normal unwind label %unwind
1668+
1669+
normal:
1670+
ret void
1671+
1672+
unwind:
1673+
landingpad ptr cleanup
1674+
resume ptr null
1675+
}
1676+
14571677
; Negative tests
14581678

14591679
define float @test_fabs_used_by_fpop_nnan(float %x, float %y) {

0 commit comments

Comments
 (0)